From ab0355ed97f9af33564d528579f845636ef683af Mon Sep 17 00:00:00 2001 From: CatChow0 Date: Sat, 11 Jan 2025 22:18:19 +0100 Subject: [PATCH] Minor update - Add Render Queues --- enginecustom/applicationclass.cpp | 125 ++++++++++--------- enginecustom/applicationclass.h | 3 +- enginecustom/assets/Texture/EmptyTexture.png | Bin 0 -> 83159 bytes enginecustom/enginecustom.vcxproj | 1 + enginecustom/enginecustom.vcxproj.filters | 3 + enginecustom/imguiManager.cpp | 34 ++++- enginecustom/object.cpp | 60 --------- enginecustom/object.h | 33 ++--- 8 files changed, 115 insertions(+), 144 deletions(-) create mode 100644 enginecustom/assets/Texture/EmptyTexture.png diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index a43eec9..1784448 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -25,6 +25,10 @@ ApplicationClass::ApplicationClass() : m_ShouldQuit(false) m_RefractionTexture = 0; m_ReflectionTexture = 0; m_Physics = 0; + m_cubes.clear(); + m_terrainChunk.clear(); + m_object.clear(); + m_RenderQueues.clear(); } ApplicationClass::~ApplicationClass() @@ -47,6 +51,10 @@ bool ApplicationClass::Initialize(int screenWidth, int screenHeight, HWND hwnd) bool result; HRESULT Hresult; + m_RenderQueues.push_back(std::ref(m_object)); + m_RenderQueues.push_back(std::ref(m_cubes)); + m_RenderQueues.push_back(std::ref(m_terrainChunk)); + m_screenWidth = screenWidth; m_screenHeight = screenHeight; @@ -1072,7 +1080,7 @@ bool ApplicationClass::Render(float rotation, float x, float y, float z, float t // -------------------------------------------------------- // // ------------ Render the object in the queue ------------ // // -------------------------------------------------------- // - result = RenderPass(m_terrainChunk, diffuseColor, lightPosition, ambientColor, viewMatrix, projectionMatrix); + result = RenderPass(m_RenderQueues, diffuseColor, lightPosition, ambientColor, viewMatrix, projectionMatrix); if (!result) { Logger::Get().Log("Could not render the model using any shader", __FILE__, __LINE__, Logger::LogLevel::Error); @@ -1904,81 +1912,74 @@ void ApplicationClass::SetScreenWidth(int width) m_screenWidth = width; } -bool ApplicationClass::RenderPass(std::vector RenderQueue, XMFLOAT4* diffuse, XMFLOAT4* position, XMFLOAT4* ambient, XMMATRIX view, XMMATRIX projection) +bool ApplicationClass::RenderPass(const std::vector>>& RenderQueues, XMFLOAT4* diffuse, XMFLOAT4* position, XMFLOAT4* ambient, XMMATRIX view, XMMATRIX projection) { XMMATRIX worldMatrix, scaleMatrix, rotateMatrix, translateMatrix, srMatrix; bool result; - for (auto& object : RenderQueue) + for (const auto& RenderQueue : RenderQueues) { - - if (object == nullptr) + for (auto& object : RenderQueue.get()) { - Logger::Get().Log("Object is null", __FILE__, __LINE__, Logger::LogLevel::Error); - return false; - } - - scaleMatrix = object->GetScaleMatrix(); - rotateMatrix = object->GetRotateMatrix(); - translateMatrix = object->GetTranslateMatrix(); - - srMatrix = XMMatrixMultiply(scaleMatrix, rotateMatrix); - worldMatrix = XMMatrixMultiply(srMatrix, translateMatrix); - - object->Render(m_Direct3D->GetDeviceContext()); - - // Render cel shading. - if (object->GetCelShading()) { - result = m_ShaderManager->RenderCelShadingShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), - m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor(), TrueLightPosition); - if (!result) + if (object == nullptr) { - Logger::Get().Log("Could not render the model using the cel shader", __FILE__, __LINE__, Logger::LogLevel::Error); - return false; - } - - continue; - } - - // Render normal mapping. - if (object->GetNormalMappingEnabled()) { - - result = m_ShaderManager->RenderNormalMapShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), object->GetTexture(1), m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor()); - - if (!result) - { - Logger::Get().Log("Could not render the model using the normal map shader", __FILE__, __LINE__, Logger::LogLevel::Error); + Logger::Get().Log("Object is null", __FILE__, __LINE__, Logger::LogLevel::Error); return false; } - continue; - } + scaleMatrix = object->GetScaleMatrix(); + rotateMatrix = object->GetRotateMatrix(); + translateMatrix = object->GetTranslateMatrix(); - // Render Specular mapping. - if (object->GetSpecularMappingEnabled()) { - result = m_ShaderManager->RenderSpecMapShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), object->GetTexture(1), object->GetTexture(2), m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor(), m_Camera->GetPosition(), m_Lights[0]->GetSpecularColor(), m_Lights[0]->GetSpecularPower()); - if (!result) + srMatrix = XMMatrixMultiply(scaleMatrix, rotateMatrix); + worldMatrix = XMMatrixMultiply(srMatrix, translateMatrix); + + object->Render(m_Direct3D->GetDeviceContext()); + + // Utiliser l'enum ShaderType pour déterminer quel shader utiliser + switch (object->GetActiveShader()) { - Logger::Get().Log("Could not render the model using the specular map shader", __FILE__, __LINE__, Logger::LogLevel::Error); - return false; + case Object::CEL_SHADING: + result = m_ShaderManager->RenderCelShadingShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), + m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor(), TrueLightPosition); + if (!result) + { + Logger::Get().Log("Could not render the model using the cel shader", __FILE__, __LINE__, Logger::LogLevel::Error); + return false; + } + break; + + case Object::NORMAL_MAPPING: + result = m_ShaderManager->RenderNormalMapShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), object->GetTexture(1), m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor()); + if (!result) + { + Logger::Get().Log("Could not render the model using the normal map shader", __FILE__, __LINE__, Logger::LogLevel::Error); + return false; + } + break; + + case Object::SPECULAR_MAPPING: + result = m_ShaderManager->RenderSpecMapShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, object->GetTexture(0), object->GetTexture(1), object->GetTexture(2), m_Lights[0]->GetDirection(), m_Lights[0]->GetDiffuseColor(), m_Camera->GetPosition(), m_Lights[0]->GetSpecularColor(), m_Lights[0]->GetSpecularPower()); + if (!result) + { + Logger::Get().Log("Could not render the model using the specular map shader", __FILE__, __LINE__, Logger::LogLevel::Error); + return false; + } + break; + + case Object::LIGHTING: + default: + result = m_ShaderManager->RenderlightShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, + object->GetTexture(0), diffuse, position, ambient); + if (!result) + { + Logger::Get().Log("Could not render the object model using the light shader", __FILE__, __LINE__, Logger::LogLevel::Error); + return false; + } + break; } - - continue; } - - - // By default, render the object using the light shader. - result = m_ShaderManager->RenderlightShader(m_Direct3D->GetDeviceContext(), object->GetIndexCount(), worldMatrix, view, projection, - object->GetTexture(0) ,diffuse, position, ambient); - - if (!result) - { - Logger::Get().Log("Could not render the object model using the light shader", __FILE__, __LINE__, Logger::LogLevel::Error); - return false; - } - - continue; } return true; -} \ No newline at end of file +} diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 03e96e5..00c0a81 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -113,7 +113,7 @@ private: bool RenderSceneToTexture(float); bool RenderRefractionToTexture(); bool RenderReflectionToTexture(); - bool RenderPass(std::vector RenderQueue, XMFLOAT4* diffuse,XMFLOAT4* position, XMFLOAT4* ambient, XMMATRIX view, XMMATRIX proijection); + bool RenderPass(const std::vector>>& RenderQueues, XMFLOAT4* diffuse, XMFLOAT4* position, XMFLOAT4* ambient, XMMATRIX view, XMMATRIX projection); private : @@ -152,6 +152,7 @@ private : float m_speed = 0.1f; // speed for the demo spinning object std::vector m_object; int m_ObjectId = 0; + std::vector>> m_RenderQueues; // ----------------------------------- // // ------------- LIGHTS -------------- // diff --git a/enginecustom/assets/Texture/EmptyTexture.png b/enginecustom/assets/Texture/EmptyTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..1330aa3d792f0d0cff4eb75f6b9c5fa4768d7be5 GIT binary patch literal 83159 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 literal 0 HcmV?d00001 diff --git a/enginecustom/enginecustom.vcxproj b/enginecustom/enginecustom.vcxproj index 32d272d..e76a0b5 100644 --- a/enginecustom/enginecustom.vcxproj +++ b/enginecustom/enginecustom.vcxproj @@ -304,6 +304,7 @@ $(OutDir)\assets\Texture\ + diff --git a/enginecustom/enginecustom.vcxproj.filters b/enginecustom/enginecustom.vcxproj.filters index 4f828c5..84d1d6c 100644 --- a/enginecustom/enginecustom.vcxproj.filters +++ b/enginecustom/enginecustom.vcxproj.filters @@ -388,6 +388,9 @@ Assets + + Assets\Texture + diff --git a/enginecustom/imguiManager.cpp b/enginecustom/imguiManager.cpp index f9c2067..68621db 100644 --- a/enginecustom/imguiManager.cpp +++ b/enginecustom/imguiManager.cpp @@ -162,7 +162,11 @@ void imguiManager::WidgetObjectWindow(ApplicationClass* app) // Texture // add all texture category names to a vector std::vector textureCategories = { - "Diffuse" + "Diffuse", + "Normal", + "Specular", + "Reflection", + "Refraction" }; @@ -246,6 +250,34 @@ void imguiManager::WidgetObjectWindow(ApplicationClass* app) app->DeleteKobject(index); } + // Shader selection + std::string shaderLabel = "Shader##" + std::to_string(index); + + // Radio buttons for shader options + Object::ShaderType activeShader = object->GetActiveShader(); + + if (ImGui::RadioButton("Enable Lighting", activeShader == Object::LIGHTING)) + { + object->SetActiveShader(Object::LIGHTING); + } + + if (ImGui::RadioButton("Enable Cel Shading", activeShader == Object::CEL_SHADING)) + { + object->SetActiveShader(Object::CEL_SHADING); + } + + if (ImGui::RadioButton("Enable Normal Mapping", activeShader == Object::NORMAL_MAPPING)) + { + object->SetActiveShader(Object::NORMAL_MAPPING); + } + + if (ImGui::RadioButton("Enable Specular Mapping", activeShader == Object::SPECULAR_MAPPING)) + { + object->SetActiveShader(Object::SPECULAR_MAPPING); + } + + + ImGui::Separator(); // Demo spinning diff --git a/enginecustom/object.cpp b/enginecustom/object.cpp index 304d27e..3d16471 100644 --- a/enginecustom/object.cpp +++ b/enginecustom/object.cpp @@ -233,64 +233,4 @@ bool Object::IsPhysicsEnabled() const void Object::SetPhysicsEnabled(bool state) { m_isPhysicsEnabled = state; -} - -void Object::SetCelShading(bool state) -{ - isCelShading = state; -} - -bool Object::GetCelShading() const -{ - return isCelShading; -} - -void Object::SetLightingEnabled(bool state) -{ - isLightingEnabled = state; -} - -bool Object::GetLightingEnabled() const -{ - return isLightingEnabled; -} - -void Object::SetNormalMappingEnabled(bool state) -{ - isNormalMappingEnabled = state; -} - -bool Object::GetNormalMappingEnabled() const -{ - return isNormalMappingEnabled; -} - -void Object::SetSpecularMappingEnabled(bool state) -{ - isSpecularMappingEnabled = state; -} - -bool Object::GetSpecularMappingEnabled() const -{ - return isSpecularMappingEnabled; -} - -void Object::SetReflectionEnabled(bool state) -{ - isReflectionEnabled = state; -} - -bool Object::GetReflectionEnabled() const -{ - return isReflectionEnabled; -} - -void Object::SetRefractionEnabled(bool state) -{ - isRefractionEnabled = state; -} - -bool Object::GetRefractionEnabled() const -{ - return isRefractionEnabled; } \ No newline at end of file diff --git a/enginecustom/object.h b/enginecustom/object.h index 33633b4..111e34b 100644 --- a/enginecustom/object.h +++ b/enginecustom/object.h @@ -57,19 +57,18 @@ public: bool LoadTexture(ID3D11Device* device, ID3D11DeviceContext* deviceContext, const std::wstring& filename); - // Setters and getters for the shader to use - void SetCelShading(bool state); - bool GetCelShading() const; - void SetLightingEnabled(bool state); - bool GetLightingEnabled() const; - void SetNormalMappingEnabled(bool state); - bool GetNormalMappingEnabled() const; - void SetSpecularMappingEnabled(bool state); - bool GetSpecularMappingEnabled() const; - void SetReflectionEnabled(bool state); - bool GetReflectionEnabled() const; - void SetRefractionEnabled(bool state); - bool GetRefractionEnabled() const; + enum ShaderType + { + CEL_SHADING, + LIGHTING, + NORMAL_MAPPING, + SPECULAR_MAPPING, + REFLECTION, + REFRACTION + }; + + ShaderType GetActiveShader() const { return m_activeShader; }; + void SetActiveShader(ShaderType activeShader) { m_activeShader = activeShader; }; public : bool m_demoSpinning = false; @@ -91,11 +90,5 @@ private: std::string m_name; - // Shader to use for rendering - bool isCelShading = false; - bool isLightingEnabled = true; - bool isNormalMappingEnabled = false; - bool isSpecularMappingEnabled = false; - bool isReflectionEnabled = false; - bool isRefractionEnabled = false; + ShaderType m_activeShader = LIGHTING; };