Cogs.Core
CogsBin1.h
1#pragma once
2#include <glm/glm.hpp>
3
4
5namespace Cogs::Core::CogsBin1
6{
7 const uint32_t CogsHeaderMagic = 0xC065C065;
8 const uint32_t CogsNoIndex = uint32_t(-1);
9 const uint32_t CogsNoMaterialIndex = uint16_t(0xFFFF);
10 const uint32_t CogsModelVersion = 1;
11 const size_t CogsSectionAlignment = 16;
12
14 {
15 uint32_t magic;
16 uint32_t version;
17 uint64_t length;
18 };
19
21 {
22 uint32_t firstMetadataProperty;
23 uint32_t numMetadataProperties;
24
25 uint32_t numStringBytes;
26 uint32_t numStrings;
27 uint32_t numPropertyBytes;
28 uint32_t numProperties;
29 uint32_t numStreams;
30 uint32_t numMeshes;
31 uint32_t numMaterials;
32 uint32_t numNodes;
33
34 uint64_t dataSize;
35 };
36
37 static_assert(sizeof(CogsHeader) + sizeof(CogsDescriptor) == 64);
38
40 {
41 enum EFormat
42 {
43 Unknown = -1,
44 Indexes32 = -2,
45 Indexes16 = -3,
46 Position3f = 0,
47 Normals3f = 1,
48 Tangent3f = 2,
49 TexCoord2f = 3,
50 Color4f = 4,
51 Pos3fNorm3fTex2f = 5,
52 };
53 };
54
56 {
57 int32_t format;
58 uint32_t pad;
59 uint64_t offset;
60 uint64_t size;
61 };
62
63 static_assert(alignof(CogsStream) == 8);
64
66 {
67 enum EFlags
68 {
69 None = 0,
70 ClockwiseWinding = 1 << 0,
71 };
72 };
73
75 {
76 enum EType
77 {
78 TriangleList,
79 LineList,
80 PointList
81 };
82 };
83
84 struct CogsMesh
85 {
86 uint32_t nameIndex;
87 uint16_t primitiveTopology;
88 uint16_t flags;
89 uint32_t firstStream;
90 uint32_t lastStream;
91 glm::vec3 boundsMin;
92 glm::vec3 boundsMax;
93 };
94
95 static_assert(alignof(CogsMesh) == 4);
96
98 {
99 //TODO:
100 // Finalize format enumeration
101
102 enum EFormat
103 {
104 Float,
105 Float2,
106 Float3,
107 Float4,
108 String,
109 Variant,
110 Permutation
111 };
112 };
113
115 {
116 enum EType
117 {
118 String,
119 Index
120 };
121 };
122
124 {
125 uint16_t keyType;
126 uint16_t valueType;
127 uint32_t key;
128 uint32_t value;
129 };
130
131 static_assert(alignof(CogsProperty) == 4);
132
134 {
135 uint32_t type;
136 uint32_t flags;
137
138 uint32_t firstProperty;
139 uint32_t lastProperty;
140 };
141
142 static_assert(alignof(CogsMaterial) == 4);
143 static_assert(sizeof(CogsMaterial) % 16 == 0);
144
146 {
147 glm::vec3 min;
148 glm::vec3 max;
149 };
150
151 struct CogsNode
152 {
153 uint32_t parent;
154 uint32_t nameIndex;
155 uint32_t meshIndex;
156 uint16_t materialIndex;
157 uint16_t flags;
158
159 uint32_t startIndex;
160 uint32_t vertexCount;
161
162 uint32_t boundsIndex;
163 uint32_t pad;
164
165 glm::vec4 translation;
166 glm::quat rotation;
167 glm::vec4 scale;
168 };
169
170 static_assert(alignof(CogsNode) == 4);
171 static_assert(sizeof(CogsNode) % 16 == 0);
172
174 {
175 uint32_t start;
176 uint32_t length;
177 };
178}