diff --git a/Deer/Include/DeerRender/Components.h b/Deer/Include/DeerRender/Components.h index 724934c..f273965 100755 --- a/Deer/Include/DeerRender/Components.h +++ b/Deer/Include/DeerRender/Components.h @@ -1,8 +1,8 @@ #pragma once #include "Deer/Components.h" -#include "DeerRender/Render/VertexArray.h" -#include "DeerRender/Render/Shader.h" +#include "DeerRender/Mesh.h" +#include "DeerRender/Shader.h" #define GLM_ENABLE_EXPERIMENTAL #include "glm/gtc/quaternion.hpp" @@ -13,19 +13,57 @@ namespace Deer { struct MeshComponent { - MeshComponent() = default; - MeshComponent(uint16_t _meshId) : meshId(_meshId) { } + MeshComponent() { clear(); } + MeshComponent(uint16_t _meshId) : meshId(_meshId), active(true) { } MeshComponent(const MeshComponent&) = default; + inline void setMesh(uint16_t _meshId) { + active = true; + meshId = _meshId; + } + + inline void clear() { + active = false; + meshId = 0; + } + + inline VertexArray& getMesh() { + return MeshManager::getModel(meshId); + } + + inline bool isActive() { + return active; + } + private: uint16_t meshId; + bool active; }; struct ShaderComponent { - ShaderComponent() = default; - ShaderComponent(uint16_t _shaderId) : shaderId(_shaderId) { } + ShaderComponent() { clear(); } + ShaderComponent(uint16_t _shaderId) : shaderId(_shaderId), active(true) { } ShaderComponent(const ShaderComponent&) = default; + inline void setShader(uint16_t _shaderId) { + active = true; + shaderId = _shaderId; + } + + inline void clear() { + active = false; + shaderId = 0; + } + + inline Shader& getShader() { + return ShaderManager::getShader(shaderId); + } + + inline bool isActive() { + return active; + } + private: uint16_t shaderId; + bool active; }; struct TextureBindingComponent { diff --git a/Deer/src/DeerRender/Mesh/MeshModelLoading.cpp b/Deer/src/DeerRender/Mesh/MeshModelLoading.cpp index d2791c1..154f39b 100644 --- a/Deer/src/DeerRender/Mesh/MeshModelLoading.cpp +++ b/Deer/src/DeerRender/Mesh/MeshModelLoading.cpp @@ -32,7 +32,7 @@ namespace Deer { } VertexArray& MeshManager::getModel(uint16_t model_id) { - DEER_CORE_ASSERT(model_id > 0 && model_id < minModelId, "Invalid model id, id is not loaded"); + DEER_CORE_ASSERT(model_id >= 0 && model_id < minModelId, "Invalid model id, id is not loaded"); return *meshes[model_id]; } diff --git a/Deer/src/DeerRender/Scene/Environment.cpp b/Deer/src/DeerRender/Scene/Environment.cpp index 861009a..f8fcde8 100755 --- a/Deer/src/DeerRender/Scene/Environment.cpp +++ b/Deer/src/DeerRender/Scene/Environment.cpp @@ -31,14 +31,14 @@ namespace Deer { Entity& entity = getEntity(tagComponent.entityUID); glm::mat4 matrix = entity.getWorldMatrix(); - Shader& shader = ShaderManager::getShader(shaderComponent.shaderId); + Shader& shader = shaderComponent.getShader(); shader.bind(); shader.uploadUniformMat4("u_viewMatrix", cameraProjectionMatrix); shader.uploadUniformMat4("u_worldMatrix", matrix); shader.uploadUniformInt("u_objectID", entity.getId()); - VertexArray& vertexArray = MeshManager::getModel(meshComponent.meshId); + VertexArray& vertexArray = meshComponent.getMesh(); vertexArray.bind(); Render::submit(vertexArray); diff --git a/Deer/src/DeerRender/Shader/ShaderDataStore.cpp b/Deer/src/DeerRender/Shader/ShaderDataStore.cpp index e52dde2..f21db55 100644 --- a/Deer/src/DeerRender/Shader/ShaderDataStore.cpp +++ b/Deer/src/DeerRender/Shader/ShaderDataStore.cpp @@ -33,7 +33,7 @@ namespace Deer { } } - std::unordered_map preProcess(const std::string& source) { + std::unordered_map DataStore::preProcess(const std::string& source) { std::unordered_map shaderSource; const std::string typeToken = "#type "; diff --git a/Deer/src/DeerRender/Shader/ShaderLoad.cpp b/Deer/src/DeerRender/Shader/ShaderLoad.cpp index 847ca85..781b656 100644 --- a/Deer/src/DeerRender/Shader/ShaderLoad.cpp +++ b/Deer/src/DeerRender/Shader/ShaderLoad.cpp @@ -31,7 +31,7 @@ namespace Deer { } Shader& ShaderManager::getShader(uint16_t shaderId) { - DEER_CORE_ASSERT(shaderId > 0 && shaderId < minShaderId, "Invalid shader id, id is not loaded"); + DEER_CORE_ASSERT(shaderId >= 0 && shaderId < minShaderId, "Invalid shader id, id is not loaded"); return *shaders[shaderId]; } diff --git a/DeerStudio/src/DeerStudio/DeerStudio.cpp b/DeerStudio/src/DeerStudio/DeerStudio.cpp index caee9d5..536ca5e 100755 --- a/DeerStudio/src/DeerStudio/DeerStudio.cpp +++ b/DeerStudio/src/DeerStudio/DeerStudio.cpp @@ -58,13 +58,16 @@ namespace Deer { Entity& exampleObject = env.createEntity("Example"); MeshComponent& renderComponent = exampleObject.addComponent(); + ShaderComponent& shaderComponent = exampleObject.addComponent(); MeshData meshData; DataStore::loadModel(meshData, "example"); - renderComponent.meshId = MeshManager::loadModel(meshData); - // Shader::create(DataStore::rootPath / DEER_SHADER_PATH / "shader.glsl"); - //renderComponent.vertexArray = Mesh::loadModelToGPU(meshData); + ShaderData shaderData; + DataStore::loadShader(shaderData, "shader"); + + renderComponent.setMesh(MeshManager::loadModel(meshData)); + shaderComponent.setShader(ShaderManager::loadShader(shaderData)); return 0; } diff --git a/roe/imgui.ini b/roe/imgui.ini index 2e2690a..3b55db0 100644 --- a/roe/imgui.ini +++ b/roe/imgui.ini @@ -97,7 +97,7 @@ DockSpace ID=0xA1672E74 Window=0x4647B76E Pos=0,24 Size=1280,696 Split=Y DockNode ID=0x00000003 Parent=0x00000001 SizeRef=878,338 Split=X Selected=0x13926F0B DockNode ID=0x00000005 Parent=0x00000003 SizeRef=256,446 Selected=0xE45B9F93 DockNode ID=0x00000006 Parent=0x00000003 SizeRef=620,446 CentralNode=1 Selected=0x13926F0B - DockNode ID=0x00000004 Parent=0x00000001 SizeRef=400,338 Selected=0xA35A27E3 + DockNode ID=0x00000004 Parent=0x00000001 SizeRef=400,338 Selected=0x2A2C795E DockNode ID=0x00000002 Parent=0x00000007 SizeRef=2560,331 Selected=0xCF339702 DockNode ID=0x00000008 Parent=0xA1672E74 SizeRef=1280,220 Selected=0xD962995A