renderer structure

This commit is contained in:
Ben
2021-02-17 03:47:08 +00:00
parent fb75f6b8d6
commit 9f9daa3a6e
9 changed files with 207 additions and 2 deletions

View File

@@ -44,13 +44,15 @@ file(GLOB SourceFiles
${SrcDIR}/* ${SrcDIR}/*
${SrcDIR}/ThirdParty/* ${SrcDIR}/ThirdParty/*
${SrcDIR}/Rendering/* ${SrcDIR}/Rendering/*
${SrcDIR}/Rendering/Platform/*
${SrcDIR}/World/*
) )
add_executable(${executable} ${SourceFiles}) add_executable(${executable} ${SourceFiles})
set_target_properties(${executable} PROPERTIES set_target_properties(${executable} PROPERTIES
CXX_STANDARD 17 CXX_STANDARD 20
CXX_EXTENSIONS OFF CXX_EXTENSIONS ON
) )
if (UNIX) if (UNIX)

6
src/Rendering/mesh.cpp Normal file
View File

@@ -0,0 +1,6 @@
#include "mesh.hpp"
Mesh::Mesh()
{
}

23
src/Rendering/mesh.hpp Normal file
View File

@@ -0,0 +1,23 @@
#ifndef MINECRAFT_RENDERING_MESH_H_
#define MINECRAFT_RENDERING_MESH_H_
class Vertex
{
public:
glm::vec3 Position;
glm::vec3 SurfaceNormal;
};
class Mesh
{
public:
Mesh();
};
#endif

View File

@@ -0,0 +1,66 @@
#include "renderable.hpp"
#include <algorithm>
Renderable::Renderable()
{
}
void Renderable::Init()
{
}
void Renderable::AddMesh( Mesh* mesh )
{
if (mesh == nullptr) return;
mMeshs.push_back( mesh );
}
void Renderable::RemoveMesh( Mesh* mesh )
{
// Renderable does not include mesh
if (std::find( mMeshs.begin(), mMeshs.end(), mesh ) == mMeshs.end())
return;
std::remove( mMeshs.begin(), mMeshs.end(), mesh );
}
void Renderable::SetActiveMesh( Mesh* mesh )
{
// Renderable does not include mesh
if (std::find( mMeshs.begin(), mMeshs.end(), mesh ) == mMeshs.end())
return;
mActiveMesh = mesh;
}
Mesh* Renderable::GetActiveMesh()
{
return mActiveMesh;
}
void Renderable::UpdateBuffer()
{
}
void Renderable::Load()
{
}
void Renderable::Unload()
{
}
Renderable::~Renderable()
{
Unload();
}

View File

@@ -0,0 +1,47 @@
#ifndef MINECRAFT_RENDERING_RENDERABLE_H_
#define MINECRAFT_RENDERING_RENDERABLE_H_
#include "../common.hpp"
class Mesh;
// Basically a model but thats effort
// perhaps sub-class?
class Renderable
{
public:
Renderable();
void Init();
// DOES NOT OWN MESH
void AddMesh( Mesh* );
void RemoveMesh( Mesh* );
void SetActiveMesh( Mesh* );
Mesh* GetActiveMesh();
void UpdateBuffer();
// GPU Load methods
void Load();
void Unload();
~Renderable();
private:
std::vector<glm::vec3> mBuff;
std::vector<Mesh*> mMeshs;
Mesh* mActiveMesh;
GLuint mActiveVAO;
GLuint mActiveVBO;
// Meshes have uniform uniforms
GLuint mUBO;
glm::mat4 mModelMatrix;
};
#endif

View File

@@ -0,0 +1,11 @@
#include "rendermaster.hpp"
RenderMaster::RenderMaster()
: mWorldRenderer(),
mMeshRenderer()
{
}

View File

@@ -0,0 +1,40 @@
#ifndef MINECRAFT_RENDERING_RENDERMASTER_H_
#define MINECRAFT_RENDERING_RENDERMASTER_H_
/**
* Renderer Structure
*
* Mesh -> Renderable
* Renderable -> Model
* Renderable -> World (static(?))
* Renderable -> Entity (dynamic)
* Renderable -> Particle (dynamic)
*
* Kinda just winging it ngl
*/
class WorldRenderer
{
};
class MeshRenderer
{
};
class RenderMaster
{
public:
RenderMaster();
WorldRenderer mWorldRenderer;
MeshRenderer mMeshRenderer;
};
#endif

View File

@@ -13,7 +13,11 @@
#include "display.hpp" #include "display.hpp"
#include "settings.hpp" #include "settings.hpp"
#include "Rendering/rendermaster.hpp"
#include "Rendering/texture.hpp" #include "Rendering/texture.hpp"
#include "Rendering/camera.hpp"
#include "Rendering/mesh.hpp"
#define __DEBUG #define __DEBUG
@@ -39,6 +43,9 @@ void Loop( Display* display )
{ {
SDL_Event e; SDL_Event e;
while ( display->IsWindowOpen ) while ( display->IsWindowOpen )
{ {
display->PrepareFrame(); display->PrepareFrame();
@@ -49,6 +56,9 @@ void Loop( Display* display )
// rendering here // rendering here
display->NextFrame(); display->NextFrame();
} }