Files
O2048/zephr/shader.odin
T

58 lines
1.5 KiB
Odin
Raw Normal View History

2024-01-19 23:55:07 +02:00
package zephr
import "core:fmt"
import gl "vendor:OpenGL"
Shader :: struct {
program: u32
}
create_shader :: proc(vertex_path: string, fragment_path: string) -> (Shader, bool) {
shader: Shader
program, success := gl.load_shaders(vertex_path, fragment_path)
shader.program = program
2024-01-19 23:55:07 +02:00
return shader, success
2024-01-19 23:55:07 +02:00
}
use_shader :: proc(shader: Shader) {
gl.UseProgram(shader.program)
2024-01-19 23:55:07 +02:00
}
set_mat4f :: proc(shader: Shader, name: cstring, mat4: Mat4, transpose: bool = false) {
mat4 := mat4
loc := gl.GetUniformLocation(shader.program, name)
2024-01-19 23:55:07 +02:00
gl.UniformMatrix4fv(loc, 1, transpose, raw_data(&mat4))
}
set_float :: proc(shader: Shader, name: cstring, val: f32) {
loc := gl.GetUniformLocation(shader.program, name)
gl.Uniform1f(loc, val)
2024-01-19 23:55:07 +02:00
}
set_int :: proc(shader: Shader, name: cstring, val: i32) {
loc := gl.GetUniformLocation(shader.program, name)
gl.Uniform1i(loc, val)
2024-01-19 23:55:07 +02:00
}
set_bool :: proc(shader: Shader, name: cstring, val: bool) {
set_int(shader, name, cast(i32)val)
2024-01-19 23:55:07 +02:00
}
set_vec2f :: proc(shader: Shader, name: cstring, val1: f32, val2: f32) {
loc := gl.GetUniformLocation(shader.program, name)
gl.Uniform2f(loc, val1, val2)
2024-01-19 23:55:07 +02:00
}
set_vec3f :: proc(shader: Shader, name: cstring, val1: f32, val2: f32, val3: f32) {
loc := gl.GetUniformLocation(shader.program, name)
gl.Uniform3f(loc, val1, val2, val3)
2024-01-19 23:55:07 +02:00
}
set_vec4f :: proc(shader: Shader, name: cstring, val1: f32, val2: f32, val3: f32, val4: f32) {
loc := gl.GetUniformLocation(shader.program, name)
gl.Uniform4f(loc, val1, val2, val3, val4)
2024-01-19 23:55:07 +02:00
}