Skip to content

Commit 4a9769c

Browse files
committed
Merge changes
2 parents 3ab1866 + 570d0e2 commit 4a9769c

36 files changed

+623
-538
lines changed

examples_tests/06.MeshLoaders/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ int main()
6565

6666
asset::IAssetLoader::SAssetLoadParams lp;
6767
auto meshes_bundle = am->getAsset("sponza.obj", lp);
68-
assert(!meshes_bundle.isEmpty());
68+
assert(!meshes_bundle.getContents().empty());
6969

7070
metaOBJ = meshes_bundle.getMetadata()->selfCast<const asset::COBJMetadata>();
7171

@@ -92,7 +92,7 @@ int main()
9292

9393
size_t neededDS1UBOsz = 0ull;
9494
{
95-
for (const auto& shdrIn : pipelineMetadata->getRequiredShaderInputs())
95+
for (const auto& shdrIn : pipelineMetadata->m_inputSemantics)
9696
if (shdrIn.descriptorSection.type==asset::IRenderpassIndependentPipelineMetadata::ShaderInput::ET_UNIFORM_BUFFER && shdrIn.descriptorSection.uniformBufferObject.set==1u && shdrIn.descriptorSection.uniformBufferObject.binding==ds1UboBinding)
9797
neededDS1UBOsz = std::max<size_t>(neededDS1UBOsz, shdrIn.descriptorSection.uniformBufferObject.relByteoffset+shdrIn.descriptorSection.uniformBufferObject.bytesize);
9898
}
@@ -140,7 +140,7 @@ int main()
140140
camera->render();
141141

142142
core::vector<uint8_t> uboData(gpuubo->getSize());
143-
for (const auto& shdrIn : pipelineMetadata->getRequiredShaderInputs())
143+
for (const auto& shdrIn : pipelineMetadata->m_inputSemantics)
144144
{
145145
if (shdrIn.descriptorSection.type==asset::IRenderpassIndependentPipelineMetadata::ShaderInput::ET_UNIFORM_BUFFER && shdrIn.descriptorSection.uniformBufferObject.set==1u && shdrIn.descriptorSection.uniformBufferObject.binding==ds1UboBinding)
146146
{

examples_tests/18.MitsubaLoader/main.cpp

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -383,16 +383,12 @@ int main()
383383
break;
384384
}
385385

386-
386+
//scene bound
387+
core::aabbox3df sceneBound(FLT_MAX,FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX,-FLT_MAX);
387388
//point lights
388389
core::vector<SLight> lights;
389-
core::vector<const ext::MitsubaLoader::IMeshMetadata*> meshmetas;
390-
meshmetas.reserve(cpumeshes.size());
391390
for (const auto& cpumesh : cpumeshes)
392391
{
393-
meshmetas.push_back(static_cast<const ext::MitsubaLoader::IMeshMetadata*>(cpumesh->getMetadata()));
394-
const auto& instances = meshmetas.back()->getInstances();
395-
396392
auto computeAreaAndAvgPos = [](const asset::ICPUMeshBuffer* mb, const core::matrix3x4SIMD& tform, core::vectorSIMDf& _outAvgPos) {
397393
uint32_t triCount = 0u;
398394
asset::IMeshManipulator::getPolyCount(triCount, mb);
@@ -422,22 +418,27 @@ int main()
422418

423419
return 0.5f*core::length(differentialElementCrossProdcut).x;
424420
};
425-
for (const auto& inst : instances)
421+
422+
const auto* mesh_meta = globalMeta->getAssetSpecificMetadata(cpumesh.get());
423+
auto auxInstanceDataIt = mesh_meta->m_instanceAuxData.begin();
424+
for (const auto& inst : mesh_meta->m_instances)
426425
{
427-
if (inst.emitter.type==ext::MitsubaLoader::CElementEmitter::AREA)
426+
sceneBound.addInternalBox(core::transformBoxEx(cpumesh->getBoundingBox(),inst.worldTform));
427+
if (auxInstanceDataIt->frontEmitter.type==ext::MitsubaLoader::CElementEmitter::AREA)
428428
{
429429
core::vectorSIMDf pos;
430430
assert(cpumesh->getMeshBuffers().size()==1u);
431-
const float area = computeAreaAndAvgPos(cpumesh->getMeshBuffers().begin()[0], inst.tform, pos);
431+
const float area = computeAreaAndAvgPos(cpumesh->getMeshBuffers().begin()[0], inst.worldTform, pos);
432432
assert(area>0.f);
433-
inst.tform.pseudoMulWith4x1(pos);
433+
inst.worldTform.pseudoMulWith4x1(pos);
434434

435435
SLight l;
436-
l.intensity = inst.emitter.area.radiance*area*2.f*core::PI<float>();
436+
l.intensity = auxInstanceDataIt->frontEmitter.area.radiance*area*2.f*core::PI<float>();
437437
l.position = pos;
438438

439439
lights.push_back(l);
440440
}
441+
auxInstanceDataIt++;
441442
}
442443
}
443444

@@ -482,26 +483,10 @@ int main()
482483
}
483484
modifiedShaders.clear();
484485

