diff --git a/libs/filamat/include/filamat/MaterialBuilder.h b/libs/filamat/include/filamat/MaterialBuilder.h index a102e95f54..8c2e1c3c67 100644 --- a/libs/filamat/include/filamat/MaterialBuilder.h +++ b/libs/filamat/include/filamat/MaterialBuilder.h @@ -112,6 +112,20 @@ inline constexpr MaterialBuilderBase::TargetApi operator|=(MaterialBuilderBase:: return lhs = (lhs | rhs); } +// Utility function that looks at an Engine backend to determine TargetApi +inline constexpr MaterialBuilderBase::TargetApi targetApiFromBackend( + filament::backend::Backend backend) noexcept { + using filament::backend::Backend; + using TargetApi = MaterialBuilderBase::TargetApi; + switch (backend) { + case Backend::DEFAULT: return TargetApi::ALL; + case Backend::OPENGL: return TargetApi::OPENGL; + case Backend::VULKAN: return TargetApi::VULKAN; + case Backend::METAL: return TargetApi::METAL; + case Backend::NOOP: return TargetApi::OPENGL; + } +} + inline constexpr bool operator&(MaterialBuilderBase::TargetApi lhs, MaterialBuilderBase::TargetApi rhs) noexcept { return bool(uint8_t(lhs) & uint8_t(rhs)); diff --git a/libs/gltfio/src/MaterialGenerator.cpp b/libs/gltfio/src/MaterialGenerator.cpp index b9fe168c9f..dda38c48a9 100644 --- a/libs/gltfio/src/MaterialGenerator.cpp +++ b/libs/gltfio/src/MaterialGenerator.cpp @@ -203,22 +203,8 @@ Material* createMaterial(Engine* engine, const MaterialKey& config, const UvMap& .name(name) .flipUV(false) .material(shader.c_str()) - .doubleSided(config.doubleSided); - - switch (engine->getBackend()) { - case Engine::Backend::OPENGL: - builder.targetApi(MaterialBuilder::TargetApi::OPENGL); - break; - case Engine::Backend::VULKAN: - builder.targetApi(MaterialBuilder::TargetApi::VULKAN); - break; - case Engine::Backend::METAL: - builder.targetApi(MaterialBuilder::TargetApi::METAL); - break; - default: - slog.e << "Unresolved backend, unable to use filamat." << io::endl; - return nullptr; - } + .doubleSided(config.doubleSided) + .targetApi(filamat::targetApiFromBackend(engine->getBackend())); #ifndef NDEBUG builder.optimization(MaterialBuilder::Optimization::NONE); diff --git a/samples/lucy_utils.cpp b/samples/lucy_utils.cpp index a06d99bcee..2cf6724e1b 100644 --- a/samples/lucy_utils.cpp +++ b/samples/lucy_utils.cpp @@ -88,7 +88,7 @@ Entity createQuad(Engine* engine, Texture* tex, ImageOp op, Texture* secondary) )SHADER") .require(VertexAttribute::UV0) .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "color") - .targetApi(filamat::MaterialBuilder::TargetApi::OPENGL) + .targetApi(filamat::targetApiFromBackend(engine.getBackend())) .shading(Shading::UNLIT) .depthWrite(false) .depthCulling(false) @@ -112,7 +112,7 @@ Entity createQuad(Engine* engine, Texture* tex, ImageOp op, Texture* secondary) .require(VertexAttribute::UV0) .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "color") .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "secondary") - .targetApi(filamat::MaterialBuilder::TargetApi::OPENGL) + .targetApi(filamat::targetApiFromBackend(engine.getBackend())) .shading(Shading::UNLIT) .depthWrite(false) .depthCulling(false) @@ -196,7 +196,7 @@ Entity createQuad(Engine* engine, Texture* tex, ImageOp op, Texture* secondary) .require(VertexAttribute::UV0) .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "color") .parameter(filamat::MaterialBuilder::UniformType::FLOAT4, SAMPLE_COUNT, "weights") - .targetApi(filamat::MaterialBuilder::TargetApi::OPENGL) + .targetApi(filamat::targetApiFromBackend(engine.getBackend())) .shading(Shading::UNLIT) .depthWrite(false) .depthCulling(false) @@ -312,7 +312,7 @@ Entity createDisk(Engine* engine, Texture* reflection) { .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "roughness") .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "ao") .parameter(filamat::MaterialBuilder::SamplerType::SAMPLER_2D, "reflection") - .targetApi(filamat::MaterialBuilder::TargetApi::OPENGL) + .targetApi(filamat::targetApiFromBackend(engine->getBackend())) .specularAntiAliasing(true) .shading(Shading::LIT) .build();