Renderer outline started

VertexBuffer class implemented
master
Joey Pollack 3 years ago
parent 52eb549715
commit e74ba8594b

3
.gitignore vendored

@ -66,4 +66,5 @@ build/
ui_files/
######################## TEST FILE IGNORES
test*/
test*/
/ui assets

@ -72,6 +72,7 @@ set(LUNARIUM_SRC
"src/utils/uuid.cpp"
"src/platform/window.cpp"
"src/platform/terminal.cpp"
"src/graphics/renderer/vertex_buffer.cpp"
"src/graphics/opengl/glGraphics.cpp"
"src/graphics/opengl/glText.cpp"
"src/graphics/opengl/glShader.cpp"

@ -0,0 +1,21 @@
/******************************************************************************
* File - frame_buffer.h
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - OpenGL Frame buffer object
******************************************************************************/
#ifndef LUNARIUM_FRAME_BUFFER_H_
#define LUNARIUM_FRAME_BUFFER_H_
namespace lunarium
{
class FrameBuffer
{
};
}
#endif // LUNARIUM_FRAME_BUFFER_H_

@ -0,0 +1,29 @@
/******************************************************************************
* File - render_context.h
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - General setup/shutdown for the render system
******************************************************************************/
#ifndef LUNARIUM_RENDER_CONTEXT_H_
#define LUNARIUM_RENDER_CONTEXT_H_
namespace lunarium
{
class Window;
// NOTE:
// This class will probably not be exposed outside of the Core
// The Core will expose Renderer2D instead
class RenderContext
{
private:
Window* mpWindow;
};
}
#endif // LUNARIUM_RENDER_CONTEXT_H_

@ -0,0 +1,21 @@
/******************************************************************************
* File - renderer2D.h
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - The main 2D render class
******************************************************************************/
#ifndef LUNARIUM_RENDERER_2D_H_
#define LUNARIUM_RENDERER_2D_H_
namespace lunarium
{
class Renderer2D
{
};
}
#endif // LUNARIUM_RENDERER_2D_H_

@ -0,0 +1,125 @@
/******************************************************************************
* File - vertex_buffer.cpp
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - OpenGL vertex buffer object
******************************************************************************/
#include "vertex_buffer.h"
#include <glad/gl.h>
#include <utils/logger.h>
namespace lunarium
{
VertexBuffer::VertexBuffer(LayoutType ltype, const void* vertices, u32 size)
: mLayoutType(ltype), mSize(size), mIndex(0), mIsStatic(true)
{
glGenVertexArrays(1, &mVAO);
glGenBuffers(1, &mVBO);
Bind();
glBufferData(GL_ARRAY_BUFFER, size, vertices, GL_STATIC_DRAW);
InitLayout();
}
VertexBuffer::VertexBuffer(LayoutType ltype, u32 size)
: mLayoutType(ltype), mSize(size), mIndex(0), mIsStatic(false)
{
glGenVertexArrays(1, &mVAO);
glGenBuffers(1, &mVBO);
Bind();
glBufferData(GL_ARRAY_BUFFER, size, nullptr, GL_DYNAMIC_DRAW);
InitLayout();
}
void VertexBuffer::Bind()
{
glBindVertexArray(mVAO);
glBindBuffer(GL_ARRAY_BUFFER, mVBO);
}
void VertexBuffer::Unbind()
{
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
bool VertexBuffer::PushVertices(const void* vertices, u32 size)
{
if (mIsStatic)
{
Logger::Warn(LogCategory::GRAPHICS, "Cannot push vertices into a static buffer!");
return false;
}
if (mIndex + size >= mSize)
{
// Vertices do not fit into the buffer
return false;
}
// Add verts to the buffer
Bind();
glBufferSubData(GL_ARRAY_BUFFER, mIndex, size, vertices);
Unbind();
mIndex += size;
return true;
}
/////////////////////////////////////////////////////////////////////
// HELPER METHODS
/////////////////////////////////////////////////////////////////////
void VertexBuffer::InitLayout()
{
switch (mLayoutType)
{
case LayoutType::LINE:
{
Logger::Error(LogCategory::GRAPHICS, "Vertex layout type LINE not supported yet!");
}
break;
case LayoutType::QUAD:
{
// position
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 10 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
// Texture coords
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 10 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
// Color
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 10 * sizeof(GLfloat), (GLvoid*)(5 * sizeof(float)));
glEnableVertexAttribArray(2);
// Texture sampler index
glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 10 * sizeof(GLfloat), (GLvoid*)(9 * sizeof(float)));
glEnableVertexAttribArray(2);
}
break;
case LayoutType::SPRITE:
{
Logger::Error(LogCategory::GRAPHICS, "Vertex layout type SPRITE not supported yet!");
}
break;
default:
Logger::Warn(LogCategory::GRAPHICS, "UNKNOWN Vertex Layout Type: %d", mLayoutType);
}
}
}

@ -0,0 +1,53 @@
/******************************************************************************
* File - vertex_buffer.h
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - OpenGL vertex buffer object
******************************************************************************/
#ifndef LUNARIUM_VERTEX_BUFFER_H_
#define LUNARIUM_VERTEX_BUFFER_H_
#include <core/common_defs.h>
namespace lunarium
{
// For now this class will also contain the VAO for the buffer
class VertexBuffer
{
public:
enum LayoutType
{
LINE,
QUAD,
SPRITE,
};
public:
VertexBuffer(LayoutType ltype, const void* vertices, u32 size);
VertexBuffer(LayoutType ltype, u32 size);
void Bind();
void Unbind();
// Returns false if the data does not fit in the buffer
bool PushVertices(const void* vertices, u32 size);
private:
LayoutType mLayoutType;
bool mIsStatic;
u32 mVAO;
u32 mVBO;
u32 mSize;
u32 mIndex; // The next spot to push data into for a dynamic buffer
private: // HELPER METHODS
void InitLayout();
};
}
#endif // LUNARIUM_VERTEX_BUFFER_H_
Loading…
Cancel
Save