2
3
4
5
12 VkFormat
GltfHelper::GetFormat(
const std::string& str,
int id)
20 case 5120:
return VK_FORMAT_R8_SINT;
21 case 5121:
return VK_FORMAT_R8_UINT;
22 case 5122:
return VK_FORMAT_R16_SINT;
23 case 5123:
return VK_FORMAT_R16_UINT;
24 case 5124:
return VK_FORMAT_R32_SINT;
25 case 5125:
return VK_FORMAT_R32_UINT;
26 case 5126:
return VK_FORMAT_R32_SFLOAT;
29 else if (str ==
"VEC2")
33 case 5120:
return VK_FORMAT_R8G8_SINT;
34 case 5121:
return VK_FORMAT_R8G8_UINT;
35 case 5122:
return VK_FORMAT_R16G16_SINT;
36 case 5123:
return VK_FORMAT_R16G16_UINT;
37 case 5124:
return VK_FORMAT_R32G32_SINT;
38 case 5125:
return VK_FORMAT_R32G32_UINT;
39 case 5126:
return VK_FORMAT_R32G32_SFLOAT;
42 else if (str ==
"VEC3")
46 case 5120:
return VK_FORMAT_UNDEFINED;
47 case 5121:
return VK_FORMAT_UNDEFINED;
48 case 5122:
return VK_FORMAT_UNDEFINED;
49 case 5123:
return VK_FORMAT_UNDEFINED;
50 case 5124:
return VK_FORMAT_R32G32B32_SINT;
51 case 5125:
return VK_FORMAT_R32G32B32_UINT;
52 case 5126:
return VK_FORMAT_R32G32B32_SFLOAT;
55 else if (str ==
"VEC4")
59 case 5120:
return VK_FORMAT_R8G8B8A8_SINT;
60 case 5121:
return VK_FORMAT_R8G8B8A8_UINT;
61 case 5122:
return VK_FORMAT_R16G16B16A16_SINT;
62 case 5123:
return VK_FORMAT_R16G16B16A16_UINT;
63 case 5124:
return VK_FORMAT_R32G32B32A32_SINT;
64 case 5125:
return VK_FORMAT_R32G32B32A32_UINT;
65 case 5126:
return VK_FORMAT_R32G32B32A32_SFLOAT;
69 return VK_FORMAT_UNDEFINED;
78 case VK_FORMAT_R8_SINT:
return 1;
79 case VK_FORMAT_R8_UINT:
return 1;
80 case VK_FORMAT_R16_SINT:
return 2;
81 case VK_FORMAT_R16_UINT:
return 2;
82 case VK_FORMAT_R32_SINT:
return 4;
83 case VK_FORMAT_R32_UINT:
return 4;
84 case VK_FORMAT_R32_SFLOAT:
return 4;
86 case VK_FORMAT_R8G8_SINT:
return 2 * 1;
87 case VK_FORMAT_R8G8_UINT:
return 2 * 1;
88 case VK_FORMAT_R16G16_SINT:
return 2 * 2;
89 case VK_FORMAT_R16G16_UINT:
return 2 * 2;
90 case VK_FORMAT_R32G32_SINT:
return 2 * 4;
91 case VK_FORMAT_R32G32_UINT:
return 2 * 4;
92 case VK_FORMAT_R32G32_SFLOAT:
return 2 * 4;
94 case VK_FORMAT_UNDEFINED:
return 0;
95 case VK_FORMAT_R32G32B32_SINT:
return 3 * 4;
96 case VK_FORMAT_R32G32B32_UINT:
return 3 * 4;
97 case VK_FORMAT_R32G32B32_SFLOAT:
return 3 * 4;
99 case VK_FORMAT_R8G8B8A8_SINT:
return 4 * 1;
100 case VK_FORMAT_R8G8B8A8_UINT:
return 4 * 1;
101 case VK_FORMAT_R16G16B16A16_SINT:
return 4 * 2;
102 case VK_FORMAT_R16G16B16A16_UINT:
return 4 * 2;
103 case VK_FORMAT_R32G32B32A32_SINT:
return 4 * 4;
104 case VK_FORMAT_R32G32B32A32_UINT:
return 4 * 4;
105 case VK_FORMAT_R32G32B32A32_SFLOAT:
return 4 * 4;
133 if (str ==
"SCALAR")
return 1;
134 else if (str ==
"VEC2")
return 2;
135 else if (str ==
"VEC3")
return 3;
136 else if (str ==
"VEC4")
return 4;
137 else if (str ==
"MAT4")
return 4 * 4;
147 if (isdigit(attribute.back()))
149 *semanticIndex = attribute.back() -
'0';
151 attribute.pop_back();
152 if (attribute.back() ==
'_')
154 attribute.pop_back();
158 *semanticName = attribute;
161 glm::vec4
GltfHelper::GetVector(
const Json::array_t& accessor)
165 if (accessor.size() == 0)
167 return glm::vec4(0.0f);
169 else if(accessor.size() == 1)
171 return glm::vec4(accessor[0], 0.0f, 0.0f, 0.0f);
173 else if (accessor.size() == 2)
175 return glm::vec4(accessor[0], accessor[1], 0.0f, 0.0f);
177 else if (accessor.size() == 3)
179 return glm::vec4(accessor[0], accessor[1], accessor[2], 0.0f);
183 return glm::vec4(accessor[0], accessor[1], accessor[2], accessor[3]);
187 glm::mat4
GltfHelper::GetMatrix(
const Json::array_t& accessor)
192 glm::vec4(accessor[0], accessor[1], accessor[2], accessor[3]),
193 glm::vec4(accessor[4], accessor[5], accessor[6], accessor[7]),
194 glm::vec4(accessor[8], accessor[9], accessor[10], accessor[11]),
195 glm::vec4(accessor[12], accessor[13], accessor[14], accessor[15])
199 std::string
GltfHelper::GetElementString(
const Json::object_t& root,
const char* path,
const std::string& pDefault)
203 return GetElement<std::string>(&root, path, pDefault);
206 bool GltfHelper::GetElementBoolean(
const Json::object_t& root,
const char* path,
bool pDefault)
210 return GetElement<
bool>(&root, path, pDefault);
213 float GltfHelper::GetElementFloat(
const Json::object_t& root,
const char* path,
float pDefault)
217 return GetElement<
float>(&root, path, pDefault);
220 int GltfHelper::GetElementInt(
const Json::object_t& root,
const char* path,
int pDefault)
224 return GetElement<
int>(&root, path, pDefault);
227 GltfHelper::Json::array_t
GltfHelper::GetElementJsonArray(
const Json::object_t& root,
const char* path, Json::array_t pDefault)
231 return GetElement<Json::array_t>(&root, path, pDefault);
234 glm::vec4
GltfHelper::GetElementVector(Json::object_t& root,
const char* path, glm::vec4 pDefault)
238 if (root.find(path) != root.end() && !root[path].is_null())
240 return GetVector(root[path].get<Json::array_t>());
#define SPICES_PROFILE_ZONE
static int GetDimensions(const std::string &str)
Get Variable Type dimensions.
static void SplitGltfAttribute(std::string attribute, std::string *semanticName, uint32_t *semanticIndex)
Split digital number in attribute.
static int GetFormatSize(int id)
Get Variable Type bytes.
Static functions to help resolve Gltf json.