485-
core::aabbox3df sceneBound;
486-
auto gpumeshes = driver->getGPUObjectsFromAssets(cpumeshes.data(), cpumeshes.data()+cpumeshes.size());
487-
{
488-
auto metait = meshmetas.begin();
489-
for (auto gpuit = gpumeshes->begin(); gpuit != gpumeshes->end(); gpuit++, metait++)
490-
{
491-
auto* meta = *metait;
492-
const auto* meshmeta = static_cast<const ext::MitsubaLoader::IMeshMetadata*>(meta);
493-
const auto& instances = meshmeta->getInstances();
494486

495-
auto bb = (*gpuit)->getBoundingBox();
496-
for (const auto& inst : instances)
497-
{
498-
sceneBound.addInternalBox(core::transformBoxEx(bb, inst.tform));
499-
}
500-
}
501-
}
487+
auto gpumeshes = driver->getGPUObjectsFromAssets(cpumeshes.data(), cpumeshes.data()+cpumeshes.size());
502488

503489
auto gpuds0 = driver->getGPUObjectsFromAssets(&cpuds0.get(), &cpuds0.get()+1)->front();
504-
505490
auto gpuds1layout = driver->getGPUObjectsFromAssets(&ds1layout, &ds1layout+1)->front();
506491

507492
auto gpuubo = driver->createDeviceLocalGPUBufferOnDedMem(sizeof(asset::SBasicViewParameters));

examples_tests/20.Megatexture/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ int main()
446446

447447
size_t neededDS1UBOsz = 0ull;
448448
{
449-
for (const auto& shdrIn : pipelineMetadata->getRequiredShaderInputs())
449+
for (const auto& shdrIn : pipelineMetadata->m_inputSemantics)
450450
if (shdrIn.descriptorSection.type==asset::IRenderpassIndependentPipelineMetadata::ShaderInput::ET_UNIFORM_BUFFER && shdrIn.descriptorSection.uniformBufferObject.set==1u && shdrIn.descriptorSection.uniformBufferObject.binding==ds1UboBinding)
451451
neededDS1UBOsz = std::max<size_t>(neededDS1UBOsz, shdrIn.descriptorSection.uniformBufferObject.relByteoffset+shdrIn.descriptorSection.uniformBufferObject.bytesize);
452452
}
@@ -518,7 +518,7 @@ int main()
518518
camera->render();
519519

520520
core::vector<uint8_t> uboData(gpuubo->getSize());
521-
for (const auto& shdrIn : pipelineMetadata->getRequiredShaderInputs())
521+
for (const auto& shdrIn : pipelineMetadata->m_inputSemantics)
522522
{
523523
if (shdrIn.descriptorSection.type==asset::IRenderpassIndependentPipelineMetadata::ShaderInput::ET_UNIFORM_BUFFER && shdrIn.descriptorSection.uniformBufferObject.set==1u && shdrIn.descriptorSection.uniformBufferObject.binding==ds1UboBinding)
524524
{

examples_tests/21.DynamicTextureIndexing/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ int main()
5757

5858
asset::IAssetLoader::SAssetLoadParams lp;
5959
auto meshes_bundle = am->getAsset("sponza.obj", lp);
60-
assert(!meshes_bundle.isEmpty());
60+
assert(!meshes_bundle.getContents().empty());
6161
auto mesh = meshes_bundle.getContents().begin()[0];
6262
auto mesh_raw = static_cast<asset::ICPUMesh*>(mesh.get());
6363

examples_tests/22.RaytracedAO/Renderer.cpp

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -163,21 +163,13 @@ Renderer::~Renderer()
163163
Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& meshes)
164164
{
165165
InitializationData retval;
166-
167-
auto getInstances = [&retval](const auto& cpumesh) -> core::vector<ext::MitsubaLoader::IMeshMetadata::Instance>
166+
retval.globalMeta = meshes.getMetadata()->selfCast<const ext::MitsubaLoader::CMitsubaMetadata>();
167+
assert(retval.globalMeta);
168168
{
169-
auto* meta = cpumesh->getMetadata();
170-
assert(meta && core::strcmpi(meta->getLoaderName(), ext::MitsubaLoader::IMitsubaMetadata::LoaderName) == 0);
171-
const auto* meshmeta = static_cast<const ext::MitsubaLoader::IMeshMetadata*>(meta);
172-
retval.globalMeta = meshmeta->globalMetadata.get();
173-
assert(retval.globalMeta);
174-
175-
// WARNING !!!
176-
// all this instance-related things is a rework candidate since mitsuba loader supports instances
177-
// (all this metadata should be global, but meshbuffers has instanceCount correctly set
178-
// and globalDS with per-instance data (transform, normal matrix, instructions offsets, etc)
179-
return meshmeta->getInstances();
180-
};
169+
auto* glslMaterialBackendGlobalDS = retval.globalMeta->m_global.m_ds0.get();
170+
m_globalBackendDataDS = m_driver->getGPUObjectsFromAssets(&glslMaterialBackendGlobalDS,&glslMaterialBackendGlobalDS+1)->front();
171+
}
172+
181173
core::vector<CullData_t> cullData;
182174
core::vector<std::pair<core::smart_refctd_ptr<IGPUMeshBuffer>,uint32_t>> gpuMeshBuffers;
183175
{
@@ -208,38 +200,39 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
208200
};
209201
core::unordered_map<VisibilityBufferPipelineKey, core::smart_refctd_ptr<ICPURenderpassIndependentPipeline>, VisibilityBufferPipelineKeyHash> visibilityBufferFillPipelines;
210202

211-
meshesToProcess.reserve(contents.size());
212-
for (auto* it=contents.begin(); it!=contents.end(); it++)
213203
{
214-
auto cpumesh = static_cast<asset::ICPUMesh*>(it->get());
215-
meshesToProcess.push_back(cpumesh);
204+
meshesToProcess.reserve(contents.size());
216205

217-
const auto& instances = getInstances(cpumesh);
206+
uint32_t drawableCount = 0u;
207+
for (const auto& asset : contents)
208+
{
209+
auto cpumesh = static_cast<asset::ICPUMesh*>(asset.get());
210+
auto meshBuffers = cpumesh->getMeshBuffers();
211+
assert(!meshBuffers.empty());
218212

219-
auto meshBufferCount = cpumesh->getMeshBufferCount();
220-
assert(meshBufferCount);
213+
meshesToProcess.push_back(cpumesh);
221214

222-
const auto cullDataOffset = cullData.size();
223-
cullData.resize(cullDataOffset+instances.size()*meshBufferCount);
224-
for (auto i=0u; i<meshBufferCount; i++)
215+
drawableCount += meshBuffers.size()*retval.globalMeta->getAssetSpecificMetadata(cpumesh)->m_instances.size();
216+
}
217+
cullData.resize(drawableCount);
218+
}
219+
auto cullDataIt = cullData.begin();
220+
for (const auto& asset : contents)
221+
{
222+
auto cpumesh = static_cast<asset::ICPUMesh*>(asset.get());
223+
const auto* meta = retval.globalMeta->getAssetSpecificMetadata(cpumesh);
224+
const auto& instanceData = meta->m_instances;
225+
const auto& instanceAuxData = meta->m_instanceAuxData;
226+
227+
auto cullDataBaseBegin = cullDataIt;
228+
auto meshBuffers = cpumesh->getMeshBuffers();
229+
for (auto cpumb : meshBuffers)
225230
{
226-
// TODO: get rid of `getMeshBuffer` and `getMeshBufferCount`, just return a range as `getMeshBuffers`
227-
auto cpumb = cpumesh->getMeshBuffer(i);
228-
assert(cpumb->getInstanceCount()==instances.size());
231+
assert(cpumb->getInstanceCount()==instanceData.size());
229232

230233
// set up Visibility Buffer pipelines
231234
{
232235
auto oldPipeline = cpumb->getPipeline();
233-
234-
// if global SSBO with instruction streams not captured yet
235-
if (!m_globalBackendDataDS)
236-
{
237-
// a bit roundabout but oh well what can we do (global metadata needs to be more useful)
238-
auto* pipelinemeta = static_cast<ext::MitsubaLoader::CMitsubaPipelineMetadata*>(oldPipeline->getMetadata());
239-
auto* glslMaterialBackendGlobalDS = pipelinemeta->getDescriptorSet();
240-
m_globalBackendDataDS = m_driver->getGPUObjectsFromAssets(&glslMaterialBackendGlobalDS,&glslMaterialBackendGlobalDS+1)->front();
241-
}
242-
243236
auto vertexInputParams = oldPipeline->getVertexInputParams();
244237
const bool frontFaceIsCCW = oldPipeline->getRasterizationParams().frontFaceIsCCW;
245238
auto found = visibilityBufferFillPipelines.find(VisibilityBufferPipelineKey{ vertexInputParams,frontFaceIsCCW });
@@ -264,7 +257,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
264257
cpumb->setPipeline(std::move(newPipeline));
265258
}
266259

267-
CullData_t& baseCullData = cullData[cullDataOffset+i];
260+
CullData_t& baseCullData = *(cullDataIt++);
268261
{
269262
const auto aabbOriginal = cpumb->getBoundingBox();
270263
baseCullData.aabbMinEdge.x = aabbOriginal.MinEdge.X;
@@ -279,40 +272,39 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
279272

280273
meshBuffersToProcess.push_back(cpumb);
281274
}
282-
auto cullDataBaseBegin = cullData.begin()+cullDataOffset;
283-
auto cullDataBaseEnd = cullDataBaseBegin+meshBufferCount;
284-
285275

286276
// set up scene bounds and lights
287277
const auto aabbOriginal = cpumesh->getBoundingBox();
288-
for (auto j=0u; j<instances.size(); j++)
278+
for (auto j=0u; j<instanceData.size(); j++)
289279
{
290-
const auto& instance = instances[j];
280+
const auto& worldTform = instanceData.begin()[j].worldTform;
281+
const auto& aux = instanceAuxData.begin()[j];
282+
291283
ext::RadeonRays::MockSceneManager::ObjectData objectData;
292284
{
293-
objectData.tform = instance.tform;
285+
objectData.tform = worldTform;
294286
objectData.mesh = nullptr;
295-
objectData.instanceGUIDPerMeshBuffer.reserve(meshBufferCount);
296-
for (auto src=cullDataBaseBegin; src!=cullDataBaseEnd; src++)
287+
objectData.instanceGUIDPerMeshBuffer.reserve(meshBuffers.size());
288+
for (auto src=cullDataBaseBegin; src!=cullDataIt; src++)
297289
{
298-
auto dst = src+j*meshBufferCount;
290+
auto dst = src+j*meshBuffers.size();
299291
*dst = *src;
300292
dst->globalObjectID += j;
301293
objectData.instanceGUIDPerMeshBuffer.push_back(dst->globalObjectID);
302294
}
303295
}
304296
m_mock_smgr.m_objectData.push_back(std::move(objectData));
305297

306-
m_sceneBound.addInternalBox(core::transformBoxEx(aabbOriginal,instance.tform));
298+
m_sceneBound.addInternalBox(core::transformBoxEx(aabbOriginal,worldTform));
307299

308-
auto emitter = instance.emitter.front;
300+
auto emitter = aux.frontEmitter;
309301
if (emitter.type != ext::MitsubaLoader::CElementEmitter::Type::INVALID)
310302
{
311303
assert(emitter.type == ext::MitsubaLoader::CElementEmitter::Type::AREA);
312304

313-
SLight newLight(cpumesh->getBoundingBox(), instance.tform);
305+
SLight newLight(aabbOriginal,worldTform); // TODO: should be an OBB
314306

315-
const float weight = newLight.computeFluxBound(emitter.area.radiance) * emitter.area.samplingWeight;
307+
const float weight = newLight.computeFluxBound(emitter.area.radiance)*emitter.area.samplingWeight;
316308
if (weight <= FLT_MIN)
317309
continue;
318310

@@ -335,7 +327,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
335327
auto objectDataIt = m_mock_smgr.m_objectData.begin();
336328
for (auto i=0u; i<gpuMeshes->size(); i++)
337329
{
338-
const auto instanceCount = getInstances(meshesToProcess[i]).size();
330+
const auto instanceCount = retval.globalMeta->getAssetSpecificMetadata(meshesToProcess[i])->m_instances.size();
339331
for (size_t j=0u; j<instanceCount; j++)
340332
(objectDataIt++)->mesh = gpuMeshes->operator[](i);
341333
}
@@ -370,7 +362,7 @@ Renderer::InitializationData Renderer::initSceneObjects(const SAssetBundle& mesh
370362
{
371363
std::copy(gpumb->getVertexBufferBindings(),gpumb->getVertexBufferBindings()+IGPUMeshBuffer::MAX_ATTR_BUF_BINDING_COUNT,call.vertexBindings);
372364
call.indexBuffer = core::smart_refctd_ptr(gpumb->getIndexBufferBinding().buffer);
373-
call.pipeline = core::smart_refctd_ptr<IGPURenderpassIndependentPipeline>(const_cast<IGPURenderpassIndependentPipeline*>(gpumb->getPipeline()));
365+
call.pipeline = core::smart_refctd_ptr<const IGPURenderpassIndependentPipeline>(gpumb->getPipeline());
374366
};
375367
initNewMDI(std::get<core::smart_refctd_ptr<IGPUMeshBuffer>>(gpuMeshBuffers.front()));
376368
call.mdiOffset = 0u;
@@ -475,7 +467,7 @@ void Renderer::initSceneNonAreaLights(Renderer::InitializationData& initData)
475467
{
476468
core::vectorSIMDf _envmapBaseColor;
477469
_envmapBaseColor.set(0.f,0.f,0.f,1.f);
478-
for (const auto& emitter : initData.globalMeta->emitters)
470+
for (const auto& emitter : initData.globalMeta->m_global.m_emitters)
479471
{
480472
float weight = 0.f;
481473
switch (emitter.type)
@@ -610,7 +602,7 @@ void Renderer::init(const SAssetBundle& meshes,
610602
// figure out the renderable size
611603
{
612604
m_staticViewData.imageDimensions = {m_driver->getScreenSize().Width,m_driver->getScreenSize().Height};
613-
const auto& sensors = initData.globalMeta->sensors;
605+
const auto& sensors = initData.globalMeta->m_global.m_sensors;
614606
if (sensors.size())
615607
{
616608
// just grab the first sensor
@@ -690,7 +682,7 @@ void Renderer::init(const SAssetBundle& meshes,
690682
core::smart_refctd_ptr(m_raygenDSLayout),
691683
nullptr
692684
);
693-
(std::ofstream("material_declarations.glsl") << "#define _NBL_EXT_MITSUBA_LOADER_VT_STORAGE_VIEW_COUNT " << initData.globalMeta->getVTStorageViewCount() << "\n" << initData.globalMeta->materialCompilerGLSL_declarations).close();
685+
(std::ofstream("material_declarations.glsl") << "#define _NBL_EXT_MITSUBA_LOADER_VT_STORAGE_VIEW_COUNT " << initData.globalMeta->m_global.getVTStorageViewCount() << "\n" << initData.globalMeta->m_global.m_materialCompilerGLSL_declarations).close();
694686
m_raygenPipeline = m_driver->createGPUComputePipeline(nullptr, core::smart_refctd_ptr(m_raygenPipelineLayout),gpuSpecializedShaderFromFile(m_assetManager,m_driver,"../raygen.comp"));
695687

696688
m_raygenDS = m_driver->createGPUDescriptorSet(core::smart_refctd_ptr(m_raygenDSLayout));

examples_tests/22.RaytracedAO/Renderer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class Renderer : public nbl::core::IReferenceCounted, public nbl::core::Interfac
8383
nbl::core::vector<float> lightPDF;
8484
nbl::core::vector<uint32_t> lightCDF;
8585
};
86-
const nbl::ext::MitsubaLoader::CGlobalMitsubaMetadata* globalMeta = nullptr;
86+
const nbl::ext::MitsubaLoader::CMitsubaMetadata* globalMeta = nullptr;
8787
};
8888
InitializationData initSceneObjects(const nbl::asset::SAssetBundle& meshes);
8989
void initSceneNonAreaLights(InitializationData& initData);
@@ -134,9 +134,9 @@ class Renderer : public nbl::core::IReferenceCounted, public nbl::core::Interfac
134134
nbl::core::smart_refctd_ptr<nbl::video::IGPUBuffer> m_indirectDrawBuffers[2];
135135
struct MDICall
136136
{
137-
nbl::asset::SBufferBinding<nbl::video::IGPUBuffer> vertexBindings[nbl::video::IGPUMeshBuffer::MAX_ATTR_BUF_BINDING_COUNT];
138-
nbl::core::smart_refctd_ptr<nbl::video::IGPUBuffer> indexBuffer;
139-
nbl::core::smart_refctd_ptr<nbl::video::IGPURenderpassIndependentPipeline> pipeline;
137+
nbl::asset::SBufferBinding<const nbl::video::IGPUBuffer> vertexBindings[nbl::video::IGPUMeshBuffer::MAX_ATTR_BUF_BINDING_COUNT];
138+
nbl::core::smart_refctd_ptr<const nbl::video::IGPUBuffer> indexBuffer;
139+
nbl::core::smart_refctd_ptr<const nbl::video::IGPURenderpassIndependentPipeline> pipeline;
140140
uint32_t mdiOffset, mdiCount;
141141
};
142142
nbl::core::vector<MDICall> m_mdiDrawCalls;

examples_tests/22.RaytracedAO/main.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ int main()
3737

3838
//
3939
asset::SAssetBundle meshes;
40-
core::smart_refctd_ptr<ext::MitsubaLoader::CGlobalMitsubaMetadata> globalMeta;
40+
core::smart_refctd_ptr<const ext::MitsubaLoader::CMitsubaMetadata> globalMeta;
4141
{
4242
io::IFileSystem* fs = device->getFileSystem();
4343
asset::IAssetManager* am = device->getAssetManager();
@@ -106,15 +106,9 @@ int main()
106106
if (!contents.size())
107107
return 2;
108108

109-
auto firstmesh = *contents.begin();
110-
if (!firstmesh)
109+
globalMeta = core::smart_refctd_ptr<const ext::MitsubaLoader::CMitsubaMetadata>(meshes.getMetadata()->selfCast<const ext::MitsubaLoader::CMitsubaMetadata>());
110+
if (!globalMeta)
111111
return 3;
112-
113-
auto meta = firstmesh->getMetadata();
114-
if (!meta)
115-
return 4;
116-
assert(core::strcmpi(meta->getLoaderName(),ext::MitsubaLoader::IMitsubaMetadata::LoaderName) == 0);
117-
globalMeta = static_cast<ext::MitsubaLoader::IMeshMetadata*>(meta)->globalMetadata;
118112
}
119113

120114

@@ -126,9 +120,9 @@ int main()
126120
auto isOkSensorType = [](const ext::MitsubaLoader::CElementSensor& sensor) -> bool {
127121
return sensor.type == ext::MitsubaLoader::CElementSensor::Type::PERSPECTIVE || sensor.type == ext::MitsubaLoader::CElementSensor::Type::THINLENS;
128122
};
129-
if (globalMeta->sensors.size() && isOkSensorType(globalMeta->sensors.front()))
123+
if (globalMeta->m_global.m_sensors.size() && isOkSensorType(globalMeta->m_global.m_sensors.front()))
130124
{
131-
const auto& sensor = globalMeta->sensors.front();
125+
const auto& sensor = globalMeta->m_global.m_sensors.front();
132126
const auto& film = sensor.film;
133127

134128
// need to extract individual components

0 commit comments

Comments
 (0)