feat(shaders): Implement uniform data passing for ShaderManager

This commit is contained in:
2026-03-13 12:29:10 -04:00
parent ac4f63b76e
commit 09383960be
2 changed files with 49 additions and 1 deletions

View File

@@ -3,7 +3,7 @@ import OpenGL.GL as gl
class ShaderManager:
def __init__(self):
pass
self.program = None
def compile_shader(self, vertex_src: str, fragment_src: str) -> int:
program = gl.glCreateProgram()
@@ -37,4 +37,26 @@ class ShaderManager:
gl.glDeleteShader(vert_shader)
gl.glDeleteShader(frag_shader)
self.program = program
return program
def update_uniforms(self, uniforms: dict):
if self.program is None:
return
for name, value in uniforms.items():
loc = gl.glGetUniformLocation(self.program, name)
if loc == -1:
continue
if isinstance(value, float):
gl.glUniform1f(loc, value)
elif isinstance(value, int):
gl.glUniform1i(loc, value)
elif isinstance(value, (list, tuple)):
if len(value) == 2:
gl.glUniform2f(loc, value[0], value[1])
elif len(value) == 3:
gl.glUniform3f(loc, value[0], value[1], value[2])
elif len(value) == 4:
gl.glUniform4f(loc, value[0], value[1], value[2], value[3])