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 {
53
54 enum Flags : uint8_t {
57 };
58
61 std::span<std::byte> data;
62
63 using ConvertedData = std::variant<
64 std::monostate, // Anything that would be equivalent to just returning data directly, or used as an error
65 SHT, // Particle Sheet
66 uint32_t, // CRC, TS0
67 std::tuple<uint8_t, uint8_t, uint8_t, uint8_t>, // LOD
68 std::string, // KVD
69 HOT // Hotspot data
70 >;
71 [[nodiscard]] ConvertedData convertData() const;
72
73 [[nodiscard]] std::vector<std::byte> getDataAsPalette(uint16_t frame) const;
74
75 [[nodiscard]] SHT getDataAsParticleSheet() const;
76
77 [[nodiscard]] uint32_t getDataAsCRC() const;
78
79 [[nodiscard]] uint32_t getDataAsExtendedFlags() const;
80
81 [[nodiscard]] std::tuple<uint8_t, uint8_t, uint8_t, uint8_t> getDataAsLODControlInfo() const;
82
83 [[nodiscard]] std::string getDataAsKeyValuesData() const;
84
85 [[nodiscard]] std::string getDataAsAuthorInfo() const;
86
87 [[nodiscard]] HOT getDataAsHotspotData() const;
88
89 [[nodiscard]] int16_t getDataAsAuxCompressionLevel() const;
90
92
93 [[nodiscard]] uint32_t getDataAsAuxCompressionLength(uint8_t mip, uint8_t mipCount, uint16_t frame, uint16_t frameCount, uint16_t face, uint16_t faceCount) const;
94};
96
97/*
98 * === EASY DIFFICULTY WRITER API ===
99 *
100 * Use a static helper function to create a VTF in one function call - VTF::create
101 *
102 * === MEDIUM DIFFICULTY WRITER API ===
103 *
104 * Constructing a VTF instance from existing VTF data will let you modify that data.
105 *
106 * When constructing a VTF instance from scratch, this class has methods that should be
107 * called in a particular order. If they aren't your output VTF will look incorrect or
108 * have heavy artifacting. Some of these steps are optional, but the steps actually taken
109 * should be done in this order. Reference VTF::create and VTF::createInternal to see the
110 * intended "order of operations".
111 */
112class VTF {
113public:
114 enum Flags : uint32_t {
120 FLAG_V0_VTEX_HINT_DXT5 = 1u << 5, // Internal to vtex
121 FLAG_V0_VTEX_NO_COMPRESS = 1u << 6, // Internal to vtex
122 FLAG_V0_NORMAL = 1u << 7,
123 FLAG_V0_NO_MIP = 1u << 8, // Controlled by mip count
124 FLAG_V0_NO_LOD = 1u << 9,
129 FLAG_V0_ENVMAP = 1u << 14, // Controlled by face count
132
137 FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA = 1u << 19, // Internal to vtex
139 FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV = 1u << 21, // Internal to vtex
142
143 FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION = 1u << 22, // Internal to vtex
145 FLAG_V2_VTEX_NICE_FILTERED = 1u << 24, // Internal to vtex
146 FLAG_V2_CLAMP_U = 1u << 25,
149
155
158 FLAG_V3_SSBUMP = 1u << 27,
159 FLAG_V3_BORDER = 1u << 29,
161
162 FLAG_V4_SRGB = 1u << 6,
164
171
173 FLAG_V5_SRGB = 1u << 19,
177
184
187
189 };
190
199
225
227 static constexpr auto FORMAT_UNCHANGED = static_cast<ImageFormat>(-2);
228
230 static constexpr auto FORMAT_DEFAULT = static_cast<ImageFormat>(-1);
231
232 VTF();
233
234 explicit VTF(std::vector<std::byte>&& vtfData, bool parseHeaderOnly = false, bool hdr = false);
235
236 explicit VTF(std::span<const std::byte> vtfData, bool parseHeaderOnly = false, bool hdr = false);
237
238 explicit VTF(const std::filesystem::path& vtfPath, bool parseHeaderOnly = false);
239
240 VTF(const VTF& other);
241
242 VTF& operator=(const VTF& other);
243
244 VTF(VTF&&) noexcept = default;
245
246 VTF& operator=(VTF&&) noexcept = default;
247
248 [[nodiscard]] explicit operator bool() const;
249
250 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);
251
252 static bool create(ImageFormat format, uint16_t width, uint16_t height, const std::filesystem::path& vtfPath, const CreationOptions& options);
253
254 [[nodiscard]] static VTF create(std::span<const std::byte> imageData, ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
255
256 [[nodiscard]] static VTF create(ImageFormat format, uint16_t width, uint16_t height, const CreationOptions& options);
257
258 static bool create(const std::filesystem::path& imagePath, const std::filesystem::path& vtfPath, const CreationOptions& options);
259
260 [[nodiscard]] static VTF create(const std::filesystem::path& imagePath, const CreationOptions& options);
261
262 [[nodiscard]] Platform getPlatform() const;
263
264 void setPlatform(Platform newPlatform);
265
266 [[nodiscard]] uint32_t getVersion() const;
267
268 void setVersion(uint32_t newVersion);
269
270 [[nodiscard]] ImageConversion::ResizeMethod getImageWidthResizeMethod() const;
271
272 [[nodiscard]] ImageConversion::ResizeMethod getImageHeightResizeMethod() const;
273
274 void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_);
275
276 void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_);
277
278 void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_);
279
280 [[nodiscard]] uint16_t getWidth(uint8_t mip = 0) const;
281
282 [[nodiscard]] uint16_t getPaddedWidth(uint8_t mip = 0) const;
283
284 [[nodiscard]] uint16_t getHeight(uint8_t mip = 0) const;
285
286 [[nodiscard]] uint16_t getPaddedHeight(uint8_t mip = 0) const;
287
288 void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter);
289
290 [[nodiscard]] uint32_t getFlags() const;
291
292 void setFlags(uint32_t flags_);
293
294 void addFlags(uint32_t flags_);
295
296 void removeFlags(uint32_t flags_);
297
298 [[nodiscard]] bool isSRGB() const;
299
300 void setSRGB(bool srgb);
301
303
304 [[nodiscard]] static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap);
305
306 [[nodiscard]] ImageFormat getFormat() const;
307
308 void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
309
310 [[nodiscard]] uint8_t getMipCount() const;
311
312 bool setMipCount(uint8_t newMipCount);
313
315
316 void computeMips(ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
317
318 [[nodiscard]] uint16_t getFrameCount() const;
319
320 bool setFrameCount(uint16_t newFrameCount);
321
322 [[nodiscard]] uint8_t getFaceCount() const;
323
324 bool setFaceCount(bool isCubeMap);
325
326 [[nodiscard]] uint16_t getDepth(uint8_t mip = 0) const;
327
328 bool setDepth(uint16_t newDepth);
329
330 bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth = 1);
331
332 [[nodiscard]] uint16_t getStartFrame() const;
333
334 void setStartFrame(uint16_t newStartFrame);
335
336 [[nodiscard]] sourcepp::math::Vec3f getReflectivity() const;
337
338 void setReflectivity(sourcepp::math::Vec3f newReflectivity);
339
340 void computeReflectivity();
341
342 [[nodiscard]] float getBumpMapScale() const;
343
344 void setBumpMapScale(float newBumpMapScale);
345
346 [[nodiscard]] ImageFormat getThumbnailFormat() const;
347
348 [[nodiscard]] uint8_t getThumbnailWidth() const;
349
350 [[nodiscard]] uint8_t getThumbnailHeight() const;
351
352 [[nodiscard]] uint8_t getFallbackWidth(uint8_t mip = 0) const;
353
354 [[nodiscard]] uint8_t getPaddedFallbackWidth(uint8_t mip = 0) const;
355
356 [[nodiscard]] uint8_t getFallbackHeight(uint8_t mip = 0) const;
357
358 [[nodiscard]] uint8_t getPaddedFallbackHeight(uint8_t mip = 0) const;
359
360 [[nodiscard]] uint8_t getFallbackMipCount() const;
361
362 [[nodiscard]] bool hasNativeResourceSupport() const;
363
364 [[nodiscard]] const std::vector<Resource>& getResources() const;
365
366 [[nodiscard]] const Resource* getResource(Resource::Type type) const;
367
368 [[nodiscard]] std::vector<std::byte> getPaletteResourceFrame(uint16_t frame = 0) const;
369
371 [[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;
372
374 [[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;
375
377 [[nodiscard]] std::vector<std::byte> getParticleSheetFrameDataAsRGBA8888(uint16_t& spriteWidth, uint16_t& spriteHeight, uint32_t shtSequenceID, uint32_t shtFrame, uint8_t shtBounds = 0, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
378
379 void setParticleSheetResource(const SHT& value);
380
382
383 void setCRCResource(uint32_t value);
384
385 void removeCRCResource();
386
387 void setLODResource(uint8_t u, uint8_t v, uint8_t u360 = 0, uint8_t v360 = 0);
388
389 void removeLODResource();
390
391 void setExtendedFlagsResource(uint32_t value);
392
394
395 void setKeyValuesDataResource(std::string_view value);
396
398
399 void setAuthorInfoResource(std::string_view value);
400
402
403 void setHotspotDataResource(const HOT& value);
404
406
407 [[nodiscard]] uint16_t getCompressionLevel() const;
408
409 void setCompressionLevel(int16_t newCompressionLevel);
410
411 [[nodiscard]] CompressionMethod getCompressionMethod() const;
412
413 void setCompressionMethod(CompressionMethod newCompressionMethod);
414
415 [[nodiscard]] bool hasImageData() const;
416
417 [[nodiscard]] std::span<const std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
418
419 [[nodiscard]] std::span<std::byte> getImageDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0);
420
421 [[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;
422
423 [[nodiscard]] std::vector<std::byte> getImageDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0, uint16_t slice = 0) const;
424
425 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);
426
427 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 = {});
428
429 [[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;
430
431 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)
432
433 [[nodiscard]] bool hasThumbnailData() const;
434
435 [[nodiscard]] std::span<const std::byte> getThumbnailDataRaw() const;
436
437 [[nodiscard]] std::span<std::byte> getThumbnailDataRaw();
438
439 [[nodiscard]] std::vector<std::byte> getThumbnailDataAs(ImageFormat newFormat) const;
440
441 [[nodiscard]] std::vector<std::byte> getThumbnailDataAsRGBA8888() const;
442
443 void setThumbnail(std::span<const std::byte> imageData_, ImageFormat format_, uint16_t width_, uint16_t height_, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY);
444
445 bool setThumbnail(const std::filesystem::path& imagePath, float quality = ImageConversion::DEFAULT_COMPRESSED_QUALITY); // NOLINT(*-use-nodiscard)
446
448
449 void removeThumbnail();
450
451 [[nodiscard]] std::vector<std::byte> saveThumbnailToFile(ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
452
453 bool saveThumbnailToFile(const std::filesystem::path& imagePath, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
454
455 [[nodiscard]] bool hasFallbackData() const;
456
457 [[nodiscard]] std::span<const std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
458
459 [[nodiscard]] std::span<std::byte> getFallbackDataRaw(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0);
460
461 [[nodiscard]] std::vector<std::byte> getFallbackDataAs(ImageFormat newFormat, uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
462
463 [[nodiscard]] std::vector<std::byte> getFallbackDataAsRGBA8888(uint8_t mip = 0, uint16_t frame = 0, uint8_t face = 0) const;
464
466
467 void removeFallback();
468
469 [[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;
470
471 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)
472
473 [[nodiscard]] uint8_t getConsoleMipScale() const;
474
475 void setConsoleMipScale(uint8_t consoleMipScale_);
476
477 [[nodiscard]] uint64_t estimateBakeSize() const;
478
479 [[nodiscard]] uint64_t estimateBakeSize(bool& isExact) const;
480
481 [[nodiscard]] std::vector<std::byte> bake() const;
482
483 bool bake(const std::filesystem::path& vtfPath) const; // NOLINT(*-use-nodiscard)
484
485protected:
486 static bool createInternal(VTF& writer, CreationOptions options);
487
488 [[nodiscard]] Resource* getResourceInternal(Resource::Type type);
489
490 void setResourceInternal(Resource::Type type, std::span<const std::byte> data_);
491
492 void removeResourceInternal(Resource::Type type);
493
494 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);
495
496 bool opened = false;
497
498 std::vector<std::byte> data;
499
500 uint32_t version = 4;
501
502 uint16_t width = 0;
503 uint16_t height = 0;
505
506 uint16_t frameCount = 1;
507 uint16_t startFrame = 0;
508
509 sourcepp::math::Vec3f reflectivity{0.2f, 0.2f, 0.2f};
510
511 float bumpMapScale = 0.f;
513 uint8_t mipCount = 1;
514
516 uint8_t thumbnailWidth = 0;
517 uint8_t thumbnailHeight = 0;
518
519 uint8_t fallbackWidth = 0;
520 uint8_t fallbackHeight = 0;
521 uint8_t fallbackMipCount = 0;
522
523 // Number of times to multiply the scale of each mip by 2 when rendering on console
524 uint8_t consoleMipScale = 0;
525
526 // 1 for v7.1 and lower
527 uint16_t depth = 1;
528
529 // Technically added in v7.3, but we use it to store image and thumbnail data in v7.2 and lower anyway
530 std::vector<Resource> resources;
531
532 // These aren't in the header
534 uint16_t compressionLevel = 0;
538};
540
541} // 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:502
@ PLATFORM_PC
Definition VTF.h:193
@ PLATFORM_X360
Definition VTF.h:195
@ PLATFORM_PS3_PORTAL2
Definition VTF.h:197
@ PLATFORM_PS3_ORANGEBOX
Definition VTF.h:196
@ PLATFORM_UNKNOWN
Definition VTF.h:192
@ PLATFORM_XBOX
Definition VTF.h:194
void setImageHeightResizeMethod(ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1183
bool setFrameFaceAndDepth(uint16_t newFrameCount, bool isCubeMap, uint16_t newDepth=1)
Definition VTF.cpp:1458
void removeKeyValuesDataResource()
Definition VTF.cpp:1890
CompressionMethod compressionMethod
Definition VTF.h:535
void computeReflectivity()
Definition VTF.cpp:1482
uint8_t getThumbnailWidth() const
Definition VTF.cpp:1559
uint8_t consoleMipScale
Definition VTF.h:524
uint8_t fallbackWidth
Definition VTF.h:519
bool hasNativeResourceSupport() const
Definition VTF.cpp:1587
ImageFormat getFormat() const
Definition VTF.cpp:1297
void setPlatform(Platform newPlatform)
Definition VTF.cpp:1052
uint16_t getHeight(uint8_t mip=0) const
Definition VTF.cpp:1195
VTF & operator=(const VTF &other)
Definition VTF.cpp:862
uint8_t getPaddedFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1579
uint16_t getCompressionLevel() const
Definition VTF.cpp:1923
sourcepp::math::Vec3f reflectivity
Definition VTF.h:509
uint16_t getWidth(uint8_t mip=0) const
Definition VTF.cpp:1187
uint16_t startFrame
Definition VTF.h:507
uint8_t mipCount
Definition VTF.h:513
bool setRecommendedMipCount()
Definition VTF.cpp:1341
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:1832
void computeMips(ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT)
Definition VTF.cpp:1348
void setImageWidthResizeMethod(ImageConversion::ResizeMethod imageWidthResizeMethod_)
Definition VTF.cpp:1179
uint8_t thumbnailWidth
Definition VTF.h:516
VTF(VTF &&) noexcept=default
void setCompressionLevel(int16_t newCompressionLevel)
Definition VTF.cpp:1927
uint8_t fallbackHeight
Definition VTF.h:520
ImageConversion::ResizeMethod imageHeightResizeMethod
Definition VTF.h:537
void setFormat(ImageFormat newFormat, ImageConversion::ResizeFilter filter=ImageConversion::ResizeFilter::DEFAULT, float quality=ImageConversion::DEFAULT_COMPRESSED_QUALITY)
Definition VTF.cpp:1301
void setImageResizeMethods(ImageConversion::ResizeMethod imageWidthResizeMethod_, ImageConversion::ResizeMethod imageHeightResizeMethod_)
Definition VTF.cpp:1174
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:1828
float getBumpMapScale() const
Definition VTF.cpp:1547
void setKeyValuesDataResource(std::string_view value)
Definition VTF.cpp:1880
void computeTransparencyFlags()
Definition VTF.cpp:1270
std::vector< std::byte > data
Definition VTF.h:498
ImageFormat format
Definition VTF.h:512
Platform getPlatform() const
Definition VTF.cpp:1048
std::vector< std::byte > getPaletteResourceFrame(uint16_t frame=0) const
Definition VTF.cpp:1779
void addFlags(uint32_t flags_)
Definition VTF.cpp:1242
uint8_t getFaceCount() const
Definition VTF.cpp:1412
ImageFormat thumbnailFormat
Definition VTF.h:515
void setFlags(uint32_t flags_)
Definition VTF.cpp:1238
void setSize(uint16_t newWidth, uint16_t newHeight, ImageConversion::ResizeFilter filter)
Definition VTF.cpp:1203
void removeLODResource()
Definition VTF.cpp:1868
ImageConversion::ResizeMethod getImageHeightResizeMethod() const
Definition VTF.cpp:1170
void setBumpMapScale(float newBumpMapScale)
Definition VTF.cpp:1551
ImageFormat getThumbnailFormat() const
Definition VTF.cpp:1555
uint16_t getStartFrame() const
Definition VTF.cpp:1466
static constexpr auto FORMAT_DEFAULT
This value is only valid when passed to VTF::create through CreationOptions or VTF::setFormat.
Definition VTF.h:230
void setReflectivity(sourcepp::math::Vec3f newReflectivity)
Definition VTF.cpp:1478
void setSRGB(bool srgb)
Definition VTF.cpp:1254
const std::vector< Resource > & getResources() const
Definition VTF.cpp:1591
void removeHotspotDataResource()
Definition VTF.cpp:1919
void setVersion(uint32_t newVersion)
Definition VTF.cpp:1135
bool hasImageData() const
Definition VTF.cpp:1949
ImageConversion::ResizeMethod imageWidthResizeMethod
Definition VTF.h:536
uint16_t compressionLevel
Definition VTF.h:534
uint8_t fallbackMipCount
Definition VTF.h:521
void removeParticleSheetResource()
Definition VTF.cpp:1847
uint8_t getFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1567
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:963
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:1986
uint16_t getFrameCount() const
Definition VTF.cpp:1400
uint8_t getMipCount() const
Definition VTF.cpp:1325
void setLODResource(uint8_t u, uint8_t v, uint8_t u360=0, uint8_t v360=0)
Definition VTF.cpp:1859
bool setFrameCount(uint16_t newFrameCount)
Definition VTF.cpp:1404
void removeAuthorInfoResource()
Definition VTF.cpp:1904
ImageConversion::ResizeMethod getImageWidthResizeMethod() const
Definition VTF.cpp:1166
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:1971
static ImageFormat getDefaultCompressedFormat(ImageFormat inputFormat, uint32_t version, bool isCubeMap)
Definition VTF.cpp:1284
void setStartFrame(uint16_t newStartFrame)
Definition VTF.cpp:1470
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:1953
uint16_t depth
Definition VTF.h:527
sourcepp::math::Vec3f getReflectivity() const
Definition VTF.cpp:1474
uint8_t getFallbackMipCount() const
Definition VTF.cpp:1583
uint16_t getDepth(uint8_t mip=0) const
Definition VTF.cpp:1446
bool isSRGB() const
Definition VTF.cpp:1250
uint32_t flags
Definition VTF.h:504
uint16_t getPaddedHeight(uint8_t mip=0) const
Definition VTF.cpp:1199
static constexpr auto FORMAT_UNCHANGED
This value is only valid when passed to VTF::create through CreationOptions.
Definition VTF.h:227
uint32_t version
Definition VTF.h:500
bool setMipCount(uint8_t newMipCount)
Definition VTF.cpp:1329
void setExtendedFlagsResource(uint32_t value)
Definition VTF.cpp:1872
CompressionMethod getCompressionMethod() const
Definition VTF.cpp:1935
uint16_t getPaddedWidth(uint8_t mip=0) const
Definition VTF.cpp:1191
void setAuthorInfoResource(std::string_view value)
Definition VTF.cpp:1894
void setCRCResource(uint32_t value)
Definition VTF.cpp:1851
void setCompressionMethod(CompressionMethod newCompressionMethod)
Definition VTF.cpp:1939
bool setFaceCount(bool isCubeMap)
Definition VTF.cpp:1438
uint8_t getThumbnailHeight() const
Definition VTF.cpp:1563
const Resource * getResource(Resource::Type type) const
Definition VTF.cpp:1595
uint32_t getFlags() const
Definition VTF.cpp:1234
void setParticleSheetResource(const SHT &value)
Definition VTF.cpp:1836
@ FLAG_MASK_XBOX_VTEX
Definition VTF.h:154
@ FLAG_MASK_V5
Definition VTF.h:176
@ FLAG_V1_RENDERTARGET
Definition VTF.h:133
@ FLAG_V1_VTEX_PREMULTIPLY_COLOR_BY_ONE_OVER_MIP_LEVEL
Definition VTF.h:138
@ FLAG_MASK_V6
Definition VTF.h:186
@ FLAG_V1_DEPTH_RENDERTARGET
Definition VTF.h:134
@ FLAG_MASK_V2_VTEX
Definition VTF.h:148
@ FLAG_V5_DEFAULT_POOL
Definition VTF.h:174
@ FLAG_V0_ONE_BIT_ALPHA
Definition VTF.h:127
@ FLAG_MASK_V4_TF2
Definition VTF.h:170
@ FLAG_V4_TF2_IGNORE_PICMIP
Definition VTF.h:167
@ FLAG_V5_CSGO_COMBINED
Definition VTF.h:178
@ FLAG_V6_IGNORE_PICMIP
Definition VTF.h:185
@ FLAG_V2_NO_DEPTH_BUFFER
Definition VTF.h:144
@ FLAG_V0_MULTI_BIT_ALPHA
Definition VTF.h:128
@ FLAG_V5_CSGO_YCOCG
Definition VTF.h:181
@ FLAG_MASK_V2
Definition VTF.h:147
@ FLAG_V2_VTEX_NICE_FILTERED
Definition VTF.h:145
@ FLAG_V5_CSGO_SKIP_INITIAL_DOWNLOAD
Definition VTF.h:180
@ FLAG_MASK_V5_CSGO
Definition VTF.h:183
@ FLAG_V0_VTEX_NO_COMPRESS
Definition VTF.h:121
@ FLAG_V2_CLAMP_U
Definition VTF.h:146
@ FLAG_V0_NO_LOD
Definition VTF.h:124
@ FLAG_V0_VTEX_HINT_DXT5
Definition VTF.h:120
@ FLAG_V3_VERTEX_TEXTURE
Definition VTF.h:157
@ FLAG_V4_SRGB
Definition VTF.h:162
@ FLAG_V0_NORMAL
Definition VTF.h:122
@ FLAG_V0_NO_MIP
Definition VTF.h:123
@ FLAG_V1_VTEX_ONE_OVER_MIP_LEVEL_IN_ALPHA
Definition VTF.h:137
@ FLAG_V2_VTEX_ALPHA_TEST_MIP_GENERATION
Definition VTF.h:143
@ FLAG_V5_SRGB
Definition VTF.h:173
@ FLAG_MASK_XBOX
Definition VTF.h:153
@ FLAG_V0_CLAMP_T
Definition VTF.h:118
@ FLAG_V3_LOAD_ALL_MIPS
Definition VTF.h:156
@ FLAG_XBOX_VTEX_PRESWIZZLED
Definition VTF.h:150
@ FLAG_V0_PROCEDURAL
Definition VTF.h:126
@ FLAG_V4_TF2_STREAMABLE_FINE
Definition VTF.h:169
@ FLAG_V5_CSGO_ASYNC_SKIP_INITIAL_LOW_RES
Definition VTF.h:182
@ FLAG_V5_CSGO_ASYNC_DOWNLOAD
Definition VTF.h:179
@ FLAG_V0_POINT_SAMPLE
Definition VTF.h:115
@ FLAG_V1_SINGLE_COPY
Definition VTF.h:136
@ FLAG_MASK_V0_VTEX
Definition VTF.h:131
@ FLAG_V3_BORDER
Definition VTF.h:159
@ FLAG_V5_LOAD_MOST_MIPS
Definition VTF.h:175
@ FLAG_V0_TRILINEAR
Definition VTF.h:116
@ FLAG_V5_PWL_CORRECTED
Definition VTF.h:172
@ FLAG_V0_ANISOTROPIC
Definition VTF.h:119
@ FLAG_MASK_V4
Definition VTF.h:163
@ FLAG_XBOX_CACHEABLE
Definition VTF.h:151
@ FLAG_MASK_V3
Definition VTF.h:160
@ FLAG_V1_VTEX_CONVERT_NORMAL_TO_DUDV
Definition VTF.h:139
@ FLAG_V0_ENVMAP
Definition VTF.h:129
@ FLAG_V0_CLAMP_S
Definition VTF.h:117
@ FLAG_MASK_V1
Definition VTF.h:140
@ FLAG_V0_LOAD_SMALL_MIPS
Definition VTF.h:125
@ FLAG_MASK_INTERNAL
Definition VTF.h:188
@ FLAG_V3_SSBUMP
Definition VTF.h:158
@ FLAG_V4_TF2_IMMEDIATE_CLEANUP
Definition VTF.h:166
@ FLAG_V4_TF2_STREAMABLE_COARSE
Definition VTF.h:168
@ FLAG_XBOX_UNFILTERABLE_OK
Definition VTF.h:152
@ FLAG_V4_TF2_STAGING_MEMORY
Definition VTF.h:165
@ FLAG_MASK_V0
Definition VTF.h:130
@ FLAG_V1_NO_DEBUG_OVERRIDE
Definition VTF.h:135
@ FLAG_MASK_V1_VTEX
Definition VTF.h:141
uint16_t height
Definition VTF.h:503
void removeCRCResource()
Definition VTF.cpp:1855
uint16_t frameCount
Definition VTF.h:506
uint8_t getFallbackHeight(uint8_t mip=0) const
Definition VTF.cpp:1575
uint32_t getVersion() const
Definition VTF.cpp:1131
void setHotspotDataResource(const HOT &value)
Definition VTF.cpp:1908
void removeFlags(uint32_t flags_)
Definition VTF.cpp:1246
bool setDepth(uint16_t newDepth)
Definition VTF.cpp:1450
std::vector< Resource > resources
Definition VTF.h:530
uint8_t thumbnailHeight
Definition VTF.h:517
Platform platform
Definition VTF.h:533
uint8_t getPaddedFallbackWidth(uint8_t mip=0) const
Definition VTF.cpp:1571
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:1990
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:1786
void removeExtendedFlagsResource()
Definition VTF.cpp:1876
bool opened
Definition VTF.h:496
float bumpMapScale
Definition VTF.h:511
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
std::string getDataAsAuthorInfo() const
Definition VTF.cpp:363
HOT getDataAsHotspotData() const
Definition VTF.cpp:367
std::tuple< uint8_t, uint8_t, uint8_t, uint8_t > getDataAsLODControlInfo() const
Definition VTF.cpp:355
Type type
Definition VTF.h:59
ConvertedData convertData() const
Definition VTF.cpp:296
std::string getDataAsKeyValuesData() const
Definition VTF.cpp:359
int16_t getDataAsAuxCompressionLevel() const
Definition VTF.cpp:371
CompressionMethod getDataAsAuxCompressionMethod() const
Definition VTF.cpp:378
SHT getDataAsParticleSheet() const
Definition VTF.cpp:343
std::variant< std::monostate, SHT, uint32_t, std::tuple< uint8_t, uint8_t, uint8_t, uint8_t >, std::string, HOT > ConvertedData
Definition VTF.h:63
@ FLAG_LOCAL_DATA
Definition VTF.h:56
uint32_t getDataAsExtendedFlags() const
Definition VTF.cpp:351
uint32_t getDataAsCRC() const
Definition VTF.cpp:347
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:389
@ 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_HOTSPOT_DATA
Definition VTF.h:44
Flags flags
Definition VTF.h:60
std::vector< std::byte > getDataAsPalette(uint16_t frame) const
Definition VTF.cpp:335
std::span< std::byte > data
Definition VTF.h:61
uint16_t initialFrameCount
Definition VTF.h:209
ImageConversion::ResizeBounds resizeBounds
Definition VTF.h:208
ImageConversion::ResizeFilter filter
Definition VTF.h:206
ImageConversion::ResizeMethod heightResizeMethod
Definition VTF.h:205
CompressionMethod compressionMethod
Definition VTF.h:219
ImageConversion::ResizeMethod widthResizeMethod
Definition VTF.h:204
ImageFormat outputFormat
Definition VTF.h:202