66 std::tuple<uint8_t, uint8_t, uint8_t, uint8_t>,
90 [[nodiscard]] uint32_t
getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount)
const;
231 explicit VTF(std::vector<std::byte>&& vtfData,
bool parseHeaderOnly =
false);
233 explicit VTF(std::span<const std::byte> vtfData,
bool parseHeaderOnly =
false);
235 explicit VTF(
const std::filesystem::path& vtfPath,
bool parseHeaderOnly =
false);
243 VTF& operator=(
VTF&&) noexcept = default;
245 [[nodiscard]] explicit operator
bool() const;
255 static
bool create(const std::filesystem::path& imagePath, const std::filesystem::path& vtfPath, const
CreationOptions& options);
277 [[nodiscard]] uint16_t
getWidth(uint8_t mip = 0) const;
281 [[nodiscard]] uint16_t
getHeight(uint8_t mip = 0) const;
287 [[nodiscard]] uint32_t
getFlags() const;
295 [[nodiscard]]
bool isSRGB() const;
323 [[nodiscard]] uint16_t
getDepth(uint8_t mip = 0) const;
362 [[nodiscard]] std::vector<std::
byte>
getParticleSheetFrameDataRaw(uint16_t& spriteWidth, uint16_t& spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds = 0, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
365 [[nodiscard]] std::vector<std::
byte>
getParticleSheetFrameDataAs(
ImageFormat newFormat, uint16_t& spriteWidth, uint16_t& spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds = 0, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
368 [[nodiscard]] std::vector<std::
byte>
getParticleSheetFrameDataAsRGBA8888(uint16_t& spriteWidth, uint16_t& spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds = 0, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
378 void setLODResource(uint8_t u, uint8_t v, uint8_t u360 = 0, uint8_t v360 = 0);
404 [[nodiscard]] std::span<const std::
byte>
getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
406 [[nodiscard]] std::vector<std::
byte>
getImageDataAs(
ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
408 [[nodiscard]] std::vector<std::
byte>
getImageDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
410 bool setImage(std::span<const std::
byte> imageData_,
ImageFormat format_, uint16_t width_, uint16_t height_,
ImageConversion::ResizeFilter filter =
ImageConversion::ResizeFilter::DEFAULT, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0,
float quality =
ImageConversion::DEFAULT_COMPRESSED_QUALITY);
418 [[nodiscard]]
bool hasThumbnailData()
const;
420 [[nodiscard]] std::span<const std::byte> getThumbnailDataRaw()
const;
422 [[nodiscard]] std::vector<std::byte> getThumbnailDataAs(
ImageFormat newFormat)
const;
424 [[nodiscard]] std::vector<std::byte> getThumbnailDataAsRGBA8888()
const;
432 void removeThumbnail();
438 [[nodiscard]]
bool hasFallbackData()
const;
440 [[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0)
const;
442 [[nodiscard]] std::vector<std::byte> getFallbackDataAs(
ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0)
const;
444 [[nodiscard]] std::vector<std::byte> getFallbackDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0)
const;
448 void removeFallback();
454 [[nodiscard]] uint8_t getConsoleMipScale()
const;
456 void setConsoleMipScale(uint8_t consoleMipScale_);
458 [[nodiscard]] uint64_t estimateBakeSize()
const;
460 [[nodiscard]] uint64_t estimateBakeSize(
bool& isExact)
const;
462 [[nodiscard]] std::vector<std::byte> bake()
const;
464 bool bake(
const std::filesystem::path& vtfPath)
const;
467 static bool createInternal(
VTF& writer, CreationOptions options);
471 void setResourceInternal(
Resource::Type type, std::span<const std::byte> data_);
#define SOURCEPP_BITFLAGS_ENUM(Enum)
Defines bitwise operators for an enum or enum class.
void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_)
bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth=1)
void removeKeyValuesDataResource()
uint8_t getFallbackHeight() const
CompressionMethod compressionMethod
void computeReflectivity()
uint8_t getThumbnailWidth() const
ImageFormat getFormat() const
void setPlatform(Platform newPlatform)
uint16_t getHeight(uint8_t mip=0) const
VTF & operator=(const VTF &other)
uint8_t getFallbackWidth() const
sourcepp::math::Vec3f reflectivity
uint16_t getWidth(uint8_t mip=0) const
bool setRecommendedMipCount()
std::vector< std::byte > getParticleSheetFrameDataAsRGBA8888(uint16_t &spriteWidth, uint16_t &spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds=0, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
This is a convenience function. You're best off uploading the bounds to the GPU and scaling the UV th...
void computeMips(ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT)
void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_)
VTF(VTF &&) noexcept=default
void setCompressionLevel(int16_t newCompressionLevel)
ImageConversion::ResizeMethod imageHeightResizeMethod
void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_)
std::vector< std::byte > getParticleSheetFrameDataAs(ImageFormat newFormat, uint16_t &spriteWidth, uint16_t &spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds=0, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
This is a convenience function. You're best off uploading the bounds to the GPU and scaling the UV th...
float getBumpMapScale() const
void setKeyValuesDataResource(std::string_view value)
void computeTransparencyFlags()
std::vector< std::byte > data
Platform getPlatform() const
std::vector< std::byte > getPaletteResourceFrame(uint16_t frame=0) const
void addFlags(uint32_t flags_)
uint8_t getFaceCount() const
ImageFormat thumbnailFormat
void setFlags(uint32_t flags_)
void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter)
ImageConversion::ResizeMethod getImageHeightResizeMethod() const
void setBumpMapScale(float newBumpMapScale)
ImageFormat getThumbnailFormat() const
uint16_t getStartFrame() const
static constexpr auto FORMAT_DEFAULT
This value is only valid when passed to VTF::create through CreationOptions or VTF::setFormat.
void setReflectivity(sourcepp::math::Vec3f newReflectivity)
const std::vector< Resource > & getResources() const
void removeHotspotDataResource()
void setVersion(uint32_t newVersion)
bool hasImageData() const
ImageConversion::ResizeMethod imageWidthResizeMethod
void removeParticleSheetResource()
static bool create(std::span< const std::byte > imageData, ImageFormat format, uint16_t width, uint16_t height, const std::filesystem::path &vtfPath, const CreationOptions &options)
std::vector< std::byte > getImageDataAsRGBA8888(uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
uint16_t getFrameCount() const
uint8_t getMipCount() const
void setLODResource(uint8_t u, uint8_t v, uint8_t u360=0, uint8_t v360=0)
bool setFrameCount(uint16_t newFrameCount)
ImageConversion::ResizeMethod getImageWidthResizeMethod() const
std::vector< std::byte > getImageDataAs(ImageFormat newFormat, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap)
void setStartFrame(uint16_t newStartFrame)
std::span< const std::byte > getImageDataRaw(uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
sourcepp::math::Vec3f getReflectivity() const
uint8_t getFallbackMipCount() const
uint16_t getDepth(uint8_t mip=0) const
uint16_t getPaddedHeight(uint8_t mip=0) const
static constexpr auto FORMAT_UNCHANGED
This value is only valid when passed to VTF::create through CreationOptions.
bool setMipCount(uint8_t newMipCount)
void setExtendedFlagsResource(uint32_t value)
CompressionMethod getCompressionMethod() const
uint16_t getPaddedWidth(uint8_t mip=0) const
void setCRCResource(uint32_t value)
void setCompressionMethod(CompressionMethod newCompressionMethod)
bool setFaceCount(bool isCubeMap)
uint8_t getThumbnailHeight() const
const Resource * getResource(Resource::Type type) const
uint32_t getFlags() const
void setParticleSheetResource(const SHT &value)
@ FLAG_V1_VTEX_PREMULTIPLY_COLOR_BY_ONE_OVER_MIP_LEVEL
@ FLAG_V1_DEPTH_RENDERTARGET
@ FLAG_V4_TF2_IGNORE_PICMIP
@ FLAG_V2_NO_DEPTH_BUFFER
@ FLAG_V0_MULTI_BIT_ALPHA
@ FLAG_V2_VTEX_NICE_FILTERED
@ FLAG_V5_CSGO_SKIP_INITIAL_DOWNLOAD
@ FLAG_V0_VTEX_NO_COMPRESS
@ FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA
@ FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION
@ FLAG_XBOX_VTEX_PRESWIZZLED
@ FLAG_V4_TF2_STREAMABLE_FINE
@ FLAG_V5_CSGO_ASYNC_SKIP_INITIAL_LOW_RES
@ FLAG_V5_CSGO_ASYNC_DOWNLOAD
@ FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV
@ FLAG_V0_LOAD_SMALL_MIPS
@ FLAG_V4_TF2_IMMEDIATE_CLEANUP
@ FLAG_V4_TF2_STREAMABLE_COARSE
@ FLAG_XBOX_UNFILTERABLE_OK
@ FLAG_V4_TF2_STAGING_MEMORY
@ FLAG_V1_NO_DEBUG_OVERRIDE
uint32_t getVersion() const
int16_t getCompressionLevel() const
void setHotspotDataResource(const HOT &value)
void removeFlags(uint32_t flags_)
bool setDepth(uint16_t newDepth)
std::vector< Resource > resources
bool setImage(std::span< const std::byte > imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
std::vector< std::byte > getParticleSheetFrameDataRaw(uint16_t &spriteWidth, uint16_t &spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds=0, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
This is a convenience function. You're best off uploading the bounds to the GPU and scaling the UV th...
void removeExtendedFlagsResource()
consteval uint32_t makeFourCC(const char fourCC[4])
Creates a FourCC identifier from a string of 4 characters.
constexpr float DEFAULT_COMPRESSED_QUALITY
constexpr uint32_t VTF_SIGNATURE
constexpr uint32_t XTF_SIGNATURE
constexpr uint32_t VTFX_SIGNATURE
constexpr uint32_t VTF3_SIGNATURE
HOT getDataAsHotspotData() const
std::tuple< uint8_t, uint8_t, uint8_t, uint8_t > getDataAsLODControlInfo() const
ConvertedData convertData() const
std::string getDataAsKeyValuesData() const
int16_t getDataAsAuxCompressionLevel() const
CompressionMethod getDataAsAuxCompressionMethod() const
SHT getDataAsParticleSheet() const
std::variant< std::monostate, SHT, uint32_t, std::tuple< uint8_t, uint8_t, uint8_t, uint8_t >, std::string, HOT > ConvertedData
uint32_t getDataAsExtendedFlags() const
uint32_t getDataAsCRC() const
uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const
@ TYPE_PARTICLE_SHEET_DATA
std::vector< std::byte > getDataAsPalette(uint16_t frame) const
std::span< std::byte > data
uint16_t initialFrameCount
ImageConversion::ResizeBounds resizeBounds
float compressedFormatQuality
bool computeTransparencyFlags
ImageConversion::ResizeFilter filter
ImageConversion::ResizeMethod heightResizeMethod
CompressionMethod compressionMethod
ImageConversion::ResizeMethod widthResizeMethod