package model import "../helpers" import "../vertex" import gl "vendor:OpenGL" Model :: struct { vao: u32, vbo: u32, ibo: u32, materials: map[string]Material, } create :: proc(vertices: []vertex.Vertex, indices: []u32, materials: map[string]Material) -> Model { model: Model gl.CreateVertexArrays(1, &model.vao) gl.CreateBuffers(1, &model.vbo) gl.CreateBuffers(1, &model.ibo) gl.VertexArrayVertexBuffer(model.vao, 0, model.vbo, 0, size_of(vertex.Vertex)) gl.VertexArrayElementBuffer(model.vao, model.ibo) helpers.setup_vertex_attributes(model.vao, vertex.Vertex) gl.NamedBufferData(model.vbo, len(vertices) * size_of(vertex.Vertex), raw_data(vertices), gl.STATIC_DRAW) gl.NamedBufferData(model.ibo, len(indices) * size_of(u32), raw_data(indices), gl.STATIC_DRAW) model.materials = materials return model }