@@ -221,31 +221,32 @@ RenderMaterial MDLPart::createMaterial(const physis_Material &material)
221
221
auto shpkData = physis_gamedata_extract_file (data, shpkPath.c_str ());
222
222
if (shpkData.data != nullptr ) {
223
223
newMaterial.shaderPackage = physis_parse_shpk (shpkData);
224
+ if (newMaterial.shaderPackage .p_ptr ) {
225
+ // create the material parameters for this shader package
226
+ newMaterial.materialBuffer =
227
+ renderer->device ().createBuffer (newMaterial.shaderPackage .material_parameters_size , VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
228
+ renderer->device ().nameBuffer (newMaterial.materialBuffer , " g_MaterialParameter" ); // TODO: add material name
224
229
225
- // create the material parameters for this shader package
226
- newMaterial.materialBuffer =
227
- renderer->device ().createBuffer (newMaterial.shaderPackage .material_parameters_size , VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
228
- renderer->device ().nameBuffer (newMaterial.materialBuffer , " g_MaterialParameter" ); // TODO: add material name
230
+ // assumed to be floats, maybe not always true?
231
+ std::vector<float > buffer (newMaterial.shaderPackage .material_parameters_size / sizeof (float ));
229
232
230
- // assumed to be floats, maybe not always true?
231
- std::vector<float > buffer (newMaterial.shaderPackage .material_parameters_size / sizeof (float ));
233
+ // copy the material data
234
+ for (uint32_t i = 0 ; i < newMaterial.shaderPackage .num_material_parameters ; i++) {
235
+ auto param = newMaterial.shaderPackage .material_parameters [i];
232
236
233
- // copy the material data
234
- for (uint32_t i = 0 ; i < newMaterial.shaderPackage .num_material_parameters ; i++) {
235
- auto param = newMaterial.shaderPackage .material_parameters [i];
237
+ for (uint32_t j = 0 ; j < newMaterial.mat .num_constants ; j++) {
238
+ auto constant = newMaterial.mat .constants [j];
236
239
237
- for (uint32_t j = 0 ; j < newMaterial.mat .num_constants ; j++) {
238
- auto constant = newMaterial.mat .constants [j];
239
-
240
- if (constant.id == param.id ) {
241
- for (uint32_t z = 0 ; z < constant.num_values ; z++) {
242
- buffer[(param.byte_offset / sizeof (float )) + z] = constant.values [z];
240
+ if (constant.id == param.id ) {
241
+ for (uint32_t z = 0 ; z < constant.num_values ; z++) {
242
+ buffer[(param.byte_offset / sizeof (float )) + z] = constant.values [z];
243
+ }
243
244
}
244
245
}
245
246
}
246
- }
247
247
248
- renderer->device ().copyToBuffer (newMaterial.materialBuffer , buffer.data (), buffer.size () * sizeof (float ));
248
+ renderer->device ().copyToBuffer (newMaterial.materialBuffer , buffer.data (), buffer.size () * sizeof (float ));
249
+ }
249
250
}
250
251
}
251
252
0 commit comments