feat(shaders): Implement uniform data passing for ShaderManager
This commit is contained in:
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user