Skip to content

Commit

Permalink
Index Buffers now working
Browse files Browse the repository at this point in the history
  • Loading branch information
tomheeleynz committed Nov 18, 2022
1 parent 12d99aa commit c516dc4
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 11 deletions.
8 changes: 4 additions & 4 deletions Arcane/src/Arcane/Platform/OpenGL/OpenGLBuffer.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "OpenGLBuffer.h"

#include <iostream>
#include <glad/glad.h>

namespace Arcane
Expand Down Expand Up @@ -41,11 +42,10 @@ namespace Arcane
OpenGLIndexBuffer::OpenGLIndexBuffer(void* data, uint32_t count)
{
m_Count = count;

glGenBuffers(1, &m_EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(uint32_t) * count, data, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, m_EBO);
glBufferData(GL_ARRAY_BUFFER, count * sizeof(uint32_t), data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}

uint32_t OpenGLIndexBuffer::GetCount()
Expand Down
3 changes: 2 additions & 1 deletion Arcane/src/Arcane/Platform/OpenGL/OpenGLBuffer.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#pragma once
#include "Arcane/Renderer/Buffer.h"

#include <vector>

namespace Arcane
{
////////////////////////////////////////////////////////
Expand Down Expand Up @@ -28,7 +30,6 @@ namespace Arcane
{
public:
OpenGLIndexBuffer(void* data, uint32_t count);

uint32_t GetCount();

void Bind();
Expand Down
24 changes: 24 additions & 0 deletions Arcane/src/Arcane/Platform/OpenGL/OpenGLRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,30 @@ namespace Arcane

void OpenGLRenderer::RenderQuad(VertexBuffer* buffer, Pipeline* pipeline)
{
OpenGLVertexBuffer* vertexBuffer = static_cast<OpenGLVertexBuffer*>(buffer);
OpenGLPipeline* openglPipeline = static_cast<OpenGLPipeline*>(pipeline);
OpenGLVertexDescriptor* vertexDescriptor = static_cast<OpenGLVertexDescriptor*>(openglPipeline->GetSpec().descriptor);
OpenGLIndexBuffer* indexBuffer = static_cast<OpenGLIndexBuffer*>(vertexBuffer->GetIndexBuffer());

// Bind Shader
openglPipeline->BindShader();

// Bind VAO
if (!vertexDescriptor->GetIsGenerated()) {
vertexDescriptor->Generate(buffer);
}

openglPipeline->BindVertexDescriptor();
indexBuffer->Bind();

// Draw
glDrawElements(GL_TRIANGLES, indexBuffer->GetCount(), GL_UNSIGNED_INT, 0);

// Unbind Everyting
openglPipeline->UnbindVertexDescriptor();
openglPipeline->UnbindShader();
vertexBuffer->UnBind();
indexBuffer->UnBind();
}

void OpenGLRenderer::RenderQuad(VertexBuffer* buffer, Pipeline* pipeline, std::vector<DescriptorSet*> descriptorSets)
Expand Down
5 changes: 4 additions & 1 deletion Arcane/src/Arcane/Platform/OpenGL/OpenGLVertexDescriptor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,10 @@ namespace Arcane

// Bind Vertex Buffer
OpenGLVertexBuffer* openglBuffer = static_cast<OpenGLVertexBuffer*>(buffer);
OpenGLIndexBuffer* indexBuffer = static_cast<OpenGLIndexBuffer*>(buffer->GetIndexBuffer());

openglBuffer->Bind();
indexBuffer->Bind();

// Set Attrib Array
for (int i = 0; i < m_AttribSpecs.size(); i++) {
Expand All @@ -109,8 +112,8 @@ namespace Arcane

// Cleanup
openglBuffer->UnBind();
indexBuffer->UnBind();
glBindVertexArray(0);

m_IsGenerated = true;
}
}
18 changes: 13 additions & 5 deletions EnchantingTable/src/OpenGLTestLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,20 @@ void OpenGLTestLayer::OnAttach()

// Vertex buffer
float vertices[] = {
0.5f, 0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.0f, -0.5f, 0.0f
0.5f, 0.5f, 0.0f, // top right
0.5f, -0.5f, 0.0f, // bottom right
-0.5f, -0.5f, 0.0f, // bottom left
-0.5f, 0.5f, 0.0f // top left
};

m_VertexBuffer = Arcane::VertexBuffer::Create(vertices, sizeof(float) * 9);
uint32_t indices[] = { // note that we start from 0!
0, 1, 3, // first Triangle
1, 2, 3 // second Triangle
};

m_VertexBuffer = Arcane::VertexBuffer::Create(vertices, sizeof(float) * 12);
m_IndexBuffer = Arcane::IndexBuffer::Create(indices, 6);
m_VertexBuffer->AddIndexBuffer(m_IndexBuffer);

// Vertex Descriptor
m_VertexDescriptor = Arcane::VertexDescriptor::Create({
Expand All @@ -56,7 +64,7 @@ void OpenGLTestLayer::OnUpdate(float deltaTime)
{
Arcane::Renderer::BeginRenderPass(m_RenderPass);
{
Arcane::Renderer::RenderTriangle(m_VertexBuffer, m_Pipeline);
Arcane::Renderer::RenderQuad(m_VertexBuffer, m_Pipeline);
}
Arcane::Renderer::EndRenderPass(m_RenderPass);
}
Expand Down
1 change: 1 addition & 0 deletions EnchantingTable/src/OpenGLTestLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class OpenGLTestLayer : public Arcane::Layer
Arcane::Framebuffer* m_Framebuffer;
Arcane::RenderPass* m_RenderPass;
Arcane::VertexBuffer* m_VertexBuffer;
Arcane::IndexBuffer* m_IndexBuffer;
Arcane::Shader* m_Shader;
Arcane::VertexDescriptor* m_VertexDescriptor;
Arcane::Pipeline* m_Pipeline;
Expand Down

0 comments on commit c516dc4

Please sign in to comment.