Successfully rendered a quad!

This commit is contained in:
2025-11-25 04:14:07 +01:00
parent 3c3df9796a
commit 28ca7625b8
6 changed files with 334 additions and 9 deletions

81
shader.odin Normal file
View File

@@ -0,0 +1,81 @@
package renderer
import os "core:os/os2"
Shader :: struct {
type: Shader_Type,
backend: Shader_Backend,
}
Shader_Program :: struct {
vertex_shader, fragment_shader: Shader,
backend: Shader_Program_Backend,
}
Shader_Type :: enum {
Vertex,
Fragment,
// ..
}
create_shader :: proc(renderer: ^Renderer, type: Shader_Type, path: string) -> (Shader, bool) {
bytes, error := os.read_entire_file_from_path(path, context.allocator)
if error != nil {
return {}, false
}
defer delete(bytes)
s: Shader
s.type = type
when RENDER_BACKEND_OPENGL {
shader_opengl, ok := opengl_create_shader(renderer, type, bytes)
if !ok {
return {}, false
}
s.backend = shader_opengl
}
else {
#assert(false)
}
return s, true
}
delete_shader :: proc(renderer: ^Renderer, shader: ^Shader) {
assert(shader != nil)
when RENDER_BACKEND_OPENGL {
opengl_delete_shader(renderer, shader)
}
}
create_shader_program :: proc(renderer: ^Renderer, vertex_shader, fragment_shader: ^Shader) -> (Shader_Program, bool) {
assert(vertex_shader != nil)
assert(fragment_shader != nil)
p: Shader_Program
p.vertex_shader = vertex_shader^
p.fragment_shader = fragment_shader^
when RENDER_BACKEND_OPENGL {
program_opengl, ok := opengl_create_shader_program(renderer, vertex_shader, fragment_shader)
if !ok {
return {}, false
}
p.backend = program_opengl
}
else {
#assert(false)
}
return p, true
}
delete_shader_program :: proc(renderer: ^Renderer, shader_program: ^Shader_Program) {
assert(shader_program != nil)
when RENDER_BACKEND_OPENGL {
opengl_delete_shader_program(renderer, shader_program)
}
}