Index buffer

This commit is contained in:
Light3039 2021-05-28 13:13:45 +04:30
parent 9ae205ac82
commit 1e48369bb8
5 changed files with 85 additions and 22 deletions

View file

@ -0,0 +1,34 @@
#include "ltpch.h"
#include "Buffers.h"
#include "OpenGL/glBuffers.h"
#include "GraphicsContext.h"
namespace Light {
VertexBuffer* VertexBuffer::Create(unsigned int count, float* vertices)
{
switch (GraphicsContext::GetGraphicsAPI())
{
case GraphicsAPI::OpenGL:
return new glVertexBuffer(count, vertices);
default:
LT_ENGINE_ASSERT(false, "VertexBuffer::Create: invalid/unsupported GraphicsAPI {}", GraphicsContext::GetGraphicsAPI());
return nullptr;
}
}
IndexBuffer* IndexBuffer::Create(unsigned int count, unsigned int* indices)
{
switch (GraphicsContext::GetGraphicsAPI())
{
case GraphicsAPI::OpenGL:
return new glIndexBuffer(count, indices);
default:
LT_ENGINE_ASSERT(false, "IndexBuffer::Create: invalid/unsupported GraphicsAPI {}", GraphicsContext::GetGraphicsAPI());
return nullptr;
}
}
}

View file

@ -9,7 +9,6 @@ namespace Light {
public:
static VertexBuffer* Create(unsigned int count, float* vertices);
virtual void Bind() = 0;
virtual void UnBind() = 0;
@ -17,4 +16,16 @@ namespace Light {
VertexBuffer() = default;
};
class IndexBuffer
{
public:
static IndexBuffer* Create(unsigned int count, unsigned int* indices);
virtual void Bind() = 0;
virtual void UnBind() = 0;
protected:
IndexBuffer() = default;
};
}

View file

@ -1,19 +0,0 @@
#include "ltpch.h"
#include "VertexBuffer.h"
#include "OpenGL/glVertexBuffer.h"
#include "GraphicsContext.h"
namespace Light {
VertexBuffer* VertexBuffer::Create(unsigned int count, float* vertices)
{
switch (GraphicsContext::GetGraphicsAPI())
{
case GraphicsAPI::OpenGL:
return new glVertexBuffer(count, vertices);
}
}
}

View file

@ -1,5 +1,5 @@
#include "ltpch.h"
#include "glVertexBuffer.h"
#include "glBuffers.h"
#include <glad/glad.h>
@ -27,4 +27,27 @@ namespace Light {
glBindBuffer(GL_ARRAY_BUFFER, NULL);
}
glIndexBuffer::glIndexBuffer(unsigned int count, unsigned int* indices)
{
glCreateBuffers(1, &m_BufferID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_BufferID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(unsigned int), indices, GL_STATIC_DRAW);
}
glIndexBuffer::~glIndexBuffer()
{
glDeleteBuffers(1, &m_BufferID);
}
void glIndexBuffer::Bind()
{
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_BufferID);
}
void glIndexBuffer::UnBind()
{
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, NULL);
}
}

View file

@ -1,7 +1,7 @@
#pragma once
#include "Base.h"
#include "Graphics/VertexBuffer.h"
#include "Graphics/Buffers.h"
namespace Light {
@ -9,6 +9,7 @@ namespace Light {
{
private:
unsigned int m_BufferID;
public:
glVertexBuffer(unsigned int count, float* vertices);
~glVertexBuffer();
@ -16,5 +17,18 @@ namespace Light {
void Bind() override;
void UnBind() override;
};
class glIndexBuffer : public IndexBuffer
{
private:
unsigned int m_BufferID;
public:
glIndexBuffer(unsigned int count, unsigned int* indices);
~glIndexBuffer();
void Bind() override;
void UnBind() override;
};
}