CommonLibSSE NG
NiGeometryData.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/N/NiBound.h"
4 #include "RE/N/NiObject.h"
5 
6 namespace RE
7 {
8  class NiAdditionalGeometryData;
9  class NiColorA;
10  class NiPoint2;
11  class NiPoint3;
12  class NiTriShapeData;
13  class NiTriStripsData;
14 
15  class NiGeometryData : public NiObject
16  {
17  public:
18  inline static constexpr auto RTTI = RTTI_NiGeometryData;
19  inline static auto Ni_RTTI = NiRTTI_NiGeometryData;
20 
21  enum class DataFlag
22  {
23  kNone = 0x0000,
24  kNDL = 1 << 12,
25  kMax = 1 << 13,
26  kATI = kNDL | kMax,
27  };
28 
29  enum class DirtyFlag
30  {
31  kVertex = 1 << 0,
32  kNormal = 1 << 1,
33  kColor = 1 << 2,
34  kTexture = 1 << 3,
35 
36  kMutable = 0,
37  kStatic = 1 << 14,
38  kVolatile = 1 << 15
39  };
40 
41  enum class KeepFlag
42  {
43  kXYZ = 1 << 0,
44  kNorm = 1 << 1,
45  kColor = 1 << 2,
46  kUV = 1 << 3,
47  kIndices = 1 << 4,
48  kBonedata = 1 << 5,
49 
51  };
52 
53  enum class CompressFlag
54  {
55  kNorm = 1 << 0,
56  kColor = 1 << 1,
57  kUV = 1 << 2,
58  kWeight = 1 << 3,
59  kPosition = 1 << 4,
60 
62  };
63 
64  ~NiGeometryData() override; // 00
65 
66  // override (NiObject)
67  const NiRTTI* GetRTTI() const override; // 02
68  void LoadBinary(NiStream& a_stream) override; // 18
69  void LinkObject(NiStream& a_stream) override; // 19
70  bool RegisterStreamables(NiStream& a_stream) override; // 1A
71  void SaveBinary(NiStream& a_stream) override; // 1B
72  bool IsEqual(NiObject* a_object) override; // 1C
73 
74  // add
75  virtual void SetActiveVertexCount(std::uint16_t a_count); // 25 - { return; }
76  [[nodiscard]] virtual std::uint16_t GetActiveVertexCount() const; // 26 - { return vertices; }
77  virtual NiTriStripsData* AsTriStripsData(); // 27 - { return 0; }
78  virtual NiTriShapeData* AsTriShapeData(); // 28 - { return 0; }
79  virtual void Unk_29(void) = 0; // 29
80 
81  // members
82  std::uint16_t vertices; // 10
83  std::uint16_t id; // 12
86  NiBound bound; // 18
87  NiPoint3* vertex; // 28
88  NiPoint3* normal; // 30
89  NiColorA* color; // 38
90  NiPoint2* texture; // 40
91  std::uint32_t unk48; // 48
92  std::uint32_t unk4C; // 4C
93  std::uint32_t unk50; // 50
94  std::uint32_t unk54; // 54
98  std::uint8_t unk62; // 62
99  std::uint8_t unk63; // 63
100  std::uint8_t unk64; // 64
101  std::uint8_t unk65; // 65
102  bool hasGeoData; // 66
103  std::uint8_t unk67; // 67
104  };
105  static_assert(sizeof(NiGeometryData) == 0x68);
106 }
Definition: NiBound.h:8
Definition: NiColor.h:276
Definition: NiGeometryData.h:16
DataFlag
Definition: NiGeometryData.h:22
const NiRTTI * GetRTTI() const override
std::uint32_t unk54
Definition: NiGeometryData.h:94
std::uint32_t unk48
Definition: NiGeometryData.h:91
virtual void SetActiveVertexCount(std::uint16_t a_count)
virtual NiTriStripsData * AsTriStripsData()
NiPoint3 * normal
Definition: NiGeometryData.h:88
CompressFlag
Definition: NiGeometryData.h:54
std::uint8_t unk65
Definition: NiGeometryData.h:101
KeepFlag
Definition: NiGeometryData.h:42
NiPoint2 * texture
Definition: NiGeometryData.h:90
std::uint8_t unk67
Definition: NiGeometryData.h:103
DirtyFlag
Definition: NiGeometryData.h:30
virtual std::uint16_t GetActiveVertexCount() const
virtual void Unk_29(void)=0
void SaveBinary(NiStream &a_stream) override
std::uint32_t unk4C
Definition: NiGeometryData.h:92
~NiGeometryData() override
std::uint32_t unk50
Definition: NiGeometryData.h:93
NiBound bound
Definition: NiGeometryData.h:86
std::uint16_t vertices
Definition: NiGeometryData.h:82
stl::enumeration< CompressFlag, std::uint8_t > compressFlags
Definition: NiGeometryData.h:97
virtual NiTriShapeData * AsTriShapeData()
stl::enumeration< KeepFlag, std::uint8_t > keepFlags
Definition: NiGeometryData.h:96
static auto Ni_RTTI
Definition: NiGeometryData.h:19
std::uint16_t id
Definition: NiGeometryData.h:83
bool IsEqual(NiObject *a_object) override
std::uint8_t unk63
Definition: NiGeometryData.h:99
NiPointer< NiAdditionalGeometryData > additionalGeomData
Definition: NiGeometryData.h:95
void LoadBinary(NiStream &a_stream) override
std::uint8_t unk64
Definition: NiGeometryData.h:100
stl::enumeration< DirtyFlag, std::uint16_t > dirtyFlags
Definition: NiGeometryData.h:84
std::uint8_t unk62
Definition: NiGeometryData.h:98
static constexpr auto RTTI
Definition: NiGeometryData.h:18
void LinkObject(NiStream &a_stream) override
bool hasGeoData
Definition: NiGeometryData.h:102
bool RegisterStreamables(NiStream &a_stream) override
NiColorA * color
Definition: NiGeometryData.h:89
NiPoint3 * vertex
Definition: NiGeometryData.h:87
stl::enumeration< DataFlag, std::uint16_t > dataFlags
Definition: NiGeometryData.h:85
Definition: NiObject.h:37
Definition: NiPoint2.h:6
Definition: NiPoint3.h:6
Definition: NiRTTI.h:6
Definition: NiStream.h:29
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_NiGeometryData(690432, 398287, 0x1f61ff8)
constexpr REL::VariantID NiRTTI_NiGeometryData(523949, 410529, 0x316beb0)