SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
VTF.h
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstddef>
5#include <filesystem>
6#include <span>
7#include <string>
8#include <string_view>
9#include <tuple>
10#include <utility>
11#include <variant>
12#include <vector>
13
15#include <sourcepp/Macros.h>
16
17#include "HOT.h"
18#include "ImageConversion.h"
19#include "SHT.h"
20
21namespace vtfpp {
22
27
28enum class CompressionMethod : int16_t {
29 // Strata Source v7.6 defines
31 ZSTD = 93,
32
33 // Signify the image resource should be compressed with LZMA on console
34 CONSOLE_LZMA = 0x360,
35};
36
37struct Resource {
52
53 enum Flags : uint8_t {
56 };
57
60 std::span<std::byte> data;
61
62 using ConvertedData = std::variant<
63 std::monostate, // Anything that would be equivalent to just returning data directly, or used as an error
64 SHT, // Particle Sheet
65 uint32_t, // CRC, TS0
66 std::tuple<uint8_t, uint8_t, uint8_t, uint8_t>, // LOD
67 std::string, // KVD
68 HOT // Hotspot data
69 >;
70 [[nodiscard]] ConvertedData convertData() const;
71
72 [[nodiscard]] std::vector<std::byte> getDataAsPalette(uint16_t frame) const;
73
74 [[nodiscard]] SHT getDataAsParticleSheet() const;
75
76 [[nodiscard]] uint32_t getDataAsCRC() const;
77
78 [[nodiscard]] uint32_t getDataAsExtendedFlags() const;
79
80 [[nodiscard]] std::tuple<uint8_t, uint8_t, uint8_t, uint8_t> getDataAsLODControlInfo() const;
81
82 [[nodiscard]] std::string getDataAsKeyValuesData() const;
83
84 [[nodiscard]] HOT getDataAsHotspotData() const;
85
86 [[nodiscard]] int16_t getDataAsAuxCompressionLevel() const;
87
89
90 [[nodiscard]] uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const;
91};
93
94/*
95 * === EASY DIFFICULTY WRITER API ===
96 *
97 * Use a static helper function to create a VTF in one function call - VTF::create
98 *
99 * === MEDIUM DIFFICULTY WRITER API ===
100 *
101 * Constructing a VTF instance from existing VTF data will let you modify that data.
102 *
103 * When constructing a VTF instance from scratch, this class has methods that should be
104 * called in a particular order. If they aren't your output VTF will look incorrect or
105 * have heavy artifacting. Some of these steps are optional, but the steps actually taken
106 * should be done in this order. Reference VTF::create and VTF::createInternal to see the
107 * intended "order of operations".
108 */
109class VTF {
110public:
111 enum Flags : uint32_t {
117 FLAG_V0_VTEX_HINT_DXT5 = 1u << 5, // Internal to vtex
118 FLAG_V0_VTEX_NO_COMPRESS = 1u << 6, // Internal to vtex
119 FLAG_V0_NORMAL = 1u << 7,
120 FLAG_V0_NO_MIP = 1u << 8, // Controlled by mip count
121 FLAG_V0_NO_LOD = 1u << 9,
126 FLAG_V0_ENVMAP = 1u << 14, // Controlled by face count
129
134 FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA = 1u << 19, // Internal to vtex
136 FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV = 1u << 21, // Internal to vtex
139
140 FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION = 1u << 22, // Internal to vtex
142 FLAG_V2_VTEX_NICE_FILTERED = 1u << 24, // Internal to vtex
143 FLAG_V2_CLAMP_U = 1u << 25,
146
152
155 FLAG_V3_SSBUMP = 1u << 27,
156 FLAG_V3_BORDER = 1u << 29,
158
159 FLAG_V4_SRGB = 1u << 6,
161
168
170 FLAG_V5_SRGB = 1u << 19,
174
181
184
186 };
187
196
222
224 static constexpr auto FORMAT_UNCHANGED = static_cast<ImageFormat>(-2);
225
227 static constexpr auto FORMAT_DEFAULT = static_cast<ImageFormat>(-1);
228
229 VTF();
230
231 explicit VTF(std::vector<std::byte>&& vtfData, bool parseHeaderOnly = false);
232
233 explicit VTF(std::span<const std::byte> vtfData, bool parseHeaderOnly = false);
234
235 explicit VTF(const std::filesystem::path& vtfPath, bool parseHeaderOnly = false);
236
237 VTF(const VTF& other);
238
239 VTF& operator=(const VTF& other);
240
241 VTF(VTF&&) noexcept = default;
242
243 VTF& operator=(VTF&&) noexcept = default;
244
245 [[nodiscard]] explicit operator bool() const;
246
247 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);
248
249 static bool create(ImageFormat format, uint16_t width, uint16_t height, const std::filesystem::path& vtfPath, const CreationOptions& options);
250
251 [[nodiscard]] static VTF create(std::span<const std::byte> imageData, ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
252
253 [[nodiscard]] static VTF create(ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
254
255 static bool create(const std::filesystem::path& imagePath, const std::filesystem::path& vtfPath, const CreationOptions& options);
256
257 [[nodiscard]] static VTF create(const std::filesystem::path& imagePath, const CreationOptions& options);
258
259 [[nodiscard]] Platform getPlatform() const;
260
261 void setPlatform(Platform newPlatform);
262
263 [[nodiscard]] uint32_t getVersion() const;
264
265 void setVersion(uint32_t newVersion);
266
267 [[nodiscard]] ImageConversion::ResizeMethod getImageWidthResizeMethod() const;
268
269 [[nodiscard]] ImageConversion::ResizeMethod getImageHeightResizeMethod() const;
270
271 void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_);
272
273 void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_);
274
275 void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_);
276
277 [[nodiscard]] uint16_t getWidth(uint8_t mip = 0) const;
278
279 [[nodiscard]] uint16_t getPaddedWidth(uint8_t mip = 0) const;
280
281 [[nodiscard]] uint16_t getHeight(uint8_t mip = 0) const;
282
283 [[nodiscard]] uint16_t getPaddedHeight(uint8_t mip = 0) const;
284
285 void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter);
286
287 [[nodiscard]] uint32_t getFlags() const;
288
289 void setFlags(uint32_t flags_);
290
291 void addFlags(uint32_t flags_);
292
293 void removeFlags(uint32_t flags_);
294
295 [[nodiscard]] bool isSRGB() const;
296
297 void setSRGB(bool srgb);
298
300
301 [[nodiscard]] static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap);
302
303 [[nodiscard]] ImageFormat getFormat() const;
304
305 void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
306
307 [[nodiscard]] uint8_t getMipCount() const;
308
309 bool setMipCount(uint8_t newMipCount);
310
312
313 void computeMips(ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
314
315 [[nodiscard]] uint16_t getFrameCount() const;
316
317 bool setFrameCount(uint16_t newFrameCount);
318
319 [[nodiscard]] uint8_t getFaceCount() const;
320
321 bool setFaceCount(bool isCubeMap);
322
323 [[nodiscard]] uint16_t getDepth(uint8_t mip = 0) const;
324
325 bool setDepth(uint16_t newDepth);
326
327 bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth = 1);
328
329 [[nodiscard]] uint16_t getStartFrame() const;
330
331 void setStartFrame(uint16_t newStartFrame);
332
333 [[nodiscard]] sourcepp::math::Vec3f getReflectivity() const;
334
335 void setReflectivity(sourcepp::math::Vec3f newReflectivity);
336
337 void computeReflectivity();
338
339 [[nodiscard]] float getBumpMapScale() const;
340
341 void setBumpMapScale(float newBumpMapScale);
342
343 [[nodiscard]] ImageFormat getThumbnailFormat() const;
344
345 [[nodiscard]] uint8_t getThumbnailWidth() const;
346
347 [[nodiscard]] uint8_t getThumbnailHeight() const;
348
349 [[nodiscard]] uint8_t getFallbackWidth() const;
350
351 [[nodiscard]] uint8_t getFallbackHeight() const;
352
353 [[nodiscard]] uint8_t getFallbackMipCount() const;
354
355 [[nodiscard]] const std::vector<Resource>& getResources() const;
356
357 [[nodiscard]] const Resource* getResource(Resource::Type type) const;
358
359 [[nodiscard]] std::vector<std::byte> getPaletteResourceFrame(uint16_t frame = 0) const;
360
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;
363
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;
366
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;
369
370 void setParticleSheetResource(const SHT& value);
371
373
374 void setCRCResource(uint32_t value);
375
376 void removeCRCResource();
377
378 void setLODResource(uint8_t u, uint8_t v, uint8_t u360 = 0, uint8_t v360 = 0);
379
380 void removeLODResource();
381
382 void setExtendedFlagsResource(uint32_t value);
383
385
386 void setKeyValuesDataResource(std::string_view value);
387
389
390 void setHotspotDataResource(const HOT& value);
391
393
394 [[nodiscard]] int16_t getCompressionLevel() const;
395
396 void setCompressionLevel(int16_t newCompressionLevel);
397
398 [[nodiscard]] CompressionMethod getCompressionMethod() const;
399
400 void setCompressionMethod(CompressionMethod newCompressionMethod);
401
402 [[nodiscard]] bool hasImageData() const;
403
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;
405
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;
407
408 [[nodiscard]] std::vector<std::byte> getImageDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
409
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);
411
412 bool setImage(const std::filesystem::path& imagePath, 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, ImageConversion::ResizeBounds resizeBounds = {});
413
414 [[nodiscard]] std::vector<std::byte> saveImageToFile(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
415
416 bool saveImageToFile(const std::filesystem::path& imagePath, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
417
418 [[nodiscard]] bool hasThumbnailData() const;
419
420 [[nodiscard]] std::span<const std::byte> getThumbnailDataRaw() const;
421
422 [[nodiscard]] std::vector<std::byte> getThumbnailDataAs(ImageFormat newFormat) const;
423
424 [[nodiscard]] std::vector<std::byte> getThumbnailDataAsRGBA8888() const;
425
426 void setThumbnail(std::span<const std::byte> imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
427
428 bool setThumbnail(const std::filesystem::path& imagePath, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY); // NOLINT(*-use-nodiscard)
429
431
432 void removeThumbnail();
433
434 [[nodiscard]] std::vector<std::byte> saveThumbnailToFile(ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
435
436 bool saveThumbnailToFile(const std::filesystem::path& imagePath, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
437
438 [[nodiscard]] bool hasFallbackData() const;
439
440 [[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
441
442 [[nodiscard]] std::vector<std::byte> getFallbackDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
443
444 [[nodiscard]] std::vector<std::byte> getFallbackDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
445
447
448 void removeFallback();
449
450 [[nodiscard]] std::vector<std::byte> saveFallbackToFile(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
451
452 bool saveFallbackToFile(const std::filesystem::path& imagePath, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
453
454 [[nodiscard]] uint8_t getConsoleMipScale() const;
455
456 void setConsoleMipScale(uint8_t consoleMipScale_);
457
458 [[nodiscard]] uint64_t estimateBakeSize() const;
459
460 [[nodiscard]] uint64_t estimateBakeSize(bool& isExact) const;
461
462 [[nodiscard]] std::vector<std::byte> bake() const;
463
464 bool bake(const std::filesystem::path& vtfPath) const; // NOLINT(*-use-nodiscard)
465
466protected:
467 static bool createInternal(VTF& writer, CreationOptions options);
468
469 [[nodiscard]] Resource* getResourceInternal(Resource::Type type);
470
471 void setResourceInternal(Resource::Type type, std::span<const std::byte> data_);
472
473 void removeResourceInternal(Resource::Type type);
474
475 void regenerateImageData(ImageFormat newFormat, uint16_t newWidth, uint16_t newHeight, uint8_t newMipCount, uint16_t newFrameCount, uint8_t newFaceCount, uint16_t newDepth, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
476
477 bool opened = false;
478
479 std::vector<std::byte> data;
480
481 uint32_t version = 4;
482
483 uint16_t width = 0;
484 uint16_t height = 0;
486
487 uint16_t frameCount = 1;
488 uint16_t startFrame = 0;
489
490 sourcepp::math::Vec3f reflectivity{0.2f, 0.2f, 0.2f};
491
492 float bumpMapScale = 0.f;
494 uint8_t mipCount = 1;
495
497 uint8_t thumbnailWidth = 0;
498 uint8_t thumbnailHeight = 0;
499
500 uint8_t fallbackWidth = 0;
501 uint8_t fallbackHeight = 0;
502 uint8_t fallbackMipCount = 0;
503
504 // Number of times to multiply the scale of each mip by 2 when rendering on console
505 uint8_t consoleMipScale = 0;
506
507 // 1 for v7.1 and lower
508 uint16_t depth = 1;
509
510 // Technically added in v7.3, but we use it to store image and thumbnail data in v7.2 and lower anyway
511 std::vector<Resource> resources;
512
513 // These aren't in the header
515 int16_t compressionLevel = 0;
519};
521
522} // namespace vtfpp
#define SOURCEPP_BITFLAGS_ENUM(Enum)
Defines bitwise operators for an enum or enum class.
Definition Macros.h:26
uint16_t width
Definition VTF.h:483
@ PLATFORM_PC
Definition VTF.h:190
@ PLATFORM_X360
Definition VTF.h:192
@ PLATFORM_PS3_PORTAL2
Definition VTF.h:194
@ PLATFORM_PS3_ORANGEBOX
Definition VTF.h:193
@ PLATFORM_UNKNOWN
Definition VTF.h:189
@ PLATFORM_XBOX
Definition VTF.h:191
void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1150
bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth=1)
Definition VTF.cpp:1425
void removeKeyValuesDataResource()
Definition VTF.cpp:1845
uint8_t getFallbackHeight() const
Definition VTF.cpp:1538
CompressionMethod compressionMethod
Definition VTF.h:516
void computeReflectivity()
Definition VTF.cpp:1449
uint8_t getThumbnailWidth() const
Definition VTF.cpp:1526
uint8_t consoleMipScale
Definition VTF.h:505
uint8_t fallbackWidth
Definition VTF.h:500
ImageFormat getFormat() const
Definition VTF.cpp:1264
void setPlatform(Platform newPlatform)
Definition VTF.cpp:1019
uint16_t getHeight(uint8_t mip=0) const
Definition VTF.cpp:1162
VTF & operator=(const VTF &other)
Definition VTF.cpp:832
uint8_t getFallbackWidth() const
Definition VTF.cpp:1534
int16_t compressionLevel
Definition VTF.h:515
sourcepp::math::Vec3f reflectivity
Definition VTF.h:490
uint16_t getWidth(uint8_t mip=0) const
Definition VTF.cpp:1154
uint16_t startFrame
Definition VTF.h:488
uint8_t mipCount
Definition VTF.h:494
bool setRecommendedMipCount()
Definition VTF.cpp:1308
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...
Definition VTF.cpp:1787
void computeMips(ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT)
Definition VTF.cpp:1315
void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_)
Definition VTF.cpp:1146
uint8_t thumbnailWidth
Definition VTF.h:497
VTF(VTF &&) noexcept=default
void setCompressionLevel(int16_t newCompressionLevel)
Definition VTF.cpp:1868
uint8_t fallbackHeight
Definition VTF.h:501
ImageConversion::ResizeMethod imageHeightResizeMethod
Definition VTF.h:518
void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
Definition VTF.cpp:1268
void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1141
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...
Definition VTF.cpp:1783
float getBumpMapScale() const
Definition VTF.cpp:1514
void setKeyValuesDataResource(std::string_view value)
Definition VTF.cpp:1835
void computeTransparencyFlags()
Definition VTF.cpp:1237
std::vector< std::byte > data
Definition VTF.h:479
ImageFormat format
Definition VTF.h:493
Platform getPlatform() const
Definition VTF.cpp:1015
std::vector< std::byte > getPaletteResourceFrame(uint16_t frame=0) const
Definition VTF.cpp:1734
void addFlags(uint32_t flags_)
Definition VTF.cpp:1209
uint8_t getFaceCount() const
Definition VTF.cpp:1379
ImageFormat thumbnailFormat
Definition VTF.h:496
void setFlags(uint32_t flags_)
Definition VTF.cpp:1205
void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter)
Definition VTF.cpp:1170
void removeLODResource()
Definition VTF.cpp:1823
ImageConversion::ResizeMethod getImageHeightResizeMethod() const
Definition VTF.cpp:1137
void setBumpMapScale(float newBumpMapScale)
Definition VTF.cpp:1518
ImageFormat getThumbnailFormat() const
Definition VTF.cpp:1522
uint16_t getStartFrame() const
Definition VTF.cpp:1433
static constexpr auto FORMAT_DEFAULT
This value is only valid when passed to VTF::create through CreationOptions or VTF::setFormat.
Definition VTF.h:227
void setReflectivity(sourcepp::math::Vec3f newReflectivity)
Definition VTF.cpp:1445
void setSRGB(bool srgb)
Definition VTF.cpp:1221
const std::vector< Resource > & getResources() const
Definition VTF.cpp:1546
void removeHotspotDataResource()
Definition VTF.cpp:1860
void setVersion(uint32_t newVersion)
Definition VTF.cpp:1102
bool hasImageData() const
Definition VTF.cpp:1886
ImageConversion::ResizeMethod imageWidthResizeMethod
Definition VTF.h:517
uint8_t fallbackMipCount
Definition VTF.h:502
void removeParticleSheetResource()
Definition VTF.cpp:1802
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)
Definition VTF.cpp:930
std::vector< std::byte > getImageDataAsRGBA8888(uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
Definition VTF.cpp:1914
uint16_t getFrameCount() const
Definition VTF.cpp:1367
uint8_t getMipCount() const
Definition VTF.cpp:1292
void setLODResource(uint8_t u, uint8_t v, uint8_t u360=0, uint8_t v360=0)
Definition VTF.cpp:1814
bool setFrameCount(uint16_t newFrameCount)
Definition VTF.cpp:1371
ImageConversion::ResizeMethod getImageWidthResizeMethod() const
Definition VTF.cpp:1133
std::vector< std::byte > getImageDataAs(ImageFormat newFormat, uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
Definition VTF.cpp:1899
static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap)
Definition VTF.cpp:1251
void setStartFrame(uint16_t newStartFrame)
Definition VTF.cpp:1437
std::span< const std::byte > getImageDataRaw(uint8_t mip=0, uint16_t frame=0, uint8_t face=0, uint16_t slice=0) const
Definition VTF.cpp:1890
uint16_t depth
Definition VTF.h:508
sourcepp::math::Vec3f getReflectivity() const
Definition VTF.cpp:1441
uint8_t getFallbackMipCount() const
Definition VTF.cpp:1542
uint16_t getDepth(uint8_t mip=0) const
Definition VTF.cpp:1413
bool isSRGB() const
Definition VTF.cpp:1217
uint32_t flags
Definition VTF.h:485
uint16_t getPaddedHeight(uint8_t mip=0) const
Definition VTF.cpp:1166
static constexpr auto FORMAT_UNCHANGED
This value is only valid when passed to VTF::create through CreationOptions.
Definition VTF.h:224
uint32_t version
Definition VTF.h:481
bool setMipCount(uint8_t newMipCount)
Definition VTF.cpp:1296
void setExtendedFlagsResource(uint32_t value)
Definition VTF.cpp:1827
CompressionMethod getCompressionMethod() const
Definition VTF.cpp:1872
uint16_t getPaddedWidth(uint8_t mip=0) const
Definition VTF.cpp:1158
void setCRCResource(uint32_t value)
Definition VTF.cpp:1806
void setCompressionMethod(CompressionMethod newCompressionMethod)
Definition VTF.cpp:1876
bool setFaceCount(bool isCubeMap)
Definition VTF.cpp:1405
uint8_t getThumbnailHeight() const
Definition VTF.cpp:1530
const Resource * getResource(Resource::Type type) const
Definition VTF.cpp:1550
uint32_t getFlags() const
Definition VTF.cpp:1201
void setParticleSheetResource(const SHT &value)
Definition VTF.cpp:1791
@ FLAG_MASK_XBOX_VTEX
Definition VTF.h:151
@ FLAG_MASK_V5
Definition VTF.h:173
@ FLAG_V1_RENDERTARGET
Definition VTF.h:130
@ FLAG_V1_VTEX_PREMULTIPLY_COLOR_BY_ONE_OVER_MIP_LEVEL
Definition VTF.h:135
@ FLAG_MASK_V6
Definition VTF.h:183
@ FLAG_V1_DEPTH_RENDERTARGET
Definition VTF.h:131
@ FLAG_MASK_V2_VTEX
Definition VTF.h:145
@ FLAG_V5_DEFAULT_POOL
Definition VTF.h:171
@ FLAG_V0_ONE_BIT_ALPHA
Definition VTF.h:124
@ FLAG_MASK_V4_TF2
Definition VTF.h:167
@ FLAG_V4_TF2_IGNORE_PICMIP
Definition VTF.h:164
@ FLAG_V5_CSGO_COMBINED
Definition VTF.h:175
@ FLAG_V6_IGNORE_PICMIP
Definition VTF.h:182
@ FLAG_V2_NO_DEPTH_BUFFER
Definition VTF.h:141
@ FLAG_V0_MULTI_BIT_ALPHA
Definition VTF.h:125
@ FLAG_V5_CSGO_YCOCG
Definition VTF.h:178
@ FLAG_MASK_V2
Definition VTF.h:144
@ FLAG_V2_VTEX_NICE_FILTERED
Definition VTF.h:142
@ FLAG_V5_CSGO_SKIP_INITIAL_DOWNLOAD
Definition VTF.h:177
@ FLAG_MASK_V5_CSGO
Definition VTF.h:180
@ FLAG_V0_VTEX_NO_COMPRESS
Definition VTF.h:118
@ FLAG_V2_CLAMP_U
Definition VTF.h:143
@ FLAG_V0_NO_LOD
Definition VTF.h:121
@ FLAG_V0_VTEX_HINT_DXT5
Definition VTF.h:117
@ FLAG_V3_VERTEX_TEXTURE
Definition VTF.h:154
@ FLAG_V4_SRGB
Definition VTF.h:159
@ FLAG_V0_NORMAL
Definition VTF.h:119
@ FLAG_V0_NO_MIP
Definition VTF.h:120
@ FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA
Definition VTF.h:134
@ FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION
Definition VTF.h:140
@ FLAG_V5_SRGB
Definition VTF.h:170
@ FLAG_MASK_XBOX
Definition VTF.h:150
@ FLAG_V0_CLAMP_T
Definition VTF.h:115
@ FLAG_V3_LOAD_ALL_MIPS
Definition VTF.h:153
@ FLAG_XBOX_VTEX_PRESWIZZLED
Definition VTF.h:147
@ FLAG_V0_PROCEDURAL
Definition VTF.h:123
@ FLAG_V4_TF2_STREAMABLE_FINE
Definition VTF.h:166
@ FLAG_V5_CSGO_ASYNC_SKIP_INITIAL_LOW_RES
Definition VTF.h:179
@ FLAG_V5_CSGO_ASYNC_DOWNLOAD
Definition VTF.h:176
@ FLAG_V0_POINT_SAMPLE
Definition VTF.h:112
@ FLAG_V1_SINGLE_COPY
Definition VTF.h:133
@ FLAG_MASK_V0_VTEX
Definition VTF.h:128
@ FLAG_V3_BORDER
Definition VTF.h:156
@ FLAG_V5_LOAD_MOST_MIPS
Definition VTF.h:172
@ FLAG_V0_TRILINEAR
Definition VTF.h:113
@ FLAG_V5_PWL_CORRECTED
Definition VTF.h:169
@ FLAG_V0_ANISOTROPIC
Definition VTF.h:116
@ FLAG_MASK_V4
Definition VTF.h:160
@ FLAG_XBOX_CACHEABLE
Definition VTF.h:148
@ FLAG_MASK_V3
Definition VTF.h:157
@ FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV
Definition VTF.h:136
@ FLAG_V0_ENVMAP
Definition VTF.h:126
@ FLAG_V0_CLAMP_S
Definition VTF.h:114
@ FLAG_MASK_V1
Definition VTF.h:137
@ FLAG_V0_LOAD_SMALL_MIPS
Definition VTF.h:122
@ FLAG_MASK_INTERNAL
Definition VTF.h:185
@ FLAG_V3_SSBUMP
Definition VTF.h:155
@ FLAG_V4_TF2_IMMEDIATE_CLEANUP
Definition VTF.h:163
@ FLAG_V4_TF2_STREAMABLE_COARSE
Definition VTF.h:165
@ FLAG_XBOX_UNFILTERABLE_OK
Definition VTF.h:149
@ FLAG_V4_TF2_STAGING_MEMORY
Definition VTF.h:162
@ FLAG_MASK_V0
Definition VTF.h:127
@ FLAG_V1_NO_DEBUG_OVERRIDE
Definition VTF.h:132
@ FLAG_MASK_V1_VTEX
Definition VTF.h:138
uint16_t height
Definition VTF.h:484
void removeCRCResource()
Definition VTF.cpp:1810
uint16_t frameCount
Definition VTF.h:487
uint32_t getVersion() const
Definition VTF.cpp:1098
int16_t getCompressionLevel() const
Definition VTF.cpp:1864
void setHotspotDataResource(const HOT &value)
Definition VTF.cpp:1849
void removeFlags(uint32_t flags_)
Definition VTF.cpp:1213
bool setDepth(uint16_t newDepth)
Definition VTF.cpp:1417
std::vector< Resource > resources
Definition VTF.h:511
uint8_t thumbnailHeight
Definition VTF.h:498
Platform platform
Definition VTF.h:514
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)
Definition VTF.cpp:1918
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...
Definition VTF.cpp:1741
void removeExtendedFlagsResource()
Definition VTF.cpp:1831
bool opened
Definition VTF.h:477
float bumpMapScale
Definition VTF.h:492
consteval uint32_t makeFourCC(const char fourCC[4])
Creates a FourCC identifier from a string of 4 characters.
Definition Binary.h:20
constexpr float DEFAULT_COMPRESSED_QUALITY
Definition HOT.h:11
constexpr uint32_t VTF_SIGNATURE
Definition VTF.h:23
constexpr uint32_t XTF_SIGNATURE
Definition VTF.h:24
constexpr uint32_t VTFX_SIGNATURE
Definition VTF.h:25
constexpr uint32_t VTF3_SIGNATURE
Definition VTF.h:26
CompressionMethod
Definition VTF.h:28
HOT getDataAsHotspotData() const
Definition VTF.cpp:362
std::tuple< uint8_t, uint8_t, uint8_t, uint8_t > getDataAsLODControlInfo() const
Definition VTF.cpp:354
Type type
Definition VTF.h:58
ConvertedData convertData() const
Definition VTF.cpp:296
std::string getDataAsKeyValuesData() const
Definition VTF.cpp:358
int16_t getDataAsAuxCompressionLevel() const
Definition VTF.cpp:366
CompressionMethod getDataAsAuxCompressionMethod() const
Definition VTF.cpp:373
SHT getDataAsParticleSheet() const
Definition VTF.cpp:342
std::variant< std::monostate, SHT, uint32_t, std::tuple< uint8_t, uint8_t, uint8_t, uint8_t >, std::string, HOT > ConvertedData
Definition VTF.h:62
@ FLAG_LOCAL_DATA
Definition VTF.h:55
uint32_t getDataAsExtendedFlags() const
Definition VTF.cpp:350
uint32_t getDataAsCRC() const
Definition VTF.cpp:346
uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const
Definition VTF.cpp:384
@ TYPE_KEYVALUES_DATA
Definition VTF.h:50
@ TYPE_FALLBACK_DATA
Definition VTF.h:42
@ TYPE_PALETTE_DATA
Definition VTF.h:41
@ TYPE_PARTICLE_SHEET_DATA
Definition VTF.h:43
@ TYPE_EXTENDED_FLAGS
Definition VTF.h:46
@ TYPE_UNKNOWN
Definition VTF.h:39
@ TYPE_IMAGE_DATA
Definition VTF.h:45
@ TYPE_AUX_COMPRESSION
Definition VTF.h:48
@ TYPE_LOD_CONTROL_INFO
Definition VTF.h:49
@ TYPE_THUMBNAIL_DATA
Definition VTF.h:40
@ TYPE_HOTSPOT_DATA
Definition VTF.h:44
Flags flags
Definition VTF.h:59
std::vector< std::byte > getDataAsPalette(uint16_t frame) const
Definition VTF.cpp:334
std::span< std::byte > data
Definition VTF.h:60
uint16_t initialFrameCount
Definition VTF.h:206
ImageConversion::ResizeBounds resizeBounds
Definition VTF.h:205
ImageConversion::ResizeFilter filter
Definition VTF.h:203
ImageConversion::ResizeMethod heightResizeMethod
Definition VTF.h:202
CompressionMethod compressionMethod
Definition VTF.h:216
ImageConversion::ResizeMethod widthResizeMethod
Definition VTF.h:201
ImageFormat outputFormat
Definition VTF.h:199