implemented basic renderer
This commit is contained in:
parent
be1abc3762
commit
5ba261c72c
11 changed files with 295 additions and 2 deletions
68
src/renderer/buffer.c
Normal file
68
src/renderer/buffer.c
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include "buffer.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <glad/glad.h>
|
||||
|
||||
void create_vao(VertexArrayObject* vao)
|
||||
{
|
||||
assert(vao);
|
||||
glGenVertexArrays(1, &vao->vao);
|
||||
}
|
||||
|
||||
void destroy_vao(VertexArrayObject vao)
|
||||
{
|
||||
glDeleteBuffers(1, &vao.ebo);
|
||||
glDeleteBuffers(1, &vao.vbo);
|
||||
|
||||
glDeleteVertexArrays(1, &vao.vao);
|
||||
}
|
||||
|
||||
void attach_vertex_buffer(VertexArrayObject* vao, const float* data, size_t size)
|
||||
{
|
||||
assert(vao);
|
||||
glBindVertexArray(vao->vao);
|
||||
|
||||
glGenBuffers(1, &vao->vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vao->vbo);
|
||||
|
||||
glBufferData(GL_ARRAY_BUFFER, size, (const void*)data, GL_STATIC_DRAW);
|
||||
}
|
||||
|
||||
void attach_element_buffer(VertexArrayObject* vao, const unsigned* data, size_t size)
|
||||
{
|
||||
assert(vao);
|
||||
glBindVertexArray(vao->vao);
|
||||
|
||||
glGenBuffers(1, &vao->ebo);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->ebo);
|
||||
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, (const void*)data, GL_STATIC_DRAW);
|
||||
|
||||
vao->elements = size / sizeof(unsigned);
|
||||
}
|
||||
|
||||
void set_vertex_layout(VertexArrayObject* vao, VertexAttribute* attributes, size_t count)
|
||||
{
|
||||
assert(vao);
|
||||
assert(attributes);
|
||||
|
||||
glBindVertexArray(vao->vao);
|
||||
|
||||
size_t stride = 0;
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
stride += attributes[i].size;
|
||||
}
|
||||
|
||||
size_t offset = 0;
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
glVertexAttribPointer(i, attributes[i].count, attributes[i].type, GL_FALSE, stride, (const void*)(offset));
|
||||
glEnableVertexAttribArray(i);
|
||||
|
||||
offset += attributes[i].size;
|
||||
}
|
||||
}
|
||||
|
||||
void bind_vao(VertexArrayObject vao)
|
||||
{
|
||||
glBindVertexArray(vao.vao);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue