karts/helpers/helpers.odin
2025-02-16 11:28:18 +13:00

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)
}
}
}