1- // Copyright (C) 2018-2020 - DevSH Graphics Programming Sp. z O.O.
1+ // Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O.
22// This file is part of the "Nabla Engine".
33// For conditions of distribution and use, see copyright notice in nabla.h
4+ #ifndef _NBL_EXT_MISTUBA_LOADER_C_MITSUBA_METADATA_H_INCLUDED_
5+ #define _NBL_EXT_MISTUBA_LOADER_C_MITSUBA_METADATA_H_INCLUDED_
46
5- #ifndef __NBL_C_MITSUBA_METADATA_H_INCLUDED__
6- #define __NBL_C_MITSUBA_METADATA_H_INCLUDED__
77
8- #include " nbl/core/compile_config.h"
98#include " nbl/asset/metadata/IAssetMetadata.h"
109#include " nbl/asset/ICPUImage.h"
1110
1514#include " nbl/ext/MitsubaLoader/CElementSensor.h"
1615#include " nbl/ext/MitsubaLoader/CElementShape.h"
1716
18- namespace nbl
19- {
20- namespace ext
21- {
22- namespace MitsubaLoader
17+
18+ namespace nbl ::ext::MitsubaLoader
2319{
2420
2521// ! A class to derive mitsuba mesh loader metadata objects from
26-
2722class CMitsubaMetadata : public asset ::IAssetMetadata
2823{
2924 public:
@@ -32,55 +27,12 @@ class CMitsubaMetadata : public asset::IAssetMetadata
3227 public:
3328 std::string m_id;
3429 };
35- class CDerivativeMap : public asset ::IImageMetadata
36- {
37- public:
38- CDerivativeMap () : m_scale(1 .f) {}
39- explicit CDerivativeMap (float scale) : m_scale(scale) {}
40-
41- float m_scale;
42- };
43- class CRenderpassIndependentPipeline : public asset ::IRenderpassIndependentPipelineMetadata
44- {
45- public:
46- CRenderpassIndependentPipeline () : IRenderpassIndependentPipelineMetadata(), m_ds0() {}
47- template <typename ... Args>
48- CRenderpassIndependentPipeline (core::smart_refctd_ptr<asset::ICPUDescriptorSet>&& _ds0, Args&&... args) : IRenderpassIndependentPipelineMetadata(std::forward<Args>(args)...), m_ds0(std::move(_ds0))
49- {
50- }
51-
52- inline CRenderpassIndependentPipeline& operator =(CRenderpassIndependentPipeline&& other)
53- {
54- IRenderpassIndependentPipelineMetadata::operator =(std::move (other));
55- std::swap (m_ds0, other.m_ds0 );
56- return *this ;
57- }
58-
59- core::smart_refctd_ptr<asset::ICPUDescriptorSet> m_ds0;
60- };
6130 class CMesh : public asset ::IMeshMetadata, public CID
6231 {
6332 public:
64- CMesh () : IMeshMetadata(), CID(), m_instanceAuxData( nullptr , nullptr ), type(CElementShape::Type::INVALID) {}
33+ CMesh () : IMeshMetadata(), CID(), type(CElementShape::Type::INVALID) {}
6534 ~CMesh () {}
6635
67- struct SInstanceAuxilaryData
68- {
69- SInstanceAuxilaryData& operator =(SInstanceAuxilaryData&& other)
70- {
71- frontEmitter = std::move (other.frontEmitter );
72- backEmitter = std::move (other.backEmitter );
73- bsdf = std::move (other.bsdf );
74- return *this ;
75- }
76-
77- CElementEmitter frontEmitter; // type is invalid if not used
78- CElementEmitter backEmitter; // type is invalid if not used
79- CMitsubaMaterialCompilerFrontend::front_and_back_t bsdf;
80- };
81-
82- core::SRange<const SInstanceAuxilaryData> m_instanceAuxData;
83-
8436 CElementShape::Type type;
8537 };
8638 struct SGlobal
@@ -92,14 +44,6 @@ class CMitsubaMetadata : public asset::IAssetMetadata
9244
9345 CElementIntegrator m_integrator;
9446 core::vector<CElementSensor> m_sensors;
95- core::vector<CElementEmitter> m_emitters;
96- core::smart_refctd_ptr<asset::ICPUVirtualTexture> m_VT;
97- core::smart_refctd_ptr<asset::ICPUDescriptorSet> m_ds0;
98- core::vector<core::smart_refctd_ptr<asset::ICPUImage>> m_envMapImages;
99- // has to go after #version and before required user-provided descriptors and functions
100- std::string m_materialCompilerGLSL_declarations;
101- // has to go after required user-provided descriptors and functions and before the rest of shader (especially entry point function)
102- std::string m_materialCompilerGLSL_source;
10347 } m_global;
10448
10549 CMitsubaMetadata () :
@@ -113,11 +57,6 @@ class CMitsubaMetadata : public asset::IAssetMetadata
11357 const char * getLoaderName () const override { return LoaderName; }
11458
11559 // !
116- inline const CRenderpassIndependentPipeline* getAssetSpecificMetadata (const asset::ICPURenderpassIndependentPipeline* asset) const
117- {
118- const auto found = IAssetMetadata::getAssetSpecificMetadata (asset);
119- return static_cast <const CRenderpassIndependentPipeline*>(found);
120- }
12160 inline const CMesh* getAssetSpecificMetadata (const asset::ICPUMesh* asset) const
12261 {
12362 const auto found = IAssetMetadata::getAssetSpecificMetadata (asset);
@@ -127,26 +66,9 @@ class CMitsubaMetadata : public asset::IAssetMetadata
12766 private:
12867 friend class CMitsubaLoader ;
12968
130- meta_container_t <CRenderpassIndependentPipeline> m_metaPplnStorage;
131- core::smart_refctd_dynamic_array<asset::IRenderpassIndependentPipelineMetadata::ShaderInputSemantic> m_semanticStorage;
132- CRenderpassIndependentPipeline* m_metaPplnStorageIt;
133-
13469 meta_container_t <CMesh> m_metaMeshStorage;
135- core::smart_refctd_dynamic_array<CMesh::SInstance> m_metaMeshInstanceStorage;
136- core::smart_refctd_dynamic_array<CMesh::SInstanceAuxilaryData> m_metaMeshInstanceAuxStorage;
13770 CMesh* m_meshStorageIt;
138- CMesh::SInstance* m_instanceStorageIt;
139- CMesh::SInstanceAuxilaryData* m_instanceAuxStorageIt;
140-
141- meta_container_t <CDerivativeMap> m_metaDerivMapStorage;
142- CDerivativeMap* m_metaDerivMapStorageIt;
14371
144- inline void reservePplnStorage (uint32_t pplnCount, core::smart_refctd_dynamic_array<asset::IRenderpassIndependentPipelineMetadata::ShaderInputSemantic>&& _semanticStorage)
145- {
146- m_metaPplnStorage = IAssetMetadata::createContainer<CRenderpassIndependentPipeline>(pplnCount);
147- m_semanticStorage = std::move (_semanticStorage);
148- m_metaPplnStorageIt = m_metaPplnStorage->begin ();
149- }
15072 inline void reserveMeshStorage (uint32_t meshCount, uint32_t instanceCount)
15173 {
15274 m_metaMeshStorage = IAssetMetadata::createContainer<CMesh>(meshCount);
@@ -156,17 +78,6 @@ class CMitsubaMetadata : public asset::IAssetMetadata
15678 m_instanceStorageIt = m_metaMeshInstanceStorage->begin ();
15779 m_instanceAuxStorageIt = m_metaMeshInstanceAuxStorage->begin ();
15880 }
159- inline void reserveDerivMapStorage (uint32_t count)
160- {
161- m_metaDerivMapStorage = IAssetMetadata::createContainer<CDerivativeMap>(count);
162- m_metaDerivMapStorageIt = m_metaDerivMapStorage->begin ();
163- }
164- inline void addPplnMeta (const asset::ICPURenderpassIndependentPipeline* ppln, core::smart_refctd_ptr<asset::ICPUDescriptorSet>&& _ds0)
165- {
166- *m_metaPplnStorageIt = CMitsubaMetadata::CRenderpassIndependentPipeline (std::move (_ds0),core::SRange<const asset::IRenderpassIndependentPipelineMetadata::ShaderInputSemantic>(m_semanticStorage->begin (),m_semanticStorage->end ()));
167- IAssetMetadata::insertAssetSpecificMetadata (ppln,m_metaPplnStorageIt);
168- m_metaPplnStorageIt++;
169- }
17081 template <typename InstanceIterator>
17182 inline uint32_t addMeshMeta (const asset::ICPUMesh* mesh, std::string&& id, const CElementShape::Type type, InstanceIterator instancesBegin, InstanceIterator instancesEnd)
17283 {
@@ -195,16 +106,7 @@ class CMitsubaMetadata : public asset::IAssetMetadata
195106
196107 return meta->m_instances .size ();
197108 }
198- inline void addDerivMapMeta (const asset::ICPUImage* derivmap, float scale)
199- {
200- auto * meta = m_metaDerivMapStorageIt++;
201- meta->m_scale = scale;
202- IAssetMetadata::insertAssetSpecificMetadata (derivmap, meta);
203- }
204109};
205110
206111}
207- }
208- }
209-
210112#endif
0 commit comments