diff --git a/src/ShaderNode/DataModels/Cast.inl b/src/ShaderNode/DataModels/Cast.inl index e6ea83960..131544f33 100644 --- a/src/ShaderNode/DataModels/Cast.inl +++ b/src/ShaderNode/DataModels/Cast.inl @@ -39,13 +39,13 @@ Nz::ShaderAst::NodePtr CastVec::BuildNode(Nz::ShaderAst::Expre } else if (ToComponentCount < fromComponentCount) { - std::array swizzleComponents; + std::array swizzleComponents; for (std::size_t i = 0; i < ToComponentCount; ++i) - swizzleComponents[i] = static_cast(static_cast(Nz::ShaderAst::SwizzleComponent::First) + i); + swizzleComponents[i] = Nz::SafeCast(i); return std::apply([&](auto... components) { - std::initializer_list componentList{ components... }; + std::initializer_list componentList{ components... }; return Nz::ShaderBuilder::Swizzle(std::move(expressions[0]), componentList); }, swizzleComponents); } diff --git a/src/ShaderNode/DataModels/VecDecomposition.cpp b/src/ShaderNode/DataModels/VecDecomposition.cpp index f36fcea50..2cc8e8d94 100644 --- a/src/ShaderNode/DataModels/VecDecomposition.cpp +++ b/src/ShaderNode/DataModels/VecDecomposition.cpp @@ -21,10 +21,7 @@ Nz::ShaderAst::NodePtr VecDecomposition::BuildNode(Nz::ShaderAst::ExpressionPtr* assert(count == 1); assert(outputIndex < m_outputs.size()); - using namespace Nz; - - ShaderAst::SwizzleComponent swizzleComponent = static_cast(Nz::UnderlyingCast(ShaderAst::SwizzleComponent::First) + outputIndex); - return ShaderBuilder::Swizzle(std::move(expressions[0]), { swizzleComponent }); + return Nz::ShaderBuilder::Swizzle(std::move(expressions[0]), { Nz::SafeCast(outputIndex) }); } QString VecDecomposition::caption() const diff --git a/tests/Engine/Shader/AccessMemberTest.cpp b/tests/Engine/Shader/AccessMemberTest.cpp index a3127e98d..ed52cd582 100644 --- a/tests/Engine/Shader/AccessMemberTest.cpp +++ b/tests/Engine/Shader/AccessMemberTest.cpp @@ -77,7 +77,7 @@ SCENARIO("Shader generation", "[Shader]") auto firstAccess = Nz::ShaderBuilder::AccessMember(std::move(ubo), { "s" }); auto secondAccess = Nz::ShaderBuilder::AccessMember(std::move(firstAccess), { "field" }); - auto swizzle = Nz::ShaderBuilder::Swizzle(std::move(secondAccess), { Nz::ShaderAst::SwizzleComponent::Third }); + auto swizzle = Nz::ShaderBuilder::Swizzle(std::move(secondAccess), { 2u }); auto varDecl = Nz::ShaderBuilder::DeclareVariable("result", Nz::ShaderAst::PrimitiveType::Float32, std::move(swizzle)); statements.push_back(Nz::ShaderBuilder::DeclareFunction("main", std::move(varDecl))); @@ -113,7 +113,7 @@ OpFunctionEnd)"); auto ubo = Nz::ShaderBuilder::Identifier("ubo"); auto access = Nz::ShaderBuilder::AccessMember(std::move(ubo), { "s", "field" }); - auto swizzle = Nz::ShaderBuilder::Swizzle(std::move(access), { Nz::ShaderAst::SwizzleComponent::Third }); + auto swizzle = Nz::ShaderBuilder::Swizzle(std::move(access), { 2u }); auto varDecl = Nz::ShaderBuilder::DeclareVariable("result", Nz::ShaderAst::PrimitiveType::Float32, std::move(swizzle)); statements.push_back(Nz::ShaderBuilder::DeclareFunction("main", std::move(varDecl)));