32 lines
979 B
Odin
32 lines
979 B
Odin
#+feature dynamic-literals
|
|
package helpers
|
|
|
|
import "base:runtime"
|
|
import gl "vendor:OpenGL"
|
|
|
|
gl_types := map[typeid]u32 {
|
|
i8 = gl.BYTE,
|
|
u8 = gl.UNSIGNED_BYTE,
|
|
i32 = gl.INT,
|
|
u32 = gl.UNSIGNED_INT,
|
|
f32 = gl.FLOAT,
|
|
}
|
|
|
|
setup_vertex_attributes :: proc(vao: u32, $T: typeid) {
|
|
vertex_type_info := type_info_of(T).variant.(runtime.Type_Info_Named).base.variant.(runtime.Type_Info_Struct)
|
|
|
|
for i in 0 ..< u32(vertex_type_info.field_count) {
|
|
field_type := vertex_type_info.types[i]
|
|
field_offset := u32(vertex_type_info.offsets[i])
|
|
|
|
gl.EnableVertexArrayAttrib(vao, i)
|
|
gl.VertexArrayAttribBinding(vao, i, 0)
|
|
|
|
#partial switch v in field_type.variant {
|
|
case runtime.Type_Info_Array:
|
|
gl.VertexArrayAttribFormat(vao, i, i32(v.count), gl_types[v.elem.id], false, field_offset)
|
|
case:
|
|
gl.VertexArrayAttribFormat(vao, i, 1, gl_types[field_type.id], false, field_offset)
|
|
}
|
|
}
|
|
}
|