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

31 lines
892 B
Odin

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
}