From 9f9daa3a6e1b7184ccdbf131b467dfdfe8ccbf6c Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 17 Feb 2021 03:47:08 +0000 Subject: [PATCH] renderer structure --- CMakeLists.txt | 6 ++-- src/Rendering/mesh.cpp | 6 ++++ src/Rendering/mesh.hpp | 23 ++++++++++++ src/Rendering/renderable.cpp | 66 ++++++++++++++++++++++++++++++++++ src/Rendering/renderable.hpp | 47 ++++++++++++++++++++++++ src/Rendering/rendermaster.cpp | 11 ++++++ src/Rendering/rendermaster.hpp | 40 +++++++++++++++++++++ {legacy/src => src}/common.hpp | 0 src/main.cpp | 10 ++++++ 9 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 src/Rendering/mesh.cpp create mode 100644 src/Rendering/mesh.hpp create mode 100644 src/Rendering/renderable.cpp create mode 100644 src/Rendering/renderable.hpp create mode 100644 src/Rendering/rendermaster.cpp create mode 100644 src/Rendering/rendermaster.hpp rename {legacy/src => src}/common.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24a0a20..d42e861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,13 +44,15 @@ file(GLOB SourceFiles ${SrcDIR}/* ${SrcDIR}/ThirdParty/* ${SrcDIR}/Rendering/* + ${SrcDIR}/Rendering/Platform/* + ${SrcDIR}/World/* ) add_executable(${executable} ${SourceFiles}) set_target_properties(${executable} PROPERTIES - CXX_STANDARD 17 - CXX_EXTENSIONS OFF + CXX_STANDARD 20 + CXX_EXTENSIONS ON ) if (UNIX) diff --git a/src/Rendering/mesh.cpp b/src/Rendering/mesh.cpp new file mode 100644 index 0000000..6056583 --- /dev/null +++ b/src/Rendering/mesh.cpp @@ -0,0 +1,6 @@ +#include "mesh.hpp" + +Mesh::Mesh() +{ + +} diff --git a/src/Rendering/mesh.hpp b/src/Rendering/mesh.hpp new file mode 100644 index 0000000..644fb1d --- /dev/null +++ b/src/Rendering/mesh.hpp @@ -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 diff --git a/src/Rendering/renderable.cpp b/src/Rendering/renderable.cpp new file mode 100644 index 0000000..68a7d31 --- /dev/null +++ b/src/Rendering/renderable.cpp @@ -0,0 +1,66 @@ +#include "renderable.hpp" + +#include + +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(); +} + + + diff --git a/src/Rendering/renderable.hpp b/src/Rendering/renderable.hpp new file mode 100644 index 0000000..0b81cf3 --- /dev/null +++ b/src/Rendering/renderable.hpp @@ -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 mBuff; + + std::vector mMeshs; + Mesh* mActiveMesh; + + GLuint mActiveVAO; + GLuint mActiveVBO; + // Meshes have uniform uniforms + GLuint mUBO; + + glm::mat4 mModelMatrix; + +}; + +#endif diff --git a/src/Rendering/rendermaster.cpp b/src/Rendering/rendermaster.cpp new file mode 100644 index 0000000..84719ea --- /dev/null +++ b/src/Rendering/rendermaster.cpp @@ -0,0 +1,11 @@ +#include "rendermaster.hpp" + +RenderMaster::RenderMaster() + : mWorldRenderer(), + mMeshRenderer() +{ + + + +} + diff --git a/src/Rendering/rendermaster.hpp b/src/Rendering/rendermaster.hpp new file mode 100644 index 0000000..8696466 --- /dev/null +++ b/src/Rendering/rendermaster.hpp @@ -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 diff --git a/legacy/src/common.hpp b/src/common.hpp similarity index 100% rename from legacy/src/common.hpp rename to src/common.hpp diff --git a/src/main.cpp b/src/main.cpp index aca9724..d4683a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,7 +13,11 @@ #include "display.hpp" #include "settings.hpp" +#include "Rendering/rendermaster.hpp" #include "Rendering/texture.hpp" +#include "Rendering/camera.hpp" +#include "Rendering/mesh.hpp" + #define __DEBUG @@ -39,6 +43,9 @@ void Loop( Display* display ) { SDL_Event e; + + + while ( display->IsWindowOpen ) { display->PrepareFrame(); @@ -49,6 +56,9 @@ void Loop( Display* display ) // rendering here + + + display->NextFrame(); }