SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
PPL.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <optional>
5#include <span>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10#include "ImageConversion.h"
11
12namespace vtfpp {
13
14class PPL {
15public:
16 struct Image {
17 uint32_t width;
18 uint32_t height;
19 std::vector<std::byte> data;
20 };
21
22 explicit PPL(uint32_t modelChecksum, ImageFormat format_ = ImageFormat::RGB888, uint32_t version_ = 0);
23
24 explicit PPL(std::span<const std::byte> pplData);
25
26 explicit PPL(const std::string& pplPath);
27
28 [[nodiscard]] explicit operator bool() const;
29
30 [[nodiscard]] uint32_t getVersion() const;
31
32 void setVersion(uint32_t newVersion);
33
34 [[nodiscard]] uint32_t getModelChecksum() const;
35
36 void setModelChecksum(uint32_t newChecksum);
37
38 [[nodiscard]] ImageFormat getFormat() const;
39
40 void setFormat(ImageFormat newFormat);
41
42 [[nodiscard]] bool hasImageForLOD(uint32_t lod) const;
43
44 [[nodiscard]] std::vector<uint32_t> getImageLODs() const;
45
46 [[nodiscard]] const Image* getImageRaw(uint32_t lod = 0) const;
47
48 [[nodiscard]] std::optional<Image> getImageAs(ImageFormat newFormat, uint32_t lod = 0) const;
49
50 [[nodiscard]] std::optional<Image> getImageAsRGB888(uint32_t lod = 0) const;
51
52 bool setImage(std::span<const std::byte> imageData, ImageFormat format_, uint32_t width, uint32_t height, uint32_t lod = 0);
53
54 bool setImage(std::span<const std::byte> imageData, ImageFormat format_, uint32_t width, uint32_t height, uint32_t resizedWidth, uint32_t resizedHeight, uint32_t lod = 0, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
55
56 bool setImage(const std::string& imagePath, uint32_t lod = 0);
57
58 bool setImage(const std::string& imagePath, uint32_t resizedWidth, uint32_t resizedHeight, uint32_t lod = 0, ImageConversion::ResizeFilter filter = ImageConversion::ResizeFilter::DEFAULT);
59
60 [[nodiscard]] std::vector<std::byte> saveImageToFile(uint32_t lod = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const;
61
62 bool saveImageToFile(const std::string& imagePath, uint32_t lod = 0, ImageConversion::FileFormat fileFormat = ImageConversion::FileFormat::DEFAULT) const; // NOLINT(*-use-nodiscard)
63
64 [[nodiscard]] std::vector<std::byte> bake();
65
66 bool bake(const std::string& pplPath);
67
68protected:
69 uint32_t version{};
70 uint32_t checksum{};
72
73 std::unordered_map<uint32_t, Image> images;
74};
75
76} // namespace vtfpp
Definition: PPL.h:14
ImageFormat format
Definition: PPL.h:71
ImageFormat getFormat() const
Definition: PPL.cpp:60
const Image * getImageRaw(uint32_t lod=0) const
Definition: PPL.cpp:80
std::vector< std::byte > saveImageToFile(uint32_t lod=0, ImageConversion::FileFormat fileFormat=ImageConversion::FileFormat::DEFAULT) const
Definition: PPL.cpp:166
std::optional< Image > getImageAsRGB888(uint32_t lod=0) const
Definition: PPL.cpp:99
bool hasImageForLOD(uint32_t lod) const
Definition: PPL.cpp:71
void setFormat(ImageFormat newFormat)
Definition: PPL.cpp:64
std::vector< std::byte > bake()
Definition: PPL.cpp:180
uint32_t checksum
Definition: PPL.h:70
bool setImage(std::span< const std::byte > imageData, ImageFormat format_, uint32_t width, uint32_t height, uint32_t lod=0)
Definition: PPL.cpp:103
uint32_t getVersion() const
Definition: PPL.cpp:44
uint32_t version
Definition: PPL.h:69
std::unordered_map< uint32_t, Image > images
Definition: PPL.h:73
std::optional< Image > getImageAs(ImageFormat newFormat, uint32_t lod=0) const
Definition: PPL.cpp:87
std::vector< uint32_t > getImageLODs() const
Definition: PPL.cpp:75
void setVersion(uint32_t newVersion)
Definition: PPL.cpp:48
uint32_t getModelChecksum() const
Definition: PPL.cpp:52
void setModelChecksum(uint32_t newChecksum)
Definition: PPL.cpp:56
ImageFormat
Definition: ImageFormats.h:7
uint32_t width
Definition: PPL.h:17
uint32_t height
Definition: PPL.h:18
std::vector< std::byte > data
Definition: PPL.h:19