From 5424a1d5434e3ddd911a504719918c2df027e2fd Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sun, 17 Apr 2022 20:08:57 -0700 Subject: Changeset: 8 Initial work on sprites and texture system --- source/Renderer.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/Renderer.cpp (limited to 'source/Renderer.cpp') 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); +} -- cgit v1.2.3-70-g09d2