31 lines
892 B
Odin
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
|
|
}
|