Spheres/primitive built-in meshes, cull-modes, vec4 uniforms
This commit is contained in:
106
shader.odin
106
shader.odin
@@ -123,12 +123,39 @@ reload_shader_program :: proc(renderer: ^Renderer, p: ^Shader_Program) -> bool {
|
||||
return true
|
||||
}
|
||||
|
||||
set_shader_uniforms :: proc(program: ^Shader_Program, uniforms: []Uniform) {
|
||||
fs_path := program.fragment_shader != nil ? program.fragment_shader.path : "nil"
|
||||
vs_path := program.vertex_shader != nil ? program.vertex_shader.path : "nil"
|
||||
|
||||
for u in uniforms {
|
||||
switch &t in u {
|
||||
case Uniform_Texture: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (texture) %v in program (vs: '%s', fs: '%s').", t.index, vs_path, fs_path) }}
|
||||
case Uniform_Float: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (float) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Float_Pointer: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (float pointer) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Matrix4f32: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (matrix4f32) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Matrix4f32_Pointer: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (matrix4f32 pointer) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Vector3: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (vector3) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Vector3_Pointer: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (vector3 pointer) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Vector4: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (vector4) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Vector4_Pointer: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (vector4 pointer) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Color: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (color) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
case Uniform_Color_Pointer: { if !set_shader_uniform(program, t) { fmt.printfln("Failed to set uniform (color pointer) '%v' in program (vs: '%s', fs: '%s').", t.name, vs_path, fs_path) }}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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_float_pointer,
|
||||
set_shader_uniform_matrix4f32,
|
||||
set_shader_uniform_matrix4f32_pointer,
|
||||
set_shader_uniform_vector3,
|
||||
set_shader_uniform_vector3_pointer,
|
||||
set_shader_uniform_vector4,
|
||||
set_shader_uniform_vector4_pointer,
|
||||
set_shader_uniform_color,
|
||||
set_shader_uniform_color_pointer,
|
||||
}
|
||||
|
||||
set_shader_uniform_texture :: proc(program: ^Shader_Program, uniform: Uniform_Texture) -> bool {
|
||||
@@ -143,13 +170,15 @@ set_shader_uniform_texture :: proc(program: ^Shader_Program, uniform: Uniform_Te
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_float :: proc(program: ^Shader_Program, uniform: Uniform_Float) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
set_shader_uniform_float_pointer :: proc(program: ^Shader_Program, uniform: Uniform_Float_Pointer) -> bool {
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
return set_shader_uniform(program, Uniform_Float { uniform.name, uniform.value^ })
|
||||
}
|
||||
set_shader_uniform_float :: proc(program: ^Shader_Program, uniform: Uniform_Float) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
@@ -160,13 +189,15 @@ set_shader_uniform_float :: proc(program: ^Shader_Program, uniform: Uniform_Floa
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_matrix4f32 :: proc(program: ^Shader_Program, uniform: Uniform_Matrix4f32) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
set_shader_uniform_matrix4f32_pointer :: proc(program: ^Shader_Program, uniform: Uniform_Matrix4f32_Pointer) -> bool {
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
return set_shader_uniform(program, Uniform_Matrix4f32 { uniform.name, uniform.value^ })
|
||||
}
|
||||
set_shader_uniform_matrix4f32 :: proc(program: ^Shader_Program, uniform: Uniform_Matrix4f32) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
@@ -177,13 +208,16 @@ set_shader_uniform_matrix4f32 :: proc(program: ^Shader_Program, uniform: Uniform
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_vector3 :: proc(program: ^Shader_Program, uniform: Uniform_Vector3) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
set_shader_uniform_vector3_pointer :: proc(program: ^Shader_Program, uniform: Uniform_Vector3_Pointer) -> bool {
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
return set_shader_uniform(program, Uniform_Vector3 { uniform.name, uniform.value^ })
|
||||
}
|
||||
|
||||
set_shader_uniform_vector3 :: proc(program: ^Shader_Program, uniform: Uniform_Vector3) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
@@ -194,13 +228,35 @@ set_shader_uniform_vector3 :: proc(program: ^Shader_Program, uniform: Uniform_Ve
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_color :: proc(program: ^Shader_Program, uniform: Uniform_Color) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
set_shader_uniform_vector4_pointer :: proc(program: ^Shader_Program, uniform: Uniform_Vector4_Pointer) -> bool {
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
return set_shader_uniform(program, Uniform_Vector4 { uniform.name, uniform.value^ })
|
||||
}
|
||||
|
||||
set_shader_uniform_vector4 :: proc(program: ^Shader_Program, uniform: Uniform_Vector4) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_vector4(program, uniform)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
set_shader_uniform_color_pointer :: proc(program: ^Shader_Program, uniform: Uniform_Color_Pointer) -> bool {
|
||||
if uniform.value == nil {
|
||||
return false
|
||||
}
|
||||
return set_shader_uniform(program, Uniform_Color { uniform.name, uniform.value^ })
|
||||
}
|
||||
set_shader_uniform_color :: proc(program: ^Shader_Program, uniform: Uniform_Color) -> bool {
|
||||
assert(program != nil)
|
||||
assert(len(uniform.name) > 0)
|
||||
|
||||
// TODO: SS - Somehow verify that 'uniform.name' exists in the shader(s)?
|
||||
|
||||
@@ -210,7 +266,7 @@ set_shader_uniform_color :: proc(program: ^Shader_Program, uniform: Uniform_Colo
|
||||
|
||||
u := Uniform_Vector3 {
|
||||
name = uniform.name,
|
||||
value = &rgb,
|
||||
value = rgb,
|
||||
}
|
||||
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
@@ -220,16 +276,14 @@ set_shader_uniform_color :: proc(program: ^Shader_Program, uniform: Uniform_Colo
|
||||
case RGBA_Color: {
|
||||
rgba := color_to_f32(c)
|
||||
|
||||
// u := Uniform_Vector4 {
|
||||
// name = uniform.name,
|
||||
// value = &rgba,
|
||||
// }
|
||||
u := Uniform_Vector4 {
|
||||
name = uniform.name,
|
||||
value = rgba,
|
||||
}
|
||||
|
||||
// TODO: SS - Set vector4.
|
||||
// when RENDER_BACKEND_OPENGL {
|
||||
// return opengl_set_shader_uniform_vector4(program, uniform)
|
||||
// }
|
||||
assert(false, "TODO: SS - Allow setting rgba in uniform.")
|
||||
when RENDER_BACKEND_OPENGL {
|
||||
return opengl_set_shader_uniform_vector4(program, u)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user