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 {
54
55 enum Flags : uint8_t {
58 };
59
62 std::span<std::byte> data;
63
64 using ConvertedData = std::variant<
65 std::monostate, // Anything that would be equivalent to just returning data directly, or used as an error
66 SHT, // Particle Sheet
67 uint32_t, // CRC, TS0, SPP
68 std::tuple<uint8_t, uint8_t, uint8_t, uint8_t>, // LOD
69 std::string, // KVD
70 HOT // Hotspot data
71 >;
72 [[nodiscard]] ConvertedData convertData() const;
73
74 [[nodiscard]] std::vector<std::byte> getDataAsPalette(uint16_t frame) const;
75
76 [[nodiscard]] SHT getDataAsParticleSheet() const;
77
78 [[nodiscard]] uint32_t getDataAsCRC() const;
79
80 [[nodiscard]] uint32_t getDataAsFlags() const;
81
82 [[nodiscard]] std::tuple<uint8_t, uint8_t, uint8_t, uint8_t> getDataAsLODControlInfo() const;
83
84 [[nodiscard]] std::string getDataAsKeyValuesData() const;
85
86 [[nodiscard]] std::string getDataAsAuthorInfo() const;
87
88 [[nodiscard]] HOT getDataAsHotspotData() const;
89
90 [[nodiscard]] int16_t getDataAsAuxCompressionLevel() const;
91
93
94 [[nodiscard]] uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const;
95};
97
98/*
99 * === EASY DIFFICULTY WRITER API ===
100 *
101 * Use a static helper function to create a VTF in one function call - VTF::create
102 *
103 * === MEDIUM DIFFICULTY WRITER API ===
104 *
105 * Constructing a VTF instance from existing VTF data will let you modify that data.
106 *
107 * When constructing a VTF instance from scratch, this class has methods that should be
108 * called in a particular order. If they aren't your output VTF will look incorrect or
109 * have heavy artifacting. Some of these steps are optional, but the steps actually taken
110 * should be done in this order. Reference VTF::create and VTF::createInternal to see the
111 * intended "order of operations".
112 */
113class VTF {
114public:
115 enum Flags : uint32_t {
121 FLAG_V0_VTEX_HINT_DXT5 = 1u << 5, // Internal to vtex
122 FLAG_V0_VTEX_NO_COMPRESS = 1u << 6, // Internal to vtex
123 FLAG_V0_NORMAL = 1u << 7,
124 FLAG_V0_NO_MIP = 1u << 8, // Controlled by mip count
125 FLAG_V0_NO_LOD = 1u << 9,
130 FLAG_V0_ENVMAP = 1u << 14, // Controlled by face count
133
138 FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA = 1u << 19, // Internal to vtex
140 FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV = 1u << 21, // Internal to vtex
143
144 FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION = 1u << 22, // Internal to vtex
146 FLAG_V2_VTEX_NICE_FILTERED = 1u << 24, // Internal to vtex
147 FLAG_V2_CLAMP_U = 1u << 25,
150
156
159 FLAG_V3_SSBUMP = 1u << 27,
160 FLAG_V3_BORDER = 1u << 29,
162
163 FLAG_V4_SRGB = 1u << 6,
165
172
174 FLAG_V5_SRGB = 1u << 19,
178
185
188
190 };
191
196
205
232
234 static constexpr auto FORMAT_UNCHANGED = static_cast<ImageFormat>(-2);
235
237 static constexpr auto FORMAT_DEFAULT = static_cast<ImageFormat>(-1);
238
239 VTF();
240
241 explicit VTF(std::vector<std::byte>&& vtfData, bool parseHeaderOnly = false, bool hdr = false);
242
243 explicit VTF(std::span<const std::byte> vtfData, bool parseHeaderOnly = false, bool hdr = false);
244
245 explicit VTF(const std::filesystem::path& vtfPath, bool parseHeaderOnly = false);
246
247 VTF(const VTF& other);
248
249 VTF& operator=(const VTF& other);
250
251 VTF(VTF&&) noexcept = default;
252
253 VTF& operator=(VTF&&) noexcept = default;
254
255 [[nodiscard]] explicit operator bool() const;
256
257 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);
258
259 static bool create(ImageFormat format, uint16_t width, uint16_t height, const std::filesystem::path& vtfPath, const CreationOptions& options);
260
261 [[nodiscard]] static VTF create(std::span<const std::byte> imageData, ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
262
263 [[nodiscard]] static VTF create(ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
264
265 static bool create(const std::filesystem::path& imagePath, const std::filesystem::path& vtfPath, const CreationOptions& options);
266
267 [[nodiscard]] static VTF create(const std::filesystem::path& imagePath, const CreationOptions& options);
268
269 [[nodiscard]] Platform getPlatform() const;
270
271 void setPlatform(Platform newPlatform);
272
273 [[nodiscard]] uint32_t getVersion() const;
274
275 void setVersion(uint32_t newVersion);
276
277 [[nodiscard]] ImageConversion::ResizeMethod getImageWidthResizeMethod() const;
278
279 [[nodiscard]] ImageConversion::ResizeMethod getImageHeightResizeMethod() const;
280
281 void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_);
282
283 void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_);
284
285 void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_);
286
287 [[nodiscard]] uint16_t getWidth(uint8_t mip = 0) const;
288
289 [[nodiscard]] uint16_t getPaddedWidth(uint8_t mip = 0) const;
290
291 [[nodiscard]] uint16_t getHeight(uint8_t mip = 0) const;
292
293 [[nodiscard]] uint16_t getPaddedHeight(uint8_t mip = 0) const;
294
295 void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter);
296
297 [[nodiscard]] uint32_t getFlags() const;
298
299 void setFlags(uint32_t flags_);
300
301 void addFlags(uint32_t flags_);
302
303 void removeFlags(uint32_t flags_);
304
305 [[nodiscard]] uint32_t getFlagsExtra() const;
306
307 void setFlagsExtra(uint32_t flags_);
308
309 void addFlagsExtra(uint32_t flags_);
310
311 void removeFlagsExtra(uint32_t flags_);
312
313 [[nodiscard]] bool isSRGB() const;
314
315 void setSRGB(bool srgb);
316
318
319 [[nodiscard]] static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap);
320
321 [[nodiscard]] ImageFormat getFormat() const;
322
323 void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
324
325 [[nodiscard]] uint8_t getMipCount() const;
326
327 bool setMipCount(uint8_t newMipCount);
328
330
331 void computeMips(ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
332
333 [[nodiscard]] uint16_t getFrameCount() const;
334
335 bool setFrameCount(uint16_t newFrameCount);
336
337 [[nodiscard]] uint8_t getFaceCount() const;
338
339 bool setFaceCount(bool isCubeMap);
340
341 [[nodiscard]] uint16_t getDepth(uint8_t mip = 0) const;
342
343 bool setDepth(uint16_t newDepth);
344
345 bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth = 1);
346
347 [[nodiscard]] uint16_t getStartFrame() const;
348
349 void setStartFrame(uint16_t newStartFrame);
350
351 [[nodiscard]] sourcepp::math::Vec3f getReflectivity() const;
352
353 void setReflectivity(sourcepp::math::Vec3f newReflectivity);
354
355 void computeReflectivity();
356
357 [[nodiscard]] float getBumpMapScale() const;
358
359 void setBumpMapScale(float newBumpMapScale);
360
361 [[nodiscard]] ImageFormat getThumbnailFormat() const;
362
363 [[nodiscard]] uint8_t getThumbnailWidth() const;
364
365 [[nodiscard]] uint8_t getThumbnailHeight() const;
366
367 [[nodiscard]] uint8_t getFallbackWidth(uint8_t mip = 0) const;
368
369 [[nodiscard]] uint8_t getPaddedFallbackWidth(uint8_t mip = 0) const;
370
371 [[nodiscard]] uint8_t getFallbackHeight(uint8_t mip = 0) const;
372
373 [[nodiscard]] uint8_t getPaddedFallbackHeight(uint8_t mip = 0) const;
374
375 [[nodiscard]] uint8_t getFallbackMipCount() const;
376
377 [[nodiscard]] bool hasNativeResourceSupport() const;
378
379 [[nodiscard]] const std::vector<Resource>& getResources() const;
380
381 [[nodiscard]] const Resource* getResource(Resource::Type type) const;
382
383 [[nodiscard]] std::vector<std::byte> getPaletteResourceFrame(uint16_t frame = 0) const;
384
386 [[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;
387
389 [[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;
390
392 [[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;
393
394 void setParticleSheetResource(const SHT& value);
395
397
398 void setCRCResource(uint32_t value);
399
400 void removeCRCResource();
401
402 void setLODResource(uint8_t u, uint8_t v, uint8_t u360 = 0, uint8_t v360 = 0);
403
404 void removeLODResource();
405
406 void setExtendedFlagsResource(uint32_t value);
407
409
410 void setKeyValuesDataResource(std::string_view value);
411
413
414 void setAuthorInfoResource(std::string_view value);
415
417
418 void setHotspotDataResource(const HOT& value);
419
421
422 [[nodiscard]] uint16_t getCompressionLevel() const;
423
424 void setCompressionLevel(int16_t newCompressionLevel);
425
426 [[nodiscard]] CompressionMethod getCompressionMethod() const;
427
428 void setCompressionMethod(CompressionMethod newCompressionMethod);
429
430 [[nodiscard]] bool hasImageData() const;
431
432 [[nodiscard]] std::span<const std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
433
434 [[nodiscard]] std::span<std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0);
435
436 [[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;
437
438 [[nodiscard]] std::vector<std::byte> getImageDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
439
440 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);
441
442 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 = {});
443
444 [[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;
445
446 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)
447
448 [[nodiscard]] bool hasThumbnailData() const;
449
450 [[nodiscard]] std::span<const std::byte> getThumbnailDataRaw() const;
451
452 [[nodiscard]] std::span<std::byte> getThumbnailDataRaw();
453
454 [[nodiscard]] std::vector<std::byte> getThumbnailDataAs(ImageFormat newFormat) const;
455
456 [[nodiscard]] std::vector<std::byte> getThumbnailDataAsRGBA8888() const;
457
458 void setThumbnail(std::span<const std::byte> imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
459
460 bool setThumbnail(const std::filesystem::path& imagePath, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY); // NOLINT(*-use-nodiscard)
461
463
464 void removeThumbnail();
465
466 [[nodiscard]] std::vector<std::byte> saveThumbnailToFile(ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
467
468 bool saveThumbnailToFile(const std::filesystem::path& imagePath, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
469
470 [[nodiscard]] bool hasFallbackData() const;
471
472 [[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
473
474 [[nodiscard]] std::span<std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0);
475
476 [[nodiscard]] std::vector<std::byte> getFallbackDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
477
478 [[nodiscard]] std::vector<std::byte> getFallbackDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
479
481
482 void removeFallback();
483
484 [[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;
485
486 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)
487
488 [[nodiscard]] uint8_t getConsoleMipScale() const;
489
490 void setConsoleMipScale(uint8_t consoleMipScale_);
491
492 [[nodiscard]] uint64_t estimateBakeSize() const;
493
494 [[nodiscard]] uint64_t estimateBakeSize(bool& isExact) const;
495
496 [[nodiscard]] std::vector<std::byte> bake() const;
497
498 bool bake(const std::filesystem::path& vtfPath) const; // NOLINT(*-use-nodiscard)
499
500protected:
501 static bool createInternal(VTF& writer, CreationOptions options);
502
503 [[nodiscard]] Resource* getResourceInternal(Resource::Type type);
504
505 void setResourceInternal(Resource::Type type, std::span<const std::byte> data_);
506
507 void removeResourceInternal(Resource::Type type);
508
509 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);
510
511 bool opened = false;
512
513 std::vector<std::byte> data;
514
515 uint32_t version = 4;
516
517 uint16_t width = 0;
518 uint16_t height = 0;
520 uint32_t flagsExtra = 0;
521
522 uint16_t frameCount = 1;
523 uint16_t startFrame = 0;
524
525 sourcepp::math::Vec3f reflectivity{0.2f, 0.2f, 0.2f};
526
527 float bumpMapScale = 0.f;
529 uint8_t mipCount = 1;
530
532 uint8_t thumbnailWidth = 0;
533 uint8_t thumbnailHeight = 0;
534
535 uint8_t fallbackWidth = 0;
536 uint8_t fallbackHeight = 0;
537 uint8_t fallbackMipCount = 0;
538
539 // Number of times to multiply the scale of each mip by 2 when rendering on console
540 uint8_t consoleMipScale = 0;
541
542 // 1 for v7.1 and lower
543 uint16_t depth = 1;
544
545 // Technically added in v7.3, but we use it to store image and thumbnail data in v7.2 and lower anyway
546 std::vector<Resource> resources;
547
548 // These aren't in the header
550 uint16_t compressionLevel = 0;
554};
556
557} // namespace vtfpp
#define SOURCEPP_BITFLAGS_ENUM(Enum)
Defines bitwise operators for an enum or enum class.
Definition Macros.h:29
uint16_t width
Definition VTF.h:517
@ PLATFORM_PC
Definition VTF.h:199
@ PLATFORM_X360
Definition VTF.h:201
@ PLATFORM_PS3_PORTAL2
Definition VTF.h:203
@ PLATFORM_PS3_ORANGEBOX
Definition VTF.h:202
@ PLATFORM_UNKNOWN
Definition VTF.h:198
@ PLATFORM_XBOX
Definition VTF.h:200
void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1190
bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth=1)
Definition VTF.cpp:1481
void removeKeyValuesDataResource()
Definition VTF.cpp:1916
CompressionMethod compressionMethod
Definition VTF.h:551
void computeReflectivity()
Definition VTF.cpp:1505
uint8_t getThumbnailWidth() const
Definition VTF.cpp:1582
uint8_t consoleMipScale
Definition VTF.h:540
uint8_t fallbackWidth
Definition VTF.h:535
bool hasNativeResourceSupport() const
Definition VTF.cpp:1610
ImageFormat getFormat() const
Definition VTF.cpp:1320
void setPlatform(Platform newPlatform)
Definition VTF.cpp:1059
uint16_t getHeight(uint8_t mip=0) const
Definition VTF.cpp:1202
uint32_t flagsExtra
Definition VTF.h:520
VTF & operator=(const VTF &other)
Definition VTF.cpp:867
void removeFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1269
uint8_t getPaddedFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1602
uint16_t getCompressionLevel() const
Definition VTF.cpp:1949
sourcepp::math::Vec3f reflectivity
Definition VTF.h:525
uint16_t getWidth(uint8_t mip=0) const
Definition VTF.cpp:1194
uint16_t startFrame
Definition VTF.h:523
uint8_t mipCount
Definition VTF.h:529
bool setRecommendedMipCount()
Definition VTF.cpp:1364
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:1858
void computeMips(ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT)
Definition VTF.cpp:1371
void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_)
Definition VTF.cpp:1186
uint8_t thumbnailWidth
Definition VTF.h:532
VTF(VTF &&) noexcept=default
void setCompressionLevel(int16_t newCompressionLevel)
Definition VTF.cpp:1953
uint8_t fallbackHeight
Definition VTF.h:536
ImageConversion::ResizeMethod imageHeightResizeMethod
Definition VTF.h:553
void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
Definition VTF.cpp:1324
void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1181
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:1854
void addFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1265
float getBumpMapScale() const
Definition VTF.cpp:1570
void setKeyValuesDataResource(std::string_view value)
Definition VTF.cpp:1906
void computeTransparencyFlags()
Definition VTF.cpp:1293
std::vector< std::byte > data
Definition VTF.h:513
ImageFormat format
Definition VTF.h:528
Platform getPlatform() const
Definition VTF.cpp:1055
std::vector< std::byte > getPaletteResourceFrame(uint16_t frame=0) const
Definition VTF.cpp:1805
void addFlags(uint32_t flags_)
Definition VTF.cpp:1249
uint8_t getFaceCount() const
Definition VTF.cpp:1435
ImageFormat thumbnailFormat
Definition VTF.h:531
void setFlags(uint32_t flags_)
Definition VTF.cpp:1245
void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter)
Definition VTF.cpp:1210
void removeLODResource()
Definition VTF.cpp:1894
ImageConversion::ResizeMethod getImageHeightResizeMethod() const
Definition VTF.cpp:1177
void setBumpMapScale(float newBumpMapScale)
Definition VTF.cpp:1574
ImageFormat getThumbnailFormat() const
Definition VTF.cpp:1578
uint16_t getStartFrame() const
Definition VTF.cpp:1489
static constexpr auto FORMAT_DEFAULT
This value is only valid when passed to VTF::create through CreationOptions or VTF::setFormat.
Definition VTF.h:237
void setReflectivity(sourcepp::math::Vec3f newReflectivity)
Definition VTF.cpp:1501
void setSRGB(bool srgb)
Definition VTF.cpp:1277
const std::vector< Resource > & getResources() const
Definition VTF.cpp:1614
void removeHotspotDataResource()
Definition VTF.cpp:1945
void setVersion(uint32_t newVersion)
Definition VTF.cpp:1142
bool hasImageData() const
Definition VTF.cpp:1975
ImageConversion::ResizeMethod imageWidthResizeMethod
Definition VTF.h:552
uint16_t compressionLevel
Definition VTF.h:550
uint8_t fallbackMipCount
Definition VTF.h:537
void removeParticleSheetResource()
Definition VTF.cpp:1873
uint8_t getFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1590
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:968
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:2012
uint16_t getFrameCount() const
Definition VTF.cpp:1423
uint8_t getMipCount() const
Definition VTF.cpp:1348
void setLODResource(uint8_t u, uint8_t v, uint8_t u360=0, uint8_t v360=0)
Definition VTF.cpp:1885
bool setFrameCount(uint16_t newFrameCount)
Definition VTF.cpp:1427
void removeAuthorInfoResource()
Definition VTF.cpp:1930
ImageConversion::ResizeMethod getImageWidthResizeMethod() const
Definition VTF.cpp:1173
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:1997
static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap)
Definition VTF.cpp:1307
void setStartFrame(uint16_t newStartFrame)
Definition VTF.cpp:1493
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:1979
uint16_t depth
Definition VTF.h:543
sourcepp::math::Vec3f getReflectivity() const
Definition VTF.cpp:1497
uint8_t getFallbackMipCount() const
Definition VTF.cpp:1606
void setFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1261
uint16_t getDepth(uint8_t mip=0) const
Definition VTF.cpp:1469
bool isSRGB() const
Definition VTF.cpp:1273
uint32_t flags
Definition VTF.h:519
uint16_t getPaddedHeight(uint8_t mip=0) const
Definition VTF.cpp:1206
static constexpr auto FORMAT_UNCHANGED
This value is only valid when passed to VTF::create through CreationOptions.
Definition VTF.h:234
uint32_t version
Definition VTF.h:515
bool setMipCount(uint8_t newMipCount)
Definition VTF.cpp:1352
void setExtendedFlagsResource(uint32_t value)
Definition VTF.cpp:1898
CompressionMethod getCompressionMethod() const
Definition VTF.cpp:1961
uint16_t getPaddedWidth(uint8_t mip=0) const
Definition VTF.cpp:1198
void setAuthorInfoResource(std::string_view value)
Definition VTF.cpp:1920
void setCRCResource(uint32_t value)
Definition VTF.cpp:1877
void setCompressionMethod(CompressionMethod newCompressionMethod)
Definition VTF.cpp:1965
bool setFaceCount(bool isCubeMap)
Definition VTF.cpp:1461
uint8_t getThumbnailHeight() const
Definition VTF.cpp:1586
const Resource * getResource(Resource::Type type) const
Definition VTF.cpp:1618
uint32_t getFlags() const
Definition VTF.cpp:1241
void setParticleSheetResource(const SHT &value)
Definition VTF.cpp:1862
@ FLAG_MASK_XBOX_VTEX
Definition VTF.h:155
@ FLAG_MASK_V5
Definition VTF.h:177
@ FLAG_V1_RENDERTARGET
Definition VTF.h:134
@ FLAG_V1_VTEX_PREMULTIPLY_COLOR_BY_ONE_OVER_MIP_LEVEL
Definition VTF.h:139
@ FLAG_MASK_V6
Definition VTF.h:187
@ FLAG_V1_DEPTH_RENDERTARGET
Definition VTF.h:135
@ FLAG_MASK_V2_VTEX
Definition VTF.h:149
@ FLAG_V5_DEFAULT_POOL
Definition VTF.h:175
@ FLAG_V0_ONE_BIT_ALPHA
Definition VTF.h:128
@ FLAG_MASK_V4_TF2
Definition VTF.h:171
@ FLAG_V4_TF2_IGNORE_PICMIP
Definition VTF.h:168
@ FLAG_V5_CSGO_COMBINED
Definition VTF.h:179
@ FLAG_V6_IGNORE_PICMIP
Definition VTF.h:186
@ FLAG_V2_NO_DEPTH_BUFFER
Definition VTF.h:145
@ FLAG_V0_MULTI_BIT_ALPHA
Definition VTF.h:129
@ FLAG_V5_CSGO_YCOCG
Definition VTF.h:182
@ FLAG_MASK_V2
Definition VTF.h:148
@ FLAG_V2_VTEX_NICE_FILTERED
Definition VTF.h:146
@ FLAG_V5_CSGO_SKIP_INITIAL_DOWNLOAD
Definition VTF.h:181
@ FLAG_MASK_V5_CSGO
Definition VTF.h:184
@ FLAG_V0_VTEX_NO_COMPRESS
Definition VTF.h:122
@ FLAG_V2_CLAMP_U
Definition VTF.h:147
@ FLAG_V0_NO_LOD
Definition VTF.h:125
@ FLAG_V0_VTEX_HINT_DXT5
Definition VTF.h:121
@ FLAG_V3_VERTEX_TEXTURE
Definition VTF.h:158
@ FLAG_V4_SRGB
Definition VTF.h:163
@ FLAG_V0_NORMAL
Definition VTF.h:123
@ FLAG_V0_NO_MIP
Definition VTF.h:124
@ FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA
Definition VTF.h:138
@ FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION
Definition VTF.h:144
@ FLAG_V5_SRGB
Definition VTF.h:174
@ FLAG_MASK_XBOX
Definition VTF.h:154
@ FLAG_V0_CLAMP_T
Definition VTF.h:119
@ FLAG_V3_LOAD_ALL_MIPS
Definition VTF.h:157
@ FLAG_XBOX_VTEX_PRESWIZZLED
Definition VTF.h:151
@ FLAG_V0_PROCEDURAL
Definition VTF.h:127
@ FLAG_V4_TF2_STREAMABLE_FINE
Definition VTF.h:170
@ FLAG_V5_CSGO_ASYNC_SKIP_INITIAL_LOW_RES
Definition VTF.h:183
@ FLAG_V5_CSGO_ASYNC_DOWNLOAD
Definition VTF.h:180
@ FLAG_V0_POINT_SAMPLE
Definition VTF.h:116
@ FLAG_V1_SINGLE_COPY
Definition VTF.h:137
@ FLAG_MASK_V0_VTEX
Definition VTF.h:132
@ FLAG_V3_BORDER
Definition VTF.h:160
@ FLAG_V5_LOAD_MOST_MIPS
Definition VTF.h:176
@ FLAG_V0_TRILINEAR
Definition VTF.h:117
@ FLAG_V5_PWL_CORRECTED
Definition VTF.h:173
@ FLAG_V0_ANISOTROPIC
Definition VTF.h:120
@ FLAG_MASK_V4
Definition VTF.h:164
@ FLAG_XBOX_CACHEABLE
Definition VTF.h:152
@ FLAG_MASK_V3
Definition VTF.h:161
@ FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV
Definition VTF.h:140
@ FLAG_V0_ENVMAP
Definition VTF.h:130
@ FLAG_V0_CLAMP_S
Definition VTF.h:118
@ FLAG_MASK_V1
Definition VTF.h:141
@ FLAG_V0_LOAD_SMALL_MIPS
Definition VTF.h:126
@ FLAG_MASK_INTERNAL
Definition VTF.h:189
@ FLAG_V3_SSBUMP
Definition VTF.h:159
@ FLAG_V4_TF2_IMMEDIATE_CLEANUP
Definition VTF.h:167
@ FLAG_V4_TF2_STREAMABLE_COARSE
Definition VTF.h:169
@ FLAG_XBOX_UNFILTERABLE_OK
Definition VTF.h:153
@ FLAG_V4_TF2_STAGING_MEMORY
Definition VTF.h:166
@ FLAG_MASK_V0
Definition VTF.h:131
@ FLAG_V1_NO_DEBUG_OVERRIDE
Definition VTF.h:136
@ FLAG_MASK_V1_VTEX
Definition VTF.h:142
uint16_t height
Definition VTF.h:518
void removeCRCResource()
Definition VTF.cpp:1881
uint16_t frameCount
Definition VTF.h:522
uint8_t getFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1598
uint32_t getVersion() const
Definition VTF.cpp:1138
FlagsExtra
Definition VTF.h:192
@ FLAG_EXTRA_USING_PREMULTIPLIED_ALPHA_RESIZE
Definition VTF.h:193
@ FLAG_EXTRA_MASK
Definition VTF.h:194
void setHotspotDataResource(const HOT &value)
Definition VTF.cpp:1934
void removeFlags(uint32_t flags_)
Definition VTF.cpp:1253
uint32_t getFlagsExtra() const
Definition VTF.cpp:1257
bool setDepth(uint16_t newDepth)
Definition VTF.cpp:1473
std::vector< Resource > resources
Definition VTF.h:546
uint8_t thumbnailHeight
Definition VTF.h:533
Platform platform
Definition VTF.h:549
uint8_t getPaddedFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1594
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:2016
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:1812
void removeExtendedFlagsResource()
Definition VTF.cpp:1902
bool opened
Definition VTF.h:511
float bumpMapScale
Definition VTF.h:527
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
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
std::string getDataAsAuthorInfo() const
Definition VTF.cpp:364
HOT getDataAsHotspotData() const
Definition VTF.cpp:368
std::tuple< uint8_t, uint8_t, uint8_t, uint8_t > getDataAsLODControlInfo() const
Definition VTF.cpp:356
Type type
Definition VTF.h:60
ConvertedData convertData() const
Definition VTF.cpp:296
std::string getDataAsKeyValuesData() const
Definition VTF.cpp:360
int16_t getDataAsAuxCompressionLevel() const
Definition VTF.cpp:372
CompressionMethod getDataAsAuxCompressionMethod() const
Definition VTF.cpp:379
SHT getDataAsParticleSheet() const
Definition VTF.cpp:344
std::variant< std::monostate, SHT, uint32_t, std::tuple< uint8_t, uint8_t, uint8_t, uint8_t >, std::string, HOT > ConvertedData
Definition VTF.h:64
uint32_t getDataAsFlags() const
Definition VTF.cpp:352
@ FLAG_LOCAL_DATA
Definition VTF.h:57
uint32_t getDataAsCRC() const
Definition VTF.cpp:348
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:390
@ 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_AUTHOR_INFO
Definition VTF.h:51
@ 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_SOURCEPP_FLAGS
Definition VTF.h:52
@ TYPE_HOTSPOT_DATA
Definition VTF.h:44
Flags flags
Definition VTF.h:61
std::vector< std::byte > getDataAsPalette(uint16_t frame) const
Definition VTF.cpp:336
std::span< std::byte > data
Definition VTF.h:62
uint16_t initialFrameCount
Definition VTF.h:216
ImageConversion::ResizeBounds resizeBounds
Definition VTF.h:215
ImageConversion::ResizeFilter filter
Definition VTF.h:212
ImageConversion::ResizeMethod heightResizeMethod
Definition VTF.h:211
CompressionMethod compressionMethod
Definition VTF.h:226
ImageConversion::ResizeMethod widthResizeMethod
Definition VTF.h:210
ImageFormat outputFormat
Definition VTF.h:208