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
30 DEFLATE = 8,
31 ZSTD = 93,
32
33 // Signify the image resource should be compressed with LZMA on console
34 CONSOLE_LZMA = 0x360,
35};
36
37struct Resource {
55
56 enum Flags : uint8_t {
59 };
60
63 std::span<std::byte> data;
64
65 struct PCC {
66 sourcepp::math::Vec4d origin;
67 sourcepp::math::Mat4x4f inverseTransform;
68 };
69
70 using ConvertedData = std::variant<
71 std::monostate, // Anything that would be equivalent to just returning data directly, or used as an error
72 SHT, // Particle Sheet
73 uint32_t, // CRC, TS0, SPP
74 std::tuple<uint8_t, uint8_t, uint8_t, uint8_t>, // LOD
75 std::string, // KVD
76 HOT, // Hotspot data
77 PCC // Parallax-corrected cubemap data
78 >;
79 [[nodiscard]] ConvertedData convertData() const;
80
81 [[nodiscard]] std::vector<std::byte> getDataAsPalette(uint16_t frame) const;
82
83 [[nodiscard]] SHT getDataAsParticleSheet() const;
84
85 [[nodiscard]] PCC getDataAsParallaxCorrectedCubemap() const;
86
87 [[nodiscard]] uint32_t getDataAsCRC() const;
88
89 [[nodiscard]] uint32_t getDataAsFlags() const;
90
91 [[nodiscard]] std::tuple<uint8_t, uint8_t, uint8_t, uint8_t> getDataAsLODControlInfo() const;
92
93 [[nodiscard]] std::string getDataAsKeyValuesData() const;
94
95 [[nodiscard]] std::string getDataAsAuthorInfo() const;
96
97 [[nodiscard]] HOT getDataAsHotspotData() const;
98
99 [[nodiscard]] int16_t getDataAsAuxCompressionLevel() const;
100
102
103 [[nodiscard]] uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const;
104};
106
107/*
108 * === EASY DIFFICULTY WRITER API ===
109 *
110 * Use a static helper function to create a VTF in one function call - VTF::create
111 *
112 * === MEDIUM DIFFICULTY WRITER API ===
113 *
114 * Constructing a VTF instance from existing VTF data will let you modify that data.
115 *
116 * When constructing a VTF instance from scratch, this class has methods that should be
117 * called in a particular order. If they aren't your output VTF will look incorrect or
118 * have heavy artifacting. Some of these steps are optional, but the steps actually taken
119 * should be done in this order. Reference VTF::create and VTF::createInternal to see the
120 * intended "order of operations".
121 */
122class VTF {
123public:
124 enum Flags : uint32_t {
130 FLAG_V0_VTEX_HINT_DXT5 = 1u << 5, // Internal to vtex
131 FLAG_V0_VTEX_NO_COMPRESS = 1u << 6, // Internal to vtex
132 FLAG_V0_NORMAL = 1u << 7,
133 FLAG_V0_NO_MIP = 1u << 8, // Controlled by mip count
134 FLAG_V0_NO_LOD = 1u << 9,
139 FLAG_V0_ENVMAP = 1u << 14, // Controlled by face count
142
147 FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA = 1u << 19, // Internal to vtex
149 FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV = 1u << 21, // Internal to vtex
152
153 FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION = 1u << 22, // Internal to vtex
155 FLAG_V2_VTEX_NICE_FILTERED = 1u << 24, // Internal to vtex
156 FLAG_V2_CLAMP_U = 1u << 25,
159
165
168 FLAG_V3_SSBUMP = 1u << 27,
169 FLAG_V3_BORDER = 1u << 29,
171
172 FLAG_V4_SRGB = 1u << 6,
174
181
183 FLAG_V5_SRGB = 1u << 19,
187
194
197
199 };
200
205
214
241
243 static constexpr auto FORMAT_UNCHANGED = static_cast<ImageFormat>(-2);
244
246 static constexpr auto FORMAT_DEFAULT = static_cast<ImageFormat>(-1);
247
248 VTF();
249
250 explicit VTF(std::vector<std::byte>&& vtfData, bool parseHeaderOnly = false, bool hdr = false);
251
252 explicit VTF(std::span<const std::byte> vtfData, bool parseHeaderOnly = false, bool hdr = false);
253
254 explicit VTF(const std::filesystem::path& vtfPath, bool parseHeaderOnly = false);
255
256 VTF(const VTF& other);
257
258 VTF& operator=(const VTF& other);
259
260 VTF(VTF&&) noexcept = default;
261
262 VTF& operator=(VTF&&) noexcept = default;
263
264 [[nodiscard]] explicit operator bool() const;
265
266 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);
267
268 static bool create(ImageFormat format, uint16_t width, uint16_t height, const std::filesystem::path& vtfPath, const CreationOptions& options);
269
270 [[nodiscard]] static VTF create(std::span<const std::byte> imageData, ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
271
272 [[nodiscard]] static VTF create(ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
273
274 static bool create(const std::filesystem::path& imagePath, const std::filesystem::path& vtfPath, const CreationOptions& options);
275
276 [[nodiscard]] static VTF create(const std::filesystem::path& imagePath, const CreationOptions& options);
277
278 [[nodiscard]] Platform getPlatform() const;
279
280 void setPlatform(Platform newPlatform);
281
282 [[nodiscard]] uint32_t getVersion() const;
283
284 void setVersion(uint32_t newVersion);
285
286 [[nodiscard]] ImageConversion::ResizeMethod getImageWidthResizeMethod() const;
287
288 [[nodiscard]] ImageConversion::ResizeMethod getImageHeightResizeMethod() const;
289
290 void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_);
291
292 void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_);
293
294 void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_);
295
296 [[nodiscard]] uint16_t getWidth(uint8_t mip = 0) const;
297
298 [[nodiscard]] uint16_t getPaddedWidth(uint8_t mip = 0) const;
299
300 [[nodiscard]] uint16_t getHeight(uint8_t mip = 0) const;
301
302 [[nodiscard]] uint16_t getPaddedHeight(uint8_t mip = 0) const;
303
304 void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter);
305
306 [[nodiscard]] uint32_t getFlags() const;
307
308 void setFlags(uint32_t flags_);
309
310 void addFlags(uint32_t flags_);
311
312 void removeFlags(uint32_t flags_);
313
314 [[nodiscard]] uint32_t getFlagsExtra() const;
315
316 void setFlagsExtra(uint32_t flags_);
317
318 void addFlagsExtra(uint32_t flags_);
319
320 void removeFlagsExtra(uint32_t flags_);
321
322 [[nodiscard]] bool isSRGB() const;
323
324 void setSRGB(bool srgb);
325
327
328 [[nodiscard]] static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap);
329
330 [[nodiscard]] ImageFormat getFormat() const;
331
332 void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
333
334 [[nodiscard]] uint8_t getMipCount() const;
335
336 bool setMipCount(uint8_t newMipCount);
337
339
340 void computeMips(ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
341
342 [[nodiscard]] uint16_t getFrameCount() const;
343
344 bool setFrameCount(uint16_t newFrameCount);
345
346 [[nodiscard]] uint8_t getFaceCount() const;
347
348 bool setFaceCount(bool isCubeMap);
349
350 [[nodiscard]] uint16_t getDepth(uint8_t mip = 0) const;
351
352 bool setDepth(uint16_t newDepth);
353
354 bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth = 1);
355
356 [[nodiscard]] uint16_t getStartFrame() const;
357
358 void setStartFrame(uint16_t newStartFrame);
359
360 [[nodiscard]] sourcepp::math::Vec3f getReflectivity() const;
361
362 void setReflectivity(sourcepp::math::Vec3f newReflectivity);
363
364 void computeReflectivity();
365
366 [[nodiscard]] float getBumpMapScale() const;
367
368 void setBumpMapScale(float newBumpMapScale);
369
370 [[nodiscard]] ImageFormat getThumbnailFormat() const;
371
372 [[nodiscard]] uint8_t getThumbnailWidth() const;
373
374 [[nodiscard]] uint8_t getThumbnailHeight() const;
375
376 [[nodiscard]] uint8_t getFallbackWidth(uint8_t mip = 0) const;
377
378 [[nodiscard]] uint8_t getPaddedFallbackWidth(uint8_t mip = 0) const;
379
380 [[nodiscard]] uint8_t getFallbackHeight(uint8_t mip = 0) const;
381
382 [[nodiscard]] uint8_t getPaddedFallbackHeight(uint8_t mip = 0) const;
383
384 [[nodiscard]] uint8_t getFallbackMipCount() const;
385
386 [[nodiscard]] bool hasNativeResourceSupport() const;
387
388 [[nodiscard]] const std::vector<Resource>& getResources() const;
389
390 [[nodiscard]] const Resource* getResource(Resource::Type type) const;
391
392 [[nodiscard]] std::vector<std::byte> getPaletteResourceFrame(uint16_t frame = 0) const;
393
395 [[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;
396
398 [[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;
399
401 [[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;
402
403 void setParticleSheetResource(const SHT& value);
404
406
407 void setParallaxCorrectedCubemapResource(const Resource::PCC& value);
408
410
411 void setCRCResource(uint32_t value);
412
413 void removeCRCResource();
414
415 void setLODResource(uint8_t u, uint8_t v, uint8_t u360 = 0, uint8_t v360 = 0);
416
417 void removeLODResource();
418
419 void setExtendedFlagsResource(uint32_t value);
420
422
423 void setKeyValuesDataResource(std::string_view value);
424
426
427 void setAuthorInfoResource(std::string_view value);
428
430
431 void setHotspotDataResource(const HOT& value);
432
434
435 [[nodiscard]] uint16_t getCompressionLevel() const;
436
437 void setCompressionLevel(int16_t newCompressionLevel);
438
439 [[nodiscard]] CompressionMethod getCompressionMethod() const;
440
441 void setCompressionMethod(CompressionMethod newCompressionMethod);
442
443 [[nodiscard]] bool hasImageData() const;
444
445 [[nodiscard]] std::span<const std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
446
447 [[nodiscard]] std::span<std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0);
448
449 [[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;
450
451 [[nodiscard]] std::vector<std::byte> getImageDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
452
453 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);
454
455 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 = {});
456
457 [[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;
458
459 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)
460
461 [[nodiscard]] bool hasThumbnailData() const;
462
463 [[nodiscard]] std::span<const std::byte> getThumbnailDataRaw() const;
464
465 [[nodiscard]] std::span<std::byte> getThumbnailDataRaw();
466
467 [[nodiscard]] std::vector<std::byte> getThumbnailDataAs(ImageFormat newFormat) const;
468
469 [[nodiscard]] std::vector<std::byte> getThumbnailDataAsRGBA8888() const;
470
471 void setThumbnail(std::span<const std::byte> imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
472
473 bool setThumbnail(const std::filesystem::path& imagePath, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY); // NOLINT(*-use-nodiscard)
474
476
477 void removeThumbnail();
478
479 [[nodiscard]] std::vector<std::byte> saveThumbnailToFile(ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
480
481 bool saveThumbnailToFile(const std::filesystem::path& imagePath, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
482
483 [[nodiscard]] bool hasFallbackData() const;
484
485 [[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
486
487 [[nodiscard]] std::span<std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0);
488
489 [[nodiscard]] std::vector<std::byte> getFallbackDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
490
491 [[nodiscard]] std::vector<std::byte> getFallbackDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
492
494
495 void removeFallback();
496
497 [[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;
498
499 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)
500
501 [[nodiscard]] uint8_t getConsoleMipScale() const;
502
503 void setConsoleMipScale(uint8_t consoleMipScale_);
504
505 [[nodiscard]] uint64_t estimateBakeSize() const;
506
507 [[nodiscard]] uint64_t estimateBakeSize(bool& isExact) const;
508
509 [[nodiscard]] std::vector<std::byte> bake() const;
510
511 bool bake(const std::filesystem::path& vtfPath) const; // NOLINT(*-use-nodiscard)
512
513protected:
514 static bool createInternal(VTF& writer, CreationOptions options);
515
516 [[nodiscard]] Resource* getResourceInternal(Resource::Type type);
517
518 void setResourceInternal(Resource::Type type, std::span<const std::byte> data_);
519
520 void removeResourceInternal(Resource::Type type);
521
522 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);
523
524 bool opened = false;
525
526 std::vector<std::byte> data;
527
528 uint32_t version = 4;
529
530 uint16_t width = 0;
531 uint16_t height = 0;
533 uint32_t flagsExtra = 0;
534
535 uint16_t frameCount = 1;
536 uint16_t startFrame = 0;
537
538 sourcepp::math::Vec3f reflectivity{0.2f, 0.2f, 0.2f};
539
540 float bumpMapScale = 0.f;
542 uint8_t mipCount = 1;
543
545 uint8_t thumbnailWidth = 0;
546 uint8_t thumbnailHeight = 0;
547
548 uint8_t fallbackWidth = 0;
549 uint8_t fallbackHeight = 0;
550 uint8_t fallbackMipCount = 0;
551
552 // Number of times to multiply the scale of each mip by 2 when rendering on console
553 uint8_t consoleMipScale = 0;
554
555 // 1 for v7.1 and lower
556 uint16_t depth = 1;
557
558 // Technically added in v7.3, but we use it to store image and thumbnail data in v7.2 and lower anyway
559 std::vector<Resource> resources;
560
561 // These aren't in the header
563 uint16_t compressionLevel = 0;
567};
569
570} // 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:530
@ PLATFORM_PC
Definition VTF.h:208
@ PLATFORM_X360
Definition VTF.h:210
@ PLATFORM_PS3_PORTAL2
Definition VTF.h:212
@ PLATFORM_PS3_ORANGEBOX
Definition VTF.h:211
@ PLATFORM_UNKNOWN
Definition VTF.h:207
@ PLATFORM_XBOX
Definition VTF.h:209
void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1209
void setParallaxCorrectedCubemapResource(const Resource::PCC &value)
Definition VTF.cpp:1897
bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth=1)
Definition VTF.cpp:1502
void removeKeyValuesDataResource()
Definition VTF.cpp:1956
CompressionMethod compressionMethod
Definition VTF.h:564
void computeReflectivity()
Definition VTF.cpp:1526
uint8_t getThumbnailWidth() const
Definition VTF.cpp:1603
uint8_t consoleMipScale
Definition VTF.h:553
uint8_t fallbackWidth
Definition VTF.h:548
bool hasNativeResourceSupport() const
Definition VTF.cpp:1631
ImageFormat getFormat() const
Definition VTF.cpp:1339
void setPlatform(Platform newPlatform)
Definition VTF.cpp:1079
uint16_t getHeight(uint8_t mip=0) const
Definition VTF.cpp:1221
uint32_t flagsExtra
Definition VTF.h:533
VTF & operator=(const VTF &other)
Definition VTF.cpp:887
void removeFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1288
uint8_t getPaddedFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1623
uint16_t getCompressionLevel() const
Definition VTF.cpp:1989
sourcepp::math::Vec3f reflectivity
Definition VTF.h:538
uint16_t getWidth(uint8_t mip=0) const
Definition VTF.cpp:1213
uint16_t startFrame
Definition VTF.h:536
uint8_t mipCount
Definition VTF.h:542
bool setRecommendedMipCount()
Definition VTF.cpp:1385
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:1878
void computeMips(ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT)
Definition VTF.cpp:1392
void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_)
Definition VTF.cpp:1205
uint8_t thumbnailWidth
Definition VTF.h:545
VTF(VTF &&) noexcept=default
void setCompressionLevel(int16_t newCompressionLevel)
Definition VTF.cpp:1993
uint8_t fallbackHeight
Definition VTF.h:549
ImageConversion::ResizeMethod imageHeightResizeMethod
Definition VTF.h:566
void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
Definition VTF.cpp:1343
void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1200
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:1874
void addFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1284
float getBumpMapScale() const
Definition VTF.cpp:1591
void setKeyValuesDataResource(std::string_view value)
Definition VTF.cpp:1946
void computeTransparencyFlags()
Definition VTF.cpp:1312
std::vector< std::byte > data
Definition VTF.h:526
ImageFormat format
Definition VTF.h:541
Platform getPlatform() const
Definition VTF.cpp:1075
std::vector< std::byte > getPaletteResourceFrame(uint16_t frame=0) const
Definition VTF.cpp:1825
void addFlags(uint32_t flags_)
Definition VTF.cpp:1268
uint8_t getFaceCount() const
Definition VTF.cpp:1456
ImageFormat thumbnailFormat
Definition VTF.h:544
void setFlags(uint32_t flags_)
Definition VTF.cpp:1264
void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter)
Definition VTF.cpp:1229
void removeLODResource()
Definition VTF.cpp:1934
ImageConversion::ResizeMethod getImageHeightResizeMethod() const
Definition VTF.cpp:1196
void setBumpMapScale(float newBumpMapScale)
Definition VTF.cpp:1595
ImageFormat getThumbnailFormat() const
Definition VTF.cpp:1599
uint16_t getStartFrame() const
Definition VTF.cpp:1510
static constexpr auto FORMAT_DEFAULT
This value is only valid when passed to VTF::create through CreationOptions or VTF::setFormat.
Definition VTF.h:246
void setReflectivity(sourcepp::math::Vec3f newReflectivity)
Definition VTF.cpp:1522
void setSRGB(bool srgb)
Definition VTF.cpp:1296
const std::vector< Resource > & getResources() const
Definition VTF.cpp:1635
void removeHotspotDataResource()
Definition VTF.cpp:1985
void setVersion(uint32_t newVersion)
Definition VTF.cpp:1161
bool hasImageData() const
Definition VTF.cpp:2015
ImageConversion::ResizeMethod imageWidthResizeMethod
Definition VTF.h:565
uint16_t compressionLevel
Definition VTF.h:563
uint8_t fallbackMipCount
Definition VTF.h:550
void removeParticleSheetResource()
Definition VTF.cpp:1893
uint8_t getFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1611
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:988
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:2052
uint16_t getFrameCount() const
Definition VTF.cpp:1444
uint8_t getMipCount() const
Definition VTF.cpp:1367
void setLODResource(uint8_t u, uint8_t v, uint8_t u360=0, uint8_t v360=0)
Definition VTF.cpp:1925
bool setFrameCount(uint16_t newFrameCount)
Definition VTF.cpp:1448
void removeAuthorInfoResource()
Definition VTF.cpp:1970
ImageConversion::ResizeMethod getImageWidthResizeMethod() const
Definition VTF.cpp:1192
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:2037
static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap)
Definition VTF.cpp:1326
void setStartFrame(uint16_t newStartFrame)
Definition VTF.cpp:1514
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:2019
uint16_t depth
Definition VTF.h:556
sourcepp::math::Vec3f getReflectivity() const
Definition VTF.cpp:1518
uint8_t getFallbackMipCount() const
Definition VTF.cpp:1627
void setFlagsExtra(uint32_t flags_)
Definition VTF.cpp:1280
uint16_t getDepth(uint8_t mip=0) const
Definition VTF.cpp:1490
bool isSRGB() const
Definition VTF.cpp:1292
uint32_t flags
Definition VTF.h:532
uint16_t getPaddedHeight(uint8_t mip=0) const
Definition VTF.cpp:1225
static constexpr auto FORMAT_UNCHANGED
This value is only valid when passed to VTF::create through CreationOptions.
Definition VTF.h:243
uint32_t version
Definition VTF.h:528
bool setMipCount(uint8_t newMipCount)
Definition VTF.cpp:1371
void setExtendedFlagsResource(uint32_t value)
Definition VTF.cpp:1938
void removeParallaxCorrectedCubemapResource()
Definition VTF.cpp:1913
CompressionMethod getCompressionMethod() const
Definition VTF.cpp:2001
uint16_t getPaddedWidth(uint8_t mip=0) const
Definition VTF.cpp:1217
void setAuthorInfoResource(std::string_view value)
Definition VTF.cpp:1960
void setCRCResource(uint32_t value)
Definition VTF.cpp:1917
void setCompressionMethod(CompressionMethod newCompressionMethod)
Definition VTF.cpp:2005
bool setFaceCount(bool isCubeMap)
Definition VTF.cpp:1482
uint8_t getThumbnailHeight() const
Definition VTF.cpp:1607
const Resource * getResource(Resource::Type type) const
Definition VTF.cpp:1639
uint32_t getFlags() const
Definition VTF.cpp:1260
void setParticleSheetResource(const SHT &value)
Definition VTF.cpp:1882
@ FLAG_MASK_XBOX_VTEX
Definition VTF.h:164
@ FLAG_MASK_V5
Definition VTF.h:186
@ FLAG_V1_RENDERTARGET
Definition VTF.h:143
@ FLAG_V1_VTEX_PREMULTIPLY_COLOR_BY_ONE_OVER_MIP_LEVEL
Definition VTF.h:148
@ FLAG_MASK_V6
Definition VTF.h:196
@ FLAG_V1_DEPTH_RENDERTARGET
Definition VTF.h:144
@ FLAG_MASK_V2_VTEX
Definition VTF.h:158
@ FLAG_V5_DEFAULT_POOL
Definition VTF.h:184
@ FLAG_V0_ONE_BIT_ALPHA
Definition VTF.h:137
@ FLAG_MASK_V4_TF2
Definition VTF.h:180
@ FLAG_V4_TF2_IGNORE_PICMIP
Definition VTF.h:177
@ FLAG_V5_CSGO_COMBINED
Definition VTF.h:188
@ FLAG_V6_IGNORE_PICMIP
Definition VTF.h:195
@ FLAG_V2_NO_DEPTH_BUFFER
Definition VTF.h:154
@ FLAG_V0_MULTI_BIT_ALPHA
Definition VTF.h:138
@ FLAG_V5_CSGO_YCOCG
Definition VTF.h:191
@ FLAG_MASK_V2
Definition VTF.h:157
@ FLAG_V2_VTEX_NICE_FILTERED
Definition VTF.h:155
@ FLAG_V5_CSGO_SKIP_INITIAL_DOWNLOAD
Definition VTF.h:190
@ FLAG_MASK_V5_CSGO
Definition VTF.h:193
@ FLAG_V0_VTEX_NO_COMPRESS
Definition VTF.h:131
@ FLAG_V2_CLAMP_U
Definition VTF.h:156
@ FLAG_V0_NO_LOD
Definition VTF.h:134
@ FLAG_V0_VTEX_HINT_DXT5
Definition VTF.h:130
@ FLAG_V3_VERTEX_TEXTURE
Definition VTF.h:167
@ FLAG_V4_SRGB
Definition VTF.h:172
@ FLAG_V0_NORMAL
Definition VTF.h:132
@ FLAG_V0_NO_MIP
Definition VTF.h:133
@ FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA
Definition VTF.h:147
@ FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION
Definition VTF.h:153
@ FLAG_V5_SRGB
Definition VTF.h:183
@ FLAG_MASK_XBOX
Definition VTF.h:163
@ FLAG_V0_CLAMP_T
Definition VTF.h:128
@ FLAG_V3_LOAD_ALL_MIPS
Definition VTF.h:166
@ FLAG_XBOX_VTEX_PRESWIZZLED
Definition VTF.h:160
@ FLAG_V0_PROCEDURAL
Definition VTF.h:136
@ FLAG_V4_TF2_STREAMABLE_FINE
Definition VTF.h:179
@ FLAG_V5_CSGO_ASYNC_SKIP_INITIAL_LOW_RES
Definition VTF.h:192
@ FLAG_V5_CSGO_ASYNC_DOWNLOAD
Definition VTF.h:189
@ FLAG_V0_POINT_SAMPLE
Definition VTF.h:125
@ FLAG_V1_SINGLE_COPY
Definition VTF.h:146
@ FLAG_MASK_V0_VTEX
Definition VTF.h:141
@ FLAG_V3_BORDER
Definition VTF.h:169
@ FLAG_V5_LOAD_MOST_MIPS
Definition VTF.h:185
@ FLAG_V0_TRILINEAR
Definition VTF.h:126
@ FLAG_V5_PWL_CORRECTED
Definition VTF.h:182
@ FLAG_V0_ANISOTROPIC
Definition VTF.h:129
@ FLAG_MASK_V4
Definition VTF.h:173
@ FLAG_XBOX_CACHEABLE
Definition VTF.h:161
@ FLAG_MASK_V3
Definition VTF.h:170
@ FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV
Definition VTF.h:149
@ FLAG_V0_ENVMAP
Definition VTF.h:139
@ FLAG_V0_CLAMP_S
Definition VTF.h:127
@ FLAG_MASK_V1
Definition VTF.h:150
@ FLAG_V0_LOAD_SMALL_MIPS
Definition VTF.h:135
@ FLAG_MASK_INTERNAL
Definition VTF.h:198
@ FLAG_V3_SSBUMP
Definition VTF.h:168
@ FLAG_V4_TF2_IMMEDIATE_CLEANUP
Definition VTF.h:176
@ FLAG_V4_TF2_STREAMABLE_COARSE
Definition VTF.h:178
@ FLAG_XBOX_UNFILTERABLE_OK
Definition VTF.h:162
@ FLAG_V4_TF2_STAGING_MEMORY
Definition VTF.h:175
@ FLAG_MASK_V0
Definition VTF.h:140
@ FLAG_V1_NO_DEBUG_OVERRIDE
Definition VTF.h:145
@ FLAG_MASK_V1_VTEX
Definition VTF.h:151
uint16_t height
Definition VTF.h:531
void removeCRCResource()
Definition VTF.cpp:1921
uint16_t frameCount
Definition VTF.h:535
uint8_t getFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1619
uint32_t getVersion() const
Definition VTF.cpp:1157
FlagsExtra
Definition VTF.h:201
@ FLAG_EXTRA_USING_PREMULTIPLIED_ALPHA_RESIZE
Definition VTF.h:202
@ FLAG_EXTRA_MASK
Definition VTF.h:203
void setHotspotDataResource(const HOT &value)
Definition VTF.cpp:1974
void removeFlags(uint32_t flags_)
Definition VTF.cpp:1272
uint32_t getFlagsExtra() const
Definition VTF.cpp:1276
bool setDepth(uint16_t newDepth)
Definition VTF.cpp:1494
std::vector< Resource > resources
Definition VTF.h:559
uint8_t thumbnailHeight
Definition VTF.h:546
Platform platform
Definition VTF.h:562
uint8_t getPaddedFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1615
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:2056
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:1832
void removeExtendedFlagsResource()
Definition VTF.cpp:1942
bool opened
Definition VTF.h:524
float bumpMapScale
Definition VTF.h:540
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
sourcepp::math::Mat4x4f inverseTransform
Definition VTF.h:67
sourcepp::math::Vec4d origin
Definition VTF.h:66
std::string getDataAsAuthorInfo() const
Definition VTF.cpp:385
HOT getDataAsHotspotData() const
Definition VTF.cpp:389
std::tuple< uint8_t, uint8_t, uint8_t, uint8_t > getDataAsLODControlInfo() const
Definition VTF.cpp:377
Type type
Definition VTF.h:61
ConvertedData convertData() const
Definition VTF.cpp:296
std::string getDataAsKeyValuesData() const
Definition VTF.cpp:381
int16_t getDataAsAuxCompressionLevel() const
Definition VTF.cpp:393
std::variant< std::monostate, SHT, uint32_t, std::tuple< uint8_t, uint8_t, uint8_t, uint8_t >, std::string, HOT, PCC > ConvertedData
Definition VTF.h:70
CompressionMethod getDataAsAuxCompressionMethod() const
Definition VTF.cpp:400
SHT getDataAsParticleSheet() const
Definition VTF.cpp:361
uint32_t getDataAsFlags() const
Definition VTF.cpp:373
@ FLAG_LOCAL_DATA
Definition VTF.h:58
PCC getDataAsParallaxCorrectedCubemap() const
Definition VTF.cpp:365
uint32_t getDataAsCRC() const
Definition VTF.cpp:369
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:411
@ TYPE_PARALLAX_CORRECTED_CUBEMAP
Definition VTF.h:47
@ TYPE_KEYVALUES_DATA
Definition VTF.h:51
@ 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:52
@ 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:49
@ TYPE_LOD_CONTROL_INFO
Definition VTF.h:50
@ TYPE_THUMBNAIL_DATA
Definition VTF.h:40
@ TYPE_SOURCEPP_FLAGS
Definition VTF.h:53
@ TYPE_HOTSPOT_DATA
Definition VTF.h:44
Flags flags
Definition VTF.h:62
std::vector< std::byte > getDataAsPalette(uint16_t frame) const
Definition VTF.cpp:353
std::span< std::byte > data
Definition VTF.h:63
uint16_t initialFrameCount
Definition VTF.h:225
ImageConversion::ResizeBounds resizeBounds
Definition VTF.h:224
ImageConversion::ResizeFilter filter
Definition VTF.h:221
ImageConversion::ResizeMethod heightResizeMethod
Definition VTF.h:220
CompressionMethod compressionMethod
Definition VTF.h:235
ImageConversion::ResizeMethod widthResizeMethod
Definition VTF.h:219
ImageFormat outputFormat
Definition VTF.h:217