Allowed setting uniforms in shader
This commit is contained in:
70
shader.odin
70
shader.odin
@@ -122,3 +122,73 @@ reload_shader_program :: proc(renderer: ^Renderer, p: ^Shader_Program) -> bool {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
set_shader_uniform :: proc { // TODO: SS - Improve setting shader uniforms. A bit bug-prone and annoying to explicitly add code-paths for every 'Uniform' type needed.
|
||||
set_shader_uniform_texture,
|
||||
set_shader_uniform_float,
|
||||
set_shader_uniform_matrix4f32,
|
||||
set_shader_uniform_vector3,
|
||||
}
|
||||
|
||||
set_shader_uniform_texture :: proc(program: ^Shader_Program, uniform: Uniform_Texture) -> bool {
|
||||
assert(program != nil)
|
||||
assert(uniform.index < MATERIAL_MAX_TEXTURES)
|
||||
assert(uniform.value != nil)
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_texture(program, uniform)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_float :: proc(program: ^Shader_Program, uniform: Uniform_Float) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_float(program, uniform)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_matrix4f32 :: proc(program: ^Shader_Program, uniform: Uniform_Matrix4f32) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_matrix4f32(program, uniform)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_vector3 :: proc(program: ^Shader_Program, uniform: Uniform_Vector3) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_vector3(program, uniform)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user