-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExperimentMaterialResolveBinding.cpp
More file actions
56 lines (54 loc) · 2.24 KB
/
Copy pathExperimentMaterialResolveBinding.cpp
File metadata and controls
56 lines (54 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "ExperimentMaterialResolveBinding.h"
#include "DataSystem.h"
#include "Experiment/Cooked/CookedAssetCatalog.h"
namespace experiment
{
MaterialResolveServices MakeDataSystemMaterialResolveServices(
const cooked::CookedAssetCatalog* catalog,
const assets::ModelAssetGeneration* generation)
{
MaterialResolveServices services;
if (nullptr != generation)
{
services.resolveEmbeddedTexture =
[generation](const AssetId& id) -> std::shared_ptr<Texture>
{
if (nullptr == generation->FindTexture(id.value)) return nullptr;
return DataSystems->ResolveModelGenerationTexture(
*generation, id.value);
};
}
services.loadShaderMetaHandle =
[](const FileGuid& guid, std::string& outError)
{
return DataSystems->LoadShaderMetaHandle(guid, outError);
};
services.resolveShaderMeta = [](const ShaderMetaHandle& handle)
{
return DataSystems->ResolveShaderMeta(handle);
};
services.loadTexture =
[](const std::filesystem::path& path, bool compress, TextureColorSpace colorSpace)
{
return DataSystems->LoadSharedMaterialTexture(
path.string(), compress, colorSpace == TextureColorSpace::Srgb);
};
services.resolveSourcePath = [](const FileGuid& guid)
{
return DataSystems->GetFilePath(guid);
};
if (catalog)
{
// I7-C2 — 해석은 catalog가 아니라 DataSystem 창구를 탄다. 신선도
// (stale 집합)는 마운트가 판정한 DataSystem 상태이지 표의 성질이
// 아니기 때문이다. catalog 인자는 여전히 "cooked 해석을 켤 것인가"의
// 정본이다 — nullptr이면 이 서비스가 아예 없다(M2 계약, 자가 검증이
// 그 대우를 단정한다).
services.resolveCookedArtifactPath = [](const AssetId& id)
{
return DataSystems->ResolveCookedArtifact(id);
};
}
return services;
}
}