refactor: externalize builtin object id and grid shader assets
This commit is contained in:
@@ -43,6 +43,12 @@ size_t CalculateBuiltinShaderMemorySize(const Shader& shader);
|
||||
|
||||
constexpr const char* kBuiltinForwardLitShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/forward-lit/forward-lit.shader";
|
||||
constexpr const char* kBuiltinObjectIdShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/object-id/object-id.shader";
|
||||
constexpr const char* kBuiltinObjectIdOutlineShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/object-id-outline/object-id-outline.shader";
|
||||
constexpr const char* kBuiltinInfiniteGridShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/infinite-grid/infinite-grid.shader";
|
||||
|
||||
Containers::String NormalizeBuiltinAssetPath(const std::filesystem::path& path) {
|
||||
return Containers::String(path.lexically_normal().generic_string().c_str());
|
||||
@@ -79,8 +85,9 @@ bool TryResolveBuiltinAssetPathFromAnchor(
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TryResolveBuiltinForwardLitShaderManifestPath(Containers::String& outPath) {
|
||||
const std::filesystem::path relativePath(kBuiltinForwardLitShaderManifestRelativePath);
|
||||
bool TryResolveBuiltinShaderManifestPath(
|
||||
const std::filesystem::path& relativePath,
|
||||
Containers::String& outPath) {
|
||||
std::filesystem::path resolvedPath;
|
||||
std::error_code ec;
|
||||
|
||||
@@ -104,6 +111,34 @@ bool TryResolveBuiltinForwardLitShaderManifestPath(Containers::String& outPath)
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* GetBuiltinShaderManifestRelativePath(const Containers::String& builtinShaderPath) {
|
||||
if (builtinShaderPath == Containers::String(kBuiltinForwardLitShaderPath)) {
|
||||
return kBuiltinForwardLitShaderManifestRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinObjectIdShaderPath)) {
|
||||
return kBuiltinObjectIdShaderManifestRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinObjectIdOutlineShaderPath)) {
|
||||
return kBuiltinObjectIdOutlineShaderManifestRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinInfiniteGridShaderPath)) {
|
||||
return kBuiltinInfiniteGridShaderManifestRelativePath;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool TryResolveBuiltinShaderManifestPath(
|
||||
const Containers::String& builtinShaderPath,
|
||||
Containers::String& outPath) {
|
||||
const char* relativePath = GetBuiltinShaderManifestRelativePath(builtinShaderPath);
|
||||
if (relativePath == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return TryResolveBuiltinShaderManifestPath(std::filesystem::path(relativePath), outPath);
|
||||
}
|
||||
|
||||
Shader* LoadBuiltinShaderFromManifest(
|
||||
const Containers::String& builtinPath,
|
||||
const Containers::String& manifestPath) {
|
||||
@@ -120,6 +155,15 @@ Shader* LoadBuiltinShaderFromManifest(
|
||||
return shader;
|
||||
}
|
||||
|
||||
Shader* TryLoadBuiltinShaderFromManifest(const Containers::String& builtinPath) {
|
||||
Containers::String manifestPath;
|
||||
if (!TryResolveBuiltinShaderManifestPath(builtinPath, manifestPath)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return LoadBuiltinShaderFromManifest(builtinPath, manifestPath);
|
||||
}
|
||||
|
||||
const char kBuiltinForwardHlsl[] = R"(
|
||||
Texture2D gBaseColorTexture : register(t1);
|
||||
SamplerState gLinearSampler : register(s1);
|
||||
@@ -1133,11 +1177,8 @@ size_t CalculateBuiltinShaderMemorySize(const Shader& shader) {
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinForwardLitShader(const Containers::String& path) {
|
||||
Containers::String manifestPath;
|
||||
if (TryResolveBuiltinForwardLitShaderManifestPath(manifestPath)) {
|
||||
if (Shader* shader = LoadBuiltinShaderFromManifest(path, manifestPath)) {
|
||||
return shader;
|
||||
}
|
||||
if (Shader* shader = TryLoadBuiltinShaderFromManifest(path)) {
|
||||
return shader;
|
||||
}
|
||||
|
||||
auto* shader = new Shader();
|
||||
@@ -1213,6 +1254,10 @@ Shader* BuildBuiltinForwardLitShader(const Containers::String& path) {
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinObjectIdShader(const Containers::String& path) {
|
||||
if (Shader* shader = TryLoadBuiltinShaderFromManifest(path)) {
|
||||
return shader;
|
||||
}
|
||||
|
||||
auto* shader = new Shader();
|
||||
IResource::ConstructParams params;
|
||||
params.name = Containers::String("Builtin Object Id");
|
||||
@@ -1286,6 +1331,10 @@ Shader* BuildBuiltinObjectIdShader(const Containers::String& path) {
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinInfiniteGridShader(const Containers::String& path) {
|
||||
if (Shader* shader = TryLoadBuiltinShaderFromManifest(path)) {
|
||||
return shader;
|
||||
}
|
||||
|
||||
auto* shader = new Shader();
|
||||
IResource::ConstructParams params;
|
||||
params.name = Containers::String("Builtin Infinite Grid");
|
||||
@@ -1321,6 +1370,10 @@ Shader* BuildBuiltinInfiniteGridShader(const Containers::String& path) {
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinObjectIdOutlineShader(const Containers::String& path) {
|
||||
if (Shader* shader = TryLoadBuiltinShaderFromManifest(path)) {
|
||||
return shader;
|
||||
}
|
||||
|
||||
auto* shader = new Shader();
|
||||
IResource::ConstructParams params;
|
||||
params.name = Containers::String("Builtin Object Id Outline");
|
||||
|
||||
Reference in New Issue
Block a user