From 00f537bc034f396083131d233c916410909fc8a9 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Tue, 6 Oct 2015 19:34:31 +0200 Subject: [PATCH] Removed OpenGL specifics from RenderQueue --- include/Core/Engine.h | 16 +++++----- include/Rendering/OpenGL/Rendering/Renderer.h | 1 + include/Rendering/RenderQueue.h | 29 +++++------------ src/game/Rendering/OpenGL/Renderer.cpp | 31 ++++++++++++------- 4 files changed, 34 insertions(+), 43 deletions(-) diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 3d7153f..71340d6 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -533,11 +533,10 @@ public: { ModelJob job; job.TextureID = (texGroup.Texture) ? texGroup.Texture->ResourceID : 0; - job.DiffuseTexture = (texGroup.Texture) ? *texGroup.Texture : 0; - job.NormalTexture = (texGroup.NormalMap) ? *texGroup.NormalMap : 0; - job.SpecularTexture = (texGroup.SpecularMap) ? *texGroup.SpecularMap : 0; - job.VAO = model->VAO; - job.ElementBuffer = model->ElementBuffer; + job.DiffuseTexture = texGroup.Texture.get(); + job.NormalTexture = texGroup.NormalMap.get(); + job.SpecularTexture = texGroup.SpecularMap.get(); + job.Model = model; job.StartIndex = texGroup.StartIndex; job.EndIndex = texGroup.EndIndex; job.ModelMatrix = modelMatrix * model->m_Matrix; @@ -561,14 +560,13 @@ public: { SpriteJob job; job.TextureID = texture->ResourceID; - job.DiffuseTexture = *texture; - job.NormalTexture = *normalTexture; - job.SpecularTexture = *specularTexture; + job.DiffuseTexture = texture; + job.NormalTexture = normalTexture; + job.SpecularTexture = specularTexture; job.ModelMatrix = modelMatrix; job.Color = color; job.Depth = depth; - m_RendererQueue.Forward.Add(job); } diff --git a/include/Rendering/OpenGL/Rendering/Renderer.h b/include/Rendering/OpenGL/Rendering/Renderer.h index 36a78da..56b8fc6 100755 --- a/include/Rendering/OpenGL/Rendering/Renderer.h +++ b/include/Rendering/OpenGL/Rendering/Renderer.h @@ -78,6 +78,7 @@ private: GLuint m_ScreenQuad = 0; Model* m_UnitSphere = nullptr; Model* m_UnitQuad = nullptr; + Texture* m_ErrorTexture; Texture* m_StandardNormal; Texture* m_StandardSpecular; Texture* m_WhiteSphereTexture; diff --git a/include/Rendering/RenderQueue.h b/include/Rendering/RenderQueue.h index cc868f3..ba7786f 100644 --- a/include/Rendering/RenderQueue.h +++ b/include/Rendering/RenderQueue.h @@ -56,13 +56,12 @@ struct ModelJob : RenderJob glm::mat4 ProjectionMatrix; glm::mat4 ViewMatrix; glm::mat4 ModelMatrix; - GLuint DiffuseTexture; - GLuint NormalTexture; - GLuint SpecularTexture; + const Texture* DiffuseTexture; + const Texture* NormalTexture; + const Texture* SpecularTexture; float Shininess; glm::vec4 Color; - GLuint VAO; - GLuint ElementBuffer; + const dd::Model* Model; unsigned int StartIndex; unsigned int EndIndex; @@ -72,20 +71,6 @@ struct ModelJob : RenderJob } }; -struct BlendMapModelJob : ModelJob -{ - GLuint BlendMapTextureRed; - GLuint BlendMapTextureRedNormal; - GLuint BlendMapTextureRedSpecular; - GLuint BlendMapTextureGreen; - GLuint BlendMapTextureGreenNormal; - GLuint BlendMapTextureGreenSpecular; - GLuint BlendMapTextureBlue; - GLuint BlendMapTextureBlueNormal; - GLuint BlendMapTextureBlueSpecular; - float TextureRepeat; -}; - struct SpriteJob : RenderJob { unsigned int ShaderID; @@ -94,9 +79,9 @@ struct SpriteJob : RenderJob glm::mat4 ProjectionMatrix; glm::mat4 ViewMatrix; glm::mat4 ModelMatrix; - GLuint DiffuseTexture; - GLuint NormalTexture; - GLuint SpecularTexture; + const Texture* DiffuseTexture; + const Texture* NormalTexture; + const Texture* SpecularTexture; glm::vec4 Color; void CalculateHash() override diff --git a/src/game/Rendering/OpenGL/Renderer.cpp b/src/game/Rendering/OpenGL/Renderer.cpp index 5d9182b..06bf90c 100644 --- a/src/game/Rendering/OpenGL/Renderer.cpp +++ b/src/game/Rendering/OpenGL/Renderer.cpp @@ -121,6 +121,7 @@ void dd::Renderer::CreateBuffers() m_ScreenQuad = CreateQuad(); m_UnitQuad = ResourceManager::Load("Models/Core/UnitQuad.obj"); m_UnitSphere = ResourceManager::Load("Models/Core/UnitSphere.obj"); + m_ErrorTexture = ResourceManager::Load("Textures/Core/ErrorTexture.png"); m_StandardNormal = ResourceManager::Load("Textures/Core/NeutralNormalMap.png"); m_StandardSpecular = ResourceManager::Load("Textures/Core/NeutralSpecularMap.png"); m_WhiteSphereTexture = ResourceManager::Load("Textures/Test/Water.png"); @@ -413,19 +414,25 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glUniform1f(glGetUniformLocation(shaderProgramHandle, "LightRadius"), 40.0f); glUniform1f(glGetUniformLocation(shaderProgramHandle, "MaterialShininess"), modelJob->Shininess); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture); - if (modelJob->NormalTexture != 0) { + if (modelJob->DiffuseTexture != nullptr) { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, *modelJob->DiffuseTexture); + } else { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, *m_ErrorTexture); + } + + if (modelJob->NormalTexture != nullptr) { glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, modelJob->NormalTexture); + glBindTexture(GL_TEXTURE_2D, *modelJob->NormalTexture); } else { glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, *m_StandardNormal); } - if (modelJob->SpecularTexture != 0) { + if (modelJob->SpecularTexture != nullptr) { glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_2D, modelJob->SpecularTexture); + glBindTexture(GL_TEXTURE_2D, *modelJob->SpecularTexture); } else { glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, *m_StandardSpecular); @@ -445,8 +452,8 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) } } - glBindVertexArray(modelJob->VAO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->ElementBuffer); + glBindVertexArray(modelJob->Model->VAO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer); glDrawElementsBaseVertex(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, 0, modelJob->StartIndex); continue; @@ -463,11 +470,11 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glUniform4fv(glGetUniformLocation(shaderProgramHandle, "Color"), 1, glm::value_ptr(spriteJob->Color)); glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, spriteJob->DiffuseTexture); + glBindTexture(GL_TEXTURE_2D, *spriteJob->DiffuseTexture); glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, spriteJob->NormalTexture); + glBindTexture(GL_TEXTURE_2D, *spriteJob->NormalTexture); glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_2D, spriteJob->SpecularTexture); + glBindTexture(GL_TEXTURE_2D, *spriteJob->SpecularTexture); glBindVertexArray(m_UnitQuad->VAO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_UnitQuad->ElementBuffer); @@ -688,7 +695,7 @@ void dd::Renderer::DrawGUI(dd::RenderQueue& rq) glUniform4fv(glGetUniformLocation(*m_SpScreen, "Color"), 1, glm::value_ptr(frameJob->Color)); glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, frameJob->DiffuseTexture); + glBindTexture(GL_TEXTURE_2D, *frameJob->DiffuseTexture); //glActiveTexture(GL_TEXTURE1); //glBindTexture(GL_TEXTURE_2D, frameJob->NormalTexture); //glActiveTexture(GL_TEXTURE2);