Successfully rendered a quad!
This commit is contained in:
81
shader.odin
Normal file
81
shader.odin
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user