diff options
Diffstat (limited to 'source/Renderer.cpp')
-rw-r--r-- | source/Renderer.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/source/Renderer.cpp b/source/Renderer.cpp new file mode 100644 index 0000000..dec24ea --- /dev/null +++ b/source/Renderer.cpp @@ -0,0 +1,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); +} |