Close shader authoring usepass regressions
This commit is contained in:
@@ -32,6 +32,7 @@ constexpr const char* kBuiltinUnlitShaderPath = "builtin://shaders/unlit";
|
||||
constexpr const char* kBuiltinDepthOnlyShaderPath = "builtin://shaders/depth-only";
|
||||
constexpr const char* kBuiltinShadowCasterShaderPath = "builtin://shaders/shadow-caster";
|
||||
constexpr const char* kBuiltinObjectIdShaderPath = "builtin://shaders/object-id";
|
||||
constexpr const char* kBuiltinObjectIdOutlineShaderPath = "builtin://shaders/object-id-outline";
|
||||
constexpr const char* kBuiltinSkyboxShaderPath = "builtin://shaders/skybox";
|
||||
constexpr const char* kBuiltinColorScalePostProcessShaderPath =
|
||||
"builtin://shaders/color-scale-post-process";
|
||||
@@ -46,22 +47,24 @@ struct MeshBuffers {
|
||||
|
||||
size_t CalculateBuiltinShaderMemorySize(const Shader& shader);
|
||||
|
||||
constexpr const char* kBuiltinForwardLitShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/forward-lit/forward-lit.shader";
|
||||
constexpr const char* kBuiltinUnlitShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/unlit/unlit.shader";
|
||||
constexpr const char* kBuiltinDepthOnlyShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/depth-only/depth-only.shader";
|
||||
constexpr const char* kBuiltinShadowCasterShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/shadow-caster/shadow-caster.shader";
|
||||
constexpr const char* kBuiltinObjectIdShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/object-id/object-id.shader";
|
||||
constexpr const char* kBuiltinSkyboxShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/skybox/skybox.shader";
|
||||
constexpr const char* kBuiltinColorScalePostProcessShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/color-scale-post-process/color-scale-post-process.shader";
|
||||
constexpr const char* kBuiltinFinalColorShaderManifestRelativePath =
|
||||
"engine/assets/builtin/shaders/final-color/final-color.shader";
|
||||
constexpr const char* kBuiltinForwardLitShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/forward-lit.shader";
|
||||
constexpr const char* kBuiltinUnlitShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/unlit.shader";
|
||||
constexpr const char* kBuiltinDepthOnlyShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/depth-only.shader";
|
||||
constexpr const char* kBuiltinShadowCasterShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/shadow-caster.shader";
|
||||
constexpr const char* kBuiltinObjectIdShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/object-id.shader";
|
||||
constexpr const char* kBuiltinObjectIdOutlineShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/object-id-outline.shader";
|
||||
constexpr const char* kBuiltinSkyboxShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/skybox.shader";
|
||||
constexpr const char* kBuiltinColorScalePostProcessShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/color-scale-post-process.shader";
|
||||
constexpr const char* kBuiltinFinalColorShaderAssetRelativePath =
|
||||
"engine/assets/builtin/shaders/final-color.shader";
|
||||
|
||||
Containers::String NormalizeBuiltinAssetPath(const std::filesystem::path& path) {
|
||||
return Containers::String(path.lexically_normal().generic_string().c_str());
|
||||
@@ -98,7 +101,7 @@ bool TryResolveBuiltinAssetPathFromAnchor(
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TryResolveBuiltinShaderManifestPath(
|
||||
bool TryResolveBuiltinShaderAssetPath(
|
||||
const std::filesystem::path& relativePath,
|
||||
Containers::String& outPath) {
|
||||
std::filesystem::path resolvedPath;
|
||||
@@ -124,51 +127,54 @@ bool TryResolveBuiltinShaderManifestPath(
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* GetBuiltinShaderManifestRelativePath(const Containers::String& builtinShaderPath) {
|
||||
const char* GetBuiltinShaderAssetRelativePath(const Containers::String& builtinShaderPath) {
|
||||
if (builtinShaderPath == Containers::String(kBuiltinForwardLitShaderPath)) {
|
||||
return kBuiltinForwardLitShaderManifestRelativePath;
|
||||
return kBuiltinForwardLitShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinUnlitShaderPath)) {
|
||||
return kBuiltinUnlitShaderManifestRelativePath;
|
||||
return kBuiltinUnlitShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinDepthOnlyShaderPath)) {
|
||||
return kBuiltinDepthOnlyShaderManifestRelativePath;
|
||||
return kBuiltinDepthOnlyShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinShadowCasterShaderPath)) {
|
||||
return kBuiltinShadowCasterShaderManifestRelativePath;
|
||||
return kBuiltinShadowCasterShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinObjectIdShaderPath)) {
|
||||
return kBuiltinObjectIdShaderManifestRelativePath;
|
||||
return kBuiltinObjectIdShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinObjectIdOutlineShaderPath)) {
|
||||
return kBuiltinObjectIdOutlineShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinSkyboxShaderPath)) {
|
||||
return kBuiltinSkyboxShaderManifestRelativePath;
|
||||
return kBuiltinSkyboxShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinColorScalePostProcessShaderPath)) {
|
||||
return kBuiltinColorScalePostProcessShaderManifestRelativePath;
|
||||
return kBuiltinColorScalePostProcessShaderAssetRelativePath;
|
||||
}
|
||||
if (builtinShaderPath == Containers::String(kBuiltinFinalColorShaderPath)) {
|
||||
return kBuiltinFinalColorShaderManifestRelativePath;
|
||||
return kBuiltinFinalColorShaderAssetRelativePath;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool TryResolveBuiltinShaderManifestPath(
|
||||
bool TryResolveBuiltinShaderAssetPath(
|
||||
const Containers::String& builtinShaderPath,
|
||||
Containers::String& outPath) {
|
||||
const char* relativePath = GetBuiltinShaderManifestRelativePath(builtinShaderPath);
|
||||
const char* relativePath = GetBuiltinShaderAssetRelativePath(builtinShaderPath);
|
||||
if (relativePath == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return TryResolveBuiltinShaderManifestPath(std::filesystem::path(relativePath), outPath);
|
||||
return TryResolveBuiltinShaderAssetPath(std::filesystem::path(relativePath), outPath);
|
||||
}
|
||||
|
||||
Shader* LoadBuiltinShaderFromManifest(
|
||||
Shader* LoadBuiltinShaderFromAsset(
|
||||
const Containers::String& builtinPath,
|
||||
const Containers::String& manifestPath) {
|
||||
const Containers::String& assetPath) {
|
||||
ShaderLoader shaderLoader;
|
||||
LoadResult result = shaderLoader.Load(manifestPath);
|
||||
LoadResult result = shaderLoader.Load(assetPath);
|
||||
if (!result || result.resource == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -180,13 +186,13 @@ Shader* LoadBuiltinShaderFromManifest(
|
||||
return shader;
|
||||
}
|
||||
|
||||
Shader* TryLoadBuiltinShaderFromManifest(const Containers::String& builtinPath) {
|
||||
Containers::String manifestPath;
|
||||
if (!TryResolveBuiltinShaderManifestPath(builtinPath, manifestPath)) {
|
||||
Shader* TryLoadBuiltinShaderFromAsset(const Containers::String& builtinPath) {
|
||||
Containers::String assetPath;
|
||||
if (!TryResolveBuiltinShaderAssetPath(builtinPath, assetPath)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return LoadBuiltinShaderFromManifest(builtinPath, manifestPath);
|
||||
return LoadBuiltinShaderFromAsset(builtinPath, assetPath);
|
||||
}
|
||||
|
||||
Math::Bounds ComputeBounds(const std::vector<StaticMeshVertex>& vertices) {
|
||||
@@ -675,35 +681,39 @@ size_t CalculateBuiltinShaderMemorySize(const Shader& shader) {
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinForwardLitShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinUnlitShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinDepthOnlyShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinShadowCasterShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinObjectIdShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinObjectIdOutlineShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinSkyboxShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinColorScalePostProcessShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Shader* BuildBuiltinFinalColorShader(const Containers::String& path) {
|
||||
return TryLoadBuiltinShaderFromManifest(path);
|
||||
return TryLoadBuiltinShaderFromAsset(path);
|
||||
}
|
||||
|
||||
Material* BuildDefaultPrimitiveMaterial(const Containers::String& path) {
|
||||
@@ -776,6 +786,50 @@ bool IsBuiltinTexturePath(const Containers::String& path) {
|
||||
return path.StartsWith(kBuiltinTexturePrefix);
|
||||
}
|
||||
|
||||
bool TryGetBuiltinShaderPathByShaderName(
|
||||
const Containers::String& shaderName,
|
||||
Containers::String& outPath) {
|
||||
if (shaderName == "Builtin Forward Lit") {
|
||||
outPath = GetBuiltinForwardLitShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Unlit") {
|
||||
outPath = GetBuiltinUnlitShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Depth Only") {
|
||||
outPath = GetBuiltinDepthOnlyShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Shadow Caster") {
|
||||
outPath = GetBuiltinShadowCasterShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Object Id") {
|
||||
outPath = GetBuiltinObjectIdShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Object Id Outline") {
|
||||
outPath = GetBuiltinObjectIdOutlineShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Skybox") {
|
||||
outPath = GetBuiltinSkyboxShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Color Scale Post Process") {
|
||||
outPath = GetBuiltinColorScalePostProcessShaderPath();
|
||||
return true;
|
||||
}
|
||||
if (shaderName == "Builtin Final Color") {
|
||||
outPath = GetBuiltinFinalColorShaderPath();
|
||||
return true;
|
||||
}
|
||||
|
||||
outPath.Clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* GetBuiltinPrimitiveDisplayName(BuiltinPrimitiveType primitiveType) {
|
||||
switch (primitiveType) {
|
||||
case BuiltinPrimitiveType::Cube: return "Cube";
|
||||
@@ -824,6 +878,10 @@ Containers::String GetBuiltinObjectIdShaderPath() {
|
||||
return Containers::String(kBuiltinObjectIdShaderPath);
|
||||
}
|
||||
|
||||
Containers::String GetBuiltinObjectIdOutlineShaderPath() {
|
||||
return Containers::String(kBuiltinObjectIdOutlineShaderPath);
|
||||
}
|
||||
|
||||
Containers::String GetBuiltinSkyboxShaderPath() {
|
||||
return Containers::String(kBuiltinSkyboxShaderPath);
|
||||
}
|
||||
@@ -934,6 +992,8 @@ LoadResult CreateBuiltinShaderResource(const Containers::String& path) {
|
||||
shader = BuildBuiltinShadowCasterShader(path);
|
||||
} else if (path == GetBuiltinObjectIdShaderPath()) {
|
||||
shader = BuildBuiltinObjectIdShader(path);
|
||||
} else if (path == GetBuiltinObjectIdOutlineShaderPath()) {
|
||||
shader = BuildBuiltinObjectIdOutlineShader(path);
|
||||
} else if (path == GetBuiltinSkyboxShaderPath()) {
|
||||
shader = BuildBuiltinSkyboxShader(path);
|
||||
} else if (path == GetBuiltinColorScalePostProcessShaderPath()) {
|
||||
|
||||
Reference in New Issue
Block a user