SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Toggle main menu visibility
Loading...
Searching...
No Matches
VTX.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <array>
4
#include <span>
5
6
#include "
MDL.h
"
7
8
namespace
mdlpp::VTX
{
9
10
struct
MaterialReplacement
{
11
int16_t
materialID
;
12
//int32_t replacementMaterialNameOffset;
13
std::string
newMaterialPath
;
14
};
15
16
struct
BoneStateChange
{
17
int32_t
hardwareID
;
18
int32_t
newBoneID
;
19
};
20
21
struct
Vertex
{
22
std::array<uint8_t, 3>
boneWeightIndex
;
23
uint8_t
boneCount
;
24
uint16_t
meshVertexID
;
25
std::array<int8_t, 3>
boneID
;
26
};
27
28
struct
Strip
{
29
enum
Flags
: uint8_t {
30
FLAG_NONE
= 0,
31
FLAG_IS_TRILIST
= 1 << 0,
32
FLAG_IS_TRISTRIP
= 1 << 1,
33
};
34
35
//int32_t indicesCount;
36
int32_t
indicesOffset
= 0;
// Offset from the start of the strip group indices
37
std::span<uint16_t>
indices
;
38
39
//int32_t verticesCount;
40
int32_t
verticesOffset
= 0;
// Offset from the start of the strip group vertices
41
std::span<Vertex>
vertices
;
42
43
int16_t
boneCount
= 0;
44
Flags
flags
=
FLAG_NONE
;
45
46
//int32_t boneStateChangeCount;
47
//int32_t boneStateChangeOffset;
48
std::vector<BoneStateChange>
boneStateChanges
;
49
50
//int32_t numTopologyIndices;
51
int32_t
topologyIndicesOffset
= 0;
52
std::span<uint16_t>
topologyIndices
;
53
};
54
SOURCEPP_BITFLAGS_ENUM
(
Strip::Flags
)
55
56
struct
StripGroup
{
57
enum
Flags
: uint8_t {
58
FLAG_NONE
= 0,
59
FLAG_IS_FLEXED
= 1 << 0,
60
FLAG_IS_HW_SKINNED
= 1 << 1,
61
FLAG_IS_DELTA_FLEXED
= 1 << 2,
62
FLAG_SUPPRESS_HW_MORPH
= 1 << 3,
63
};
64
65
//int32_t vertexCount;
66
//int32_t vertexOffset;
67
std::vector<Vertex>
vertices
;
68
69
//int32_t indexCount;
70
//int32_t indexOffset;
71
std::vector<uint16_t>
indices
;
72
73
//int32_t stripCount;
74
//int32_t stripOffset;
75
std::vector<Strip>
strips
;
76
77
Flags
flags
;
78
79
//int32_t numTopologyIndices;
80
//int32_t topologyOffset;
81
std::vector<uint16_t>
topologyIndices
;
82
};
83
SOURCEPP_BITFLAGS_ENUM
(
StripGroup::Flags
)
84
85
struct
Mesh
{
86
enum
Flags
: uint8_t {
87
FLAG_NONE
= 0,
88
FLAG_IS_TEETH
= 1 << 0,
89
FLAG_IS_EYES
= 1 << 1,
90
};
91
92
//int32_t stripGroupCount;
93
//int32_t stripGroupHeaderOffset;
94
std::vector<StripGroup>
stripGroups
;
95
96
Flags
flags
;
97
};
98
SOURCEPP_BITFLAGS_ENUM
(
Mesh::Flags
)
99
100
struct
ModelLOD
{
101
//int32_t meshCount;
102
//int32_t meshOffset;
103
std::vector<Mesh>
meshes
;
104
105
float
switchDistance
;
106
};
107
108
struct
Model
{
109
//int32_t LODCount;
110
//int32_t LODOffset;
111
std::vector<ModelLOD>
modelLODs
;
112
};
113
114
struct
BodyPart
{
115
//int32_t modelCount;
116
//int32_t modelOffset;
117
std::vector<Model>
models
;
118
};
119
120
struct
VTX
{
121
enum class
HasTopologyIndices
{
122
AUTOMATIC
,
123
NO
,
124
YES
,
125
};
126
127
[[nodiscard]]
bool
open
(
const
std::byte* data, std::size_t size,
const
MDL::MDL
& mdl,
HasTopologyIndices
hasTopologyIndices =
HasTopologyIndices::AUTOMATIC
);
128
129
int32_t
version
;
130
int32_t
vertexCacheSize
;
131
uint16_t
maxBonesPerStrip
;
132
uint16_t
maxBonesPerTriangle
;
133
int32_t
maxBonesPerVertex
;
134
//int32_t checksum;
135
int32_t
numLODs
;
136
137
//int32_t materialReplacementListOffset;
138
std::array<std::vector<MaterialReplacement>,
MAX_LOD_COUNT
>
materialReplacementLists
;
139
140
//int32_t bodyPartCount;
141
//int32_t bodyPartOffset;
142
std::vector<BodyPart>
bodyParts
;
143
};
144
145
}
// namespace mdlpp::VTX
MDL.h
SOURCEPP_BITFLAGS_ENUM
#define SOURCEPP_BITFLAGS_ENUM(Enum)
Defines bitwise operators for an enum or enum class.
Definition
Macros.h:29
mdlpp::VTX
Definition
VTX.h:8
mdlpp::MAX_LOD_COUNT
constexpr int MAX_LOD_COUNT
Definition
Generic.h:11
mdlpp::MDL::MDL
Definition
MDL.h:681
mdlpp::VTX::BodyPart
Definition
VTX.h:114
mdlpp::VTX::BodyPart::models
std::vector< Model > models
Definition
VTX.h:117
mdlpp::VTX::BoneStateChange
Definition
VTX.h:16
mdlpp::VTX::BoneStateChange::hardwareID
int32_t hardwareID
Definition
VTX.h:17
mdlpp::VTX::BoneStateChange::newBoneID
int32_t newBoneID
Definition
VTX.h:18
mdlpp::VTX::MaterialReplacement
Definition
VTX.h:10
mdlpp::VTX::MaterialReplacement::newMaterialPath
std::string newMaterialPath
Definition
VTX.h:13
mdlpp::VTX::MaterialReplacement::materialID
int16_t materialID
Definition
VTX.h:11
mdlpp::VTX::Mesh
Definition
VTX.h:85
mdlpp::VTX::Mesh::stripGroups
std::vector< StripGroup > stripGroups
Definition
VTX.h:94
mdlpp::VTX::Mesh::flags
Flags flags
Definition
VTX.h:96
mdlpp::VTX::Mesh::Flags
Flags
Definition
VTX.h:86
mdlpp::VTX::Mesh::FLAG_IS_TEETH
@ FLAG_IS_TEETH
Definition
VTX.h:88
mdlpp::VTX::Mesh::FLAG_IS_EYES
@ FLAG_IS_EYES
Definition
VTX.h:89
mdlpp::VTX::Mesh::FLAG_NONE
@ FLAG_NONE
Definition
VTX.h:87
mdlpp::VTX::ModelLOD
Definition
VTX.h:100
mdlpp::VTX::ModelLOD::meshes
std::vector< Mesh > meshes
Definition
VTX.h:103
mdlpp::VTX::ModelLOD::switchDistance
float switchDistance
Definition
VTX.h:105
mdlpp::VTX::Model
Definition
VTX.h:108
mdlpp::VTX::Model::modelLODs
std::vector< ModelLOD > modelLODs
Definition
VTX.h:111
mdlpp::VTX::StripGroup
Definition
VTX.h:56
mdlpp::VTX::StripGroup::flags
Flags flags
Definition
VTX.h:77
mdlpp::VTX::StripGroup::topologyIndices
std::vector< uint16_t > topologyIndices
Definition
VTX.h:81
mdlpp::VTX::StripGroup::Flags
Flags
Definition
VTX.h:57
mdlpp::VTX::StripGroup::FLAG_IS_FLEXED
@ FLAG_IS_FLEXED
Definition
VTX.h:59
mdlpp::VTX::StripGroup::FLAG_SUPPRESS_HW_MORPH
@ FLAG_SUPPRESS_HW_MORPH
Definition
VTX.h:62
mdlpp::VTX::StripGroup::FLAG_IS_DELTA_FLEXED
@ FLAG_IS_DELTA_FLEXED
Definition
VTX.h:61
mdlpp::VTX::StripGroup::FLAG_IS_HW_SKINNED
@ FLAG_IS_HW_SKINNED
Definition
VTX.h:60
mdlpp::VTX::StripGroup::FLAG_NONE
@ FLAG_NONE
Definition
VTX.h:58
mdlpp::VTX::StripGroup::indices
std::vector< uint16_t > indices
Definition
VTX.h:71
mdlpp::VTX::StripGroup::strips
std::vector< Strip > strips
Definition
VTX.h:75
mdlpp::VTX::StripGroup::vertices
std::vector< Vertex > vertices
Definition
VTX.h:67
mdlpp::VTX::Strip
Definition
VTX.h:28
mdlpp::VTX::Strip::indicesOffset
int32_t indicesOffset
Definition
VTX.h:36
mdlpp::VTX::Strip::verticesOffset
int32_t verticesOffset
Definition
VTX.h:40
mdlpp::VTX::Strip::indices
std::span< uint16_t > indices
Definition
VTX.h:37
mdlpp::VTX::Strip::boneStateChanges
std::vector< BoneStateChange > boneStateChanges
Definition
VTX.h:48
mdlpp::VTX::Strip::topologyIndices
std::span< uint16_t > topologyIndices
Definition
VTX.h:52
mdlpp::VTX::Strip::boneCount
int16_t boneCount
Definition
VTX.h:43
mdlpp::VTX::Strip::flags
Flags flags
Definition
VTX.h:44
mdlpp::VTX::Strip::Flags
Flags
Definition
VTX.h:29
mdlpp::VTX::Strip::FLAG_IS_TRILIST
@ FLAG_IS_TRILIST
Definition
VTX.h:31
mdlpp::VTX::Strip::FLAG_NONE
@ FLAG_NONE
Definition
VTX.h:30
mdlpp::VTX::Strip::FLAG_IS_TRISTRIP
@ FLAG_IS_TRISTRIP
Definition
VTX.h:32
mdlpp::VTX::Strip::topologyIndicesOffset
int32_t topologyIndicesOffset
Definition
VTX.h:51
mdlpp::VTX::Strip::vertices
std::span< Vertex > vertices
Definition
VTX.h:41
mdlpp::VTX::VTX
Definition
VTX.h:120
mdlpp::VTX::VTX::HasTopologyIndices
HasTopologyIndices
Definition
VTX.h:121
mdlpp::VTX::VTX::HasTopologyIndices::AUTOMATIC
@ AUTOMATIC
Definition
VTX.h:122
mdlpp::VTX::VTX::HasTopologyIndices::YES
@ YES
Definition
VTX.h:124
mdlpp::VTX::VTX::HasTopologyIndices::NO
@ NO
Definition
VTX.h:123
mdlpp::VTX::VTX::numLODs
int32_t numLODs
Definition
VTX.h:135
mdlpp::VTX::VTX::vertexCacheSize
int32_t vertexCacheSize
Definition
VTX.h:130
mdlpp::VTX::VTX::open
bool open(const std::byte *data, std::size_t size, const MDL::MDL &mdl, HasTopologyIndices hasTopologyIndices=HasTopologyIndices::AUTOMATIC)
Definition
VTX.cpp:12
mdlpp::VTX::VTX::materialReplacementLists
std::array< std::vector< MaterialReplacement >, MAX_LOD_COUNT > materialReplacementLists
Definition
VTX.h:138
mdlpp::VTX::VTX::version
int32_t version
Definition
VTX.h:129
mdlpp::VTX::VTX::bodyParts
std::vector< BodyPart > bodyParts
Definition
VTX.h:142
mdlpp::VTX::VTX::maxBonesPerTriangle
uint16_t maxBonesPerTriangle
Definition
VTX.h:132
mdlpp::VTX::VTX::maxBonesPerVertex
int32_t maxBonesPerVertex
Definition
VTX.h:133
mdlpp::VTX::VTX::maxBonesPerStrip
uint16_t maxBonesPerStrip
Definition
VTX.h:131
mdlpp::VTX::Vertex
Definition
VTX.h:21
mdlpp::VTX::Vertex::boneWeightIndex
std::array< uint8_t, 3 > boneWeightIndex
Definition
VTX.h:22
mdlpp::VTX::Vertex::meshVertexID
uint16_t meshVertexID
Definition
VTX.h:24
mdlpp::VTX::Vertex::boneCount
uint8_t boneCount
Definition
VTX.h:23
mdlpp::VTX::Vertex::boneID
std::array< int8_t, 3 > boneID
Definition
VTX.h:25
include
mdlpp
structs
VTX.h
Generated on
for SourcePP by
1.17.0