diff options
| author | Mozzarella32 <143010987+Mozzarella32@users.noreply.github.com> | 2025-10-18 13:34:33 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-18 13:34:33 +0200 |
| commit | 6607c6440d4e3e7313e421f6258b52e6b7982170 (patch) | |
| tree | 3551cc4153d22a354c64335e8e4460b277ce9c62 /src/render/Shader.cpp | |
| parent | f3e13193a610bbcc36960ded8a25793bcff873b6 (diff) | |
renderer: add 1fv and 2fv uniform support (#12080)
Diffstat (limited to 'src/render/Shader.cpp')
| -rw-r--r-- | src/render/Shader.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/render/Shader.cpp b/src/render/Shader.cpp index 60a27092..5081d4c4 100644 --- a/src/render/Shader.cpp +++ b/src/render/Shader.cpp @@ -166,20 +166,37 @@ void SShader::setUniformMatrix4x2fv(eShaderUniform location, GLsizei count, GLbo glUniformMatrix4x2fv(uniformLocations[location], count, transpose, value.data()); } -void SShader::setUniform4fv(eShaderUniform location, GLsizei count, std::vector<float> value) { +void SShader::setUniformfv(eShaderUniform location, GLsizei count, const std::vector<float>& value, GLsizei vec_size) { if (uniformLocations.at(location) == -1) return; auto& cached = uniformStatus.at(location); if (cached.index() != 0) { - auto val = std::get<SUniform4Data>(cached); + auto val = std::get<SUniformVData>(cached); if (val.count == count && compareFloat(val.value, value)) return; } - cached = SUniform4Data{.count = count, .value = value}; - glUniform4fv(uniformLocations[location], count, value.data()); + cached = SUniformVData{.count = count, .value = value}; + switch (vec_size) { + case 1: glUniform1fv(uniformLocations[location], count, value.data()); break; + case 2: glUniform2fv(uniformLocations[location], count, value.data()); break; + case 4: glUniform4fv(uniformLocations[location], count, value.data()); break; + default: UNREACHABLE(); + } +} + +void SShader::setUniform1fv(eShaderUniform location, GLsizei count, const std::vector<float>& value) { + setUniformfv(location, count, value, 1); +} + +void SShader::setUniform2fv(eShaderUniform location, GLsizei count, const std::vector<float>& value) { + setUniformfv(location, count, value, 2); +} + +void SShader::setUniform4fv(eShaderUniform location, GLsizei count, const std::vector<float>& value) { + setUniformfv(location, count, value, 4); } void SShader::destroy() { |
