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