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