blob: dec24ea9861271db81195d17477a6cbd71cdee61 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include "Renderer.hpp"
RenderObject::RenderObject(GpuMesh* mesh, Material* material) {
glGenVertexArrays(1, &mVao);
glBindVertexArray(mVao);
auto& vf = mesh->vertFormat;
auto& vBindings = mesh->vertBufBindings.bindings;
auto& shaderInfo = material->GetShader()->GetInfo();
// Setup vertex buffers
for (auto& elm : vf->elements) {
assert(elm.bindingIndex < vBindings.size());
auto& buffer = vBindings[elm.bindingIndex];
int index = material->GetShader()->GetInfo().FindInputLocation(elm.semantic);
glBindBuffer(GL_ARRAY_BUFFER, buffer->handle);
glEnableVertexAttribArray(index);
glVertexAttribPointer(
index,
Tags::VectorLenOf(elm.type),
Tags::FindGLType(elm.type),
Tags::IsNormalized(elm.type),
vf->vertexSize,
(void*)(uintptr_t)elm.offset);
}
// Setup index buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->indexBuf->handle);
glBindVertexArray(GL_NONE);
}
RenderObject::~RenderObject() {
glDeleteVertexArrays(1, &mVao);
}
void Renderer::Draw(RenderObject& object) {
auto indexType = object.GetMesh()->indexBuf->indexType;
glBindVertexArray(object.GetGLVao());
glDrawElements(GL_TRIANGLES, 0, Tags::FindGLType(indexType), 0);
}
|