Skip to content

Commit 4365e07

Browse files
Radient: delegate material asset creation to definitions
1 parent e8a0c7a commit 4365e07

8 files changed

Lines changed: 38 additions & 42 deletions

Radient/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ set(INCLUDE
6565
include/Assets/RadientCacheKeyBuilder.hpp
6666
include/Assets/RadientFilesystemAssetResolver.hpp
6767
include/Assets/RadientGLTFLoader.hpp
68+
include/Assets/RadientMaterialAssetFactory.hpp
6869
include/Assets/RadientMaterialAssetManager.hpp
6970
include/Assets/RadientMaterialDefinitionImpl.hpp
7071
include/Assets/RadientMaterialStorage.hpp
7172
include/Assets/RadientMeshIndexSource.hpp
7273
include/Assets/RadientMeshAssetManager.hpp
7374
include/Assets/RadientMeshVertexSource.hpp
74-
include/Assets/RadientSurfaceMaterialAssetImpl.hpp
7575
include/Assets/RadientMeshViewSource.hpp
7676
include/Assets/RadientTextureAssetManager.hpp
7777
include/Assets/RadientTextureFormat.hpp

Radient/include/Assets/RadientSurfaceMaterialAssetImpl.hpp renamed to Radient/include/Assets/RadientMaterialAssetFactory.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,20 @@
2626

2727
#pragma once
2828

29-
#include "Assets/RadientMaterialStorage.hpp"
29+
#include "RadientMaterials.h"
30+
31+
#include "RefCntAutoPtr.hpp"
3032

3133
namespace Diligent
3234
{
3335

3436
namespace RadientMaterialDetail
3537
{
3638

39+
RefCntAutoPtr<IRadientMaterialAsset> MakeGenericMaterialAsset(
40+
IRadientMaterialDefinitionAsset* pDefinition,
41+
RadientHandle DefinitionHandle);
42+
3743
RefCntAutoPtr<IRadientMaterialAsset> MakeSurfaceMaterialAsset(
3844
IRadientMaterialDefinitionAsset* pDefinition,
3945
RadientHandle DefinitionHandle);

Radient/include/Assets/RadientMaterialDefinitionImpl.hpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#include "HashUtils.hpp"
3232
#include "ObjectBase.hpp"
33+
#include "RefCntAutoPtr.hpp"
3334
#include "STDAllocator.hpp"
3435

3536
#ifdef _MSC_VER
@@ -193,6 +194,8 @@ class RadientMaterialDefinitionImpl final : public ObjectBase<IRadientMaterialDe
193194
virtual RADIENT_STATUS DILIGENT_CALL_TYPE FindParameter(const Char* Name,
194195
RadientMaterialParameterHandle* pHandle) const override final;
195196

197+
RefCntAutoPtr<IRadientMaterialAsset> CreateAsset();
198+
196199
Uint32 GetShaderDataSize() const noexcept
197200
{
198201
return m_Data.PackingPlan.Size;
@@ -207,11 +210,6 @@ class RadientMaterialDefinitionImpl final : public ObjectBase<IRadientMaterialDe
207210
void WriteShaderData(const IRadientMaterialAsset& Material,
208211
void* pData) const noexcept;
209212

210-
RadientHandle GetDefinitionHandle() const noexcept
211-
{
212-
return m_DefinitionHandle;
213-
}
214-
215213
private:
216214
struct ShaderDataCopyCommand
217215
{
@@ -250,9 +248,9 @@ class RadientMaterialDefinitionImpl final : public ObjectBase<IRadientMaterialDe
250248
Other.PackingPlan = {};
251249
}
252250

253-
PackedData(const PackedData&) = delete;
251+
PackedData(const PackedData&) = delete;
254252
PackedData& operator=(const PackedData&) = delete;
255-
PackedData& operator=(PackedData&&) = delete;
253+
PackedData& operator=(PackedData&&) = delete;
256254

257255
~PackedData()
258256
{

Radient/include/Assets/RadientMaterialStorage.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ class MaterialStorage final
100100
// clang-format on
101101

102102
IRadientMaterialDefinitionAsset* GetDefinition() const noexcept;
103-
RadientHandle GetDefinitionHandle() const noexcept;
104103
Uint64 GetVersion() const noexcept;
105104

106105
RADIENT_STATUS GetParameter(RadientMaterialParameterHandle Handle,
@@ -180,10 +179,6 @@ class MaterialWriterState final
180179
std::vector<PackedMaterialData::TexturePtr> m_TextureData;
181180
};
182181

183-
RefCntAutoPtr<IRadientMaterialAsset> MakeMaterialAsset(
184-
IRadientMaterialDefinitionAsset* pDefinition,
185-
RadientHandle DefinitionHandle);
186-
187182
MaterialStorage* TryGetMaterialStorage(IRadientMaterialAsset* pMaterial) noexcept;
188183
const MaterialStorage* TryGetMaterialStorage(const IRadientMaterialAsset* pMaterial) noexcept;
189184

Radient/src/Assets/RadientMaterialAssetImpl.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
* of the possibility of such damages.
2525
*/
2626

27+
#include "Assets/RadientMaterialAssetFactory.hpp"
2728
#include "Assets/RadientMaterialStorage.hpp"
2829

2930
#include "RadientMaterialAssetImplBase.hpp"
@@ -413,11 +414,6 @@ IRadientMaterialDefinitionAsset* MaterialStorage::GetDefinition() const noexcept
413414
return m_pDefinition;
414415
}
415416

416-
RadientHandle MaterialStorage::GetDefinitionHandle() const noexcept
417-
{
418-
return m_DefinitionHandle;
419-
}
420-
421417
Uint64 MaterialStorage::GetVersion() const noexcept
422418
{
423419
return m_Version;
@@ -698,7 +694,7 @@ RefCntAutoPtr<RadientMaterialWriterImpl> RadientMaterialAssetImpl::MakeWriter()
698694

699695
} // namespace
700696

701-
RefCntAutoPtr<IRadientMaterialAsset> RadientMaterialDetail::MakeMaterialAsset(
697+
RefCntAutoPtr<IRadientMaterialAsset> RadientMaterialDetail::MakeGenericMaterialAsset(
702698
IRadientMaterialDefinitionAsset* pDefinition,
703699
RadientHandle DefinitionHandle)
704700
{

Radient/src/Assets/RadientMaterialAssetManager.cpp

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
#include "Assets/RadientMaterialDefinitionImpl.hpp"
3030
#include "Assets/RadientMaterialStorage.hpp"
31-
#include "Assets/RadientSurfaceMaterialAssetImpl.hpp"
3231
#include "DebugUtilities.hpp"
3332

3433
#include <exception>
@@ -112,26 +111,10 @@ RADIENT_STATUS RadientMaterialAssetManager::CreateMaterial(
112111

113112
try
114113
{
115-
RefCntAutoPtr<IRadientMaterialAsset> pMaterial;
116-
switch (pDefinitionImpl->GetDesc().Type)
117-
{
118-
case RADIENT_MATERIAL_DEFINITION_TYPE_SURFACE:
119-
pMaterial = RadientMaterialDetail::MakeSurfaceMaterialAsset(
120-
pDefinitionImpl, pDefinitionImpl->GetDefinitionHandle());
121-
break;
122-
123-
case RADIENT_MATERIAL_DEFINITION_TYPE_POST_PROCESS:
124-
case RADIENT_MATERIAL_DEFINITION_TYPE_COMPUTE:
125-
pMaterial = RadientMaterialDetail::MakeMaterialAsset(
126-
pDefinitionImpl, pDefinitionImpl->GetDefinitionHandle());
127-
break;
128-
129-
default:
130-
UNEXPECTED("Unexpected material definition type");
131-
return RADIENT_STATUS_INVALID_OPERATION;
132-
}
133-
134-
VERIFY_EXPR(pMaterial != nullptr);
114+
RefCntAutoPtr<IRadientMaterialAsset> pMaterial = pDefinitionImpl->CreateAsset();
115+
if (pMaterial == nullptr)
116+
return RADIENT_STATUS_INVALID_OPERATION;
117+
135118
*ppMaterial = pMaterial.Detach();
136119
return RADIENT_STATUS_OK;
137120
}

Radient/src/Assets/RadientMaterialDefinitionImpl.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#include "Assets/RadientMaterialDefinitionImpl.hpp"
2828

29+
#include "Assets/RadientMaterialAssetFactory.hpp"
2930
#include "Assets/RadientMaterialStorage.hpp"
3031
#include "Assets/RadientTextureAssetManager.hpp"
3132

@@ -770,6 +771,23 @@ RADIENT_STATUS DILIGENT_CALL_TYPE RadientMaterialDefinitionImpl::FindParameter(
770771
return GetParameterHandle(It->second, pHandle);
771772
}
772773

774+
RefCntAutoPtr<IRadientMaterialAsset> RadientMaterialDefinitionImpl::CreateAsset()
775+
{
776+
switch (m_Data.GetDesc().Type)
777+
{
778+
case RADIENT_MATERIAL_DEFINITION_TYPE_SURFACE:
779+
return RadientMaterialDetail::MakeSurfaceMaterialAsset(this, m_DefinitionHandle);
780+
781+
case RADIENT_MATERIAL_DEFINITION_TYPE_POST_PROCESS:
782+
case RADIENT_MATERIAL_DEFINITION_TYPE_COMPUTE:
783+
return RadientMaterialDetail::MakeGenericMaterialAsset(this, m_DefinitionHandle);
784+
785+
default:
786+
UNEXPECTED("Unexpected material definition type");
787+
return {};
788+
}
789+
}
790+
773791
void RadientMaterialDefinitionImpl::WriteShaderData(
774792
const IRadientMaterialAsset& Material,
775793
void* pData) const noexcept

Radient/src/Assets/RadientSurfaceMaterialAssetImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* of the possibility of such damages.
2525
*/
2626

27-
#include "Assets/RadientSurfaceMaterialAssetImpl.hpp"
27+
#include "Assets/RadientMaterialAssetFactory.hpp"
2828

2929
#include "RadientMaterialAssetImplBase.hpp"
3030

0 commit comments

Comments
 (0)