aboutsummaryrefslogtreecommitdiff
path: root/src/brussel.engine/Shader.cpp
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2025-05-14 15:46:18 -0700
committerrtk0c <[email protected]>2025-08-16 11:34:58 -0700
commitb38c2d64d5743bd2adfcfafbb18bc49cf20207b0 (patch)
tree518f0b2f34fb34be0180bf56b62cf91b0a7e98b0 /src/brussel.engine/Shader.cpp
parentb7ae3e36e5de39f77ceb4886afbdeb03a5cfba6b (diff)
Fix compile errors
Diffstat (limited to 'src/brussel.engine/Shader.cpp')
-rw-r--r--src/brussel.engine/Shader.cpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/brussel.engine/Shader.cpp b/src/brussel.engine/Shader.cpp
index d795188..0b830c9 100644
--- a/src/brussel.engine/Shader.cpp
+++ b/src/brussel.engine/Shader.cpp
@@ -584,6 +584,20 @@ void IresShader::Write(IresWritingContext& ctx, rapidjson::Value& value, rapidjs
out << mInstance->mInfo;
}
+static void ReadShaderMathVariable(const rapidjson::Value& rv, ShaderMathVariable& var) {
+ // TODO
+}
+
+static void ReadShaderSamplerVariable(const rapidjson::Value& rv, ShaderSamplerVariable& var) {
+ // TODO
+}
+
+template <typename T>
+static void AddUniform(ShaderInfo& si, T uniform) {
+ si.things.try_emplace(uniform.name, ShaderThingId{ ShaderThingId::KD_Uniform, (int)si.uniforms.size() });
+ si.uniforms.emplace_back(std::move(uniform));
+}
+
void IresShader::Read(IresLoadingContext& ctx, const rapidjson::Value& value) {
using namespace ProjectBrussel_UNITY_ID;
@@ -654,28 +668,22 @@ void IresShader::Read(IresLoadingContext& ctx, const rapidjson::Value& value) {
BRUSSEL_JSON_GET_DEFAULT(rvUniform, "AutoFill", bool, autoFill, false);
if (autoFill) continue;
- auto uniform = [&]() -> std::unique_ptr<ShaderVariable> {
- if (type == "Math"sv) {
- auto uniform = std::make_unique<ShaderMathVariable>();
- ReadShaderMathVariable(*rvValue, *uniform);
-
- return uniform;
- } else if (type == "Sampler"sv) {
- auto uniform = std::make_unique<ShaderSamplerVariable>();
- ReadShaderSamplerVariable(*rvValue, *uniform);
-
- return uniform;
- }
-
- return nullptr;
- }();
- if (uniform) {
- shaderInfo.things.try_emplace(uniform->name, ShaderThingId{ ShaderThingId::KD_Uniform, (int)shaderInfo.uniforms.size() });
- shaderInfo.uniforms.emplace_back(std::move(uniform));
+ if (type == "Math"sv) {
+ ShaderMathVariable uniform;
+ ReadShaderMathVariable(*rvValue, uniform);
+ AddUniform(shaderInfo, uniform);
+ } else if (type == "Sampler"sv) {
+ ShaderSamplerVariable uniform;
+ ReadShaderSamplerVariable(*rvValue, uniform);
+ AddUniform(shaderInfo, uniform);
}
}
for (auto& uniform : shaderInfo.uniforms) {
- uniform->location = glGetUniformLocation(shaderProgram, uniform->name.c_str());
+ std::visit(
+ [&](auto&& uniform) {
+ uniform.location = glGetUniformLocation(shaderProgram, uniform.name.c_str());
+ },
+ uniform);
}
}