diff options
author | hnOsmium0001 <[email protected]> | 2022-04-17 20:08:57 -0700 |
---|---|---|
committer | hnOsmium0001 <[email protected]> | 2022-04-17 20:08:57 -0700 |
commit | d43508ba4843801cbbf1f42a27af260d4eef5701 (patch) | |
tree | 39c51368cfe8ec097c08f198877cf07e9ff835ee /source/Renderer.cpp | |
parent | 509201784d6525fc26345e55a56ab81e4a7616b3 (diff) |
Initial work on sprites and texture system
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); +} |