From 4aef84e7c8c21db712069e978e34a9a3b6489659 Mon Sep 17 00:00:00 2001 From: tleety Date: Wed, 9 Sep 2015 21:19:37 +0200 Subject: [PATCH 1/5] GL renderer working again, bgfx still here but not used. --- include/Core/Engine.h | 78 +++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 39 deletions(-) mode change 100644 => 100755 include/Core/Engine.h diff --git a/include/Core/Engine.h b/include/Core/Engine.h old mode 100644 new mode 100755 index 8b16650..7241721 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -25,7 +25,7 @@ #include "Texture.h" #include "EventBroker.h" #include "RenderQueue.h" -#include "BGFXRenderer.h" +#include "Renderer.h" #include "InputManager.h" //TODO: Remove includes that are only here for the temporary draw solution. #include "World.h" @@ -42,30 +42,30 @@ class Engine public: Engine(int argc, char* argv[]) { -// m_EventBroker = std::make_shared(); + m_EventBroker = std::make_shared(); - m_Renderer = std::make_shared(); + m_Renderer = std::make_shared(); m_Renderer->SetFullscreen(false); - m_Renderer->SetResolution(Rectangle(0, 0, 1280, 720)); + m_Renderer->SetResolution(Rectangle(0, 0, 1920, 1080)); m_Renderer->Initialize(); -// m_InputManager = std::make_shared(m_Renderer->Window(), m_EventBroker); -// -// m_World = std::make_shared(m_EventBroker); -// -// //TODO: Move this out of engine.h -// m_World->ComponentFactory.Register(); -// m_World->SystemFactory.Register([this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); }); -// m_World->AddSystem(); -// m_World->ComponentFactory.Register(); -// m_World->ComponentFactory.Register(); -// m_World->Initialize(); + m_InputManager = std::make_shared(m_Renderer->Window(), m_EventBroker); -// auto ent = m_World->CreateEntity(); -// std::shared_ptr transform = m_World->AddComponent(ent); -// transform->Position = glm::vec3(0.f, 0.f, -10.f); -// std::shared_ptr model = m_World->AddComponent(ent); -// model->ModelFile = "Models/Core/UnitSphere.obj"; + m_World = std::make_shared(m_EventBroker); + + //TODO: Move this out of engine.h + m_World->ComponentFactory.Register(); + m_World->SystemFactory.Register([this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); + m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); + m_World->Initialize(); + + auto ent = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(ent); + transform->Position = glm::vec3(0.f, 0.f, -10.f); + std::shared_ptr model = m_World->AddComponent(ent); + model->ModelFile = "Models/Core/UnitSphere.obj"; m_LastTime = glfwGetTime(); @@ -79,26 +79,26 @@ public: double dt = currentTime - m_LastTime; m_LastTime = currentTime; -// ResourceManager::Update(); -// -// // Update input -// m_InputManager->Update(dt); -// -// m_World->Update(dt); -// -// if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_R)) { -// ResourceManager::Reload("Shaders/Deferred/3/Fragment.glsl"); -// } -// -// //TODO Fill up the renderQueue with models (Temp fix) -// TEMPAddToRenderQueue(); -// -// // Render scene -// //TODO send renderqueue to draw. + ResourceManager::Update(); + + // Update input + m_InputManager->Update(dt); + + m_World->Update(dt); + + if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_R)) { + ResourceManager::Reload("Shaders/Deferred/3/Fragment.glsl"); + } + + //TODO Fill up the renderQueue with models (Temp fix) + TEMPAddToRenderQueue(); + + // Render scene + //TODO send renderqueue to draw. m_Renderer->Draw(m_RendererQueue); // Swap event queues -// m_EventBroker->Clear(); + m_EventBroker->Clear(); glfwPollEvents(); } @@ -168,9 +168,9 @@ public: } private: - //std::shared_ptr m_ResourceManager; + std::shared_ptr m_ResourceManager; std::shared_ptr m_EventBroker; - std::shared_ptr m_Renderer; + std::shared_ptr m_Renderer; RenderQueueCollection m_RendererQueue; std::shared_ptr m_InputManager; std::shared_ptr m_World; From 61efddb52edbe474a8571462c3b6029507004d16 Mon Sep 17 00:00:00 2001 From: tleety Date: Wed, 9 Sep 2015 21:31:54 +0200 Subject: [PATCH 2/5] Removed rendering of lights --- src/game/Core/Shaders/Deferred/3/Fragment.glsl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/game/Core/Shaders/Deferred/3/Fragment.glsl diff --git a/src/game/Core/Shaders/Deferred/3/Fragment.glsl b/src/game/Core/Shaders/Deferred/3/Fragment.glsl old mode 100644 new mode 100755 index 2d064f0..08b7f08 --- a/src/game/Core/Shaders/Deferred/3/Fragment.glsl +++ b/src/game/Core/Shaders/Deferred/3/Fragment.glsl @@ -37,6 +37,7 @@ void main() vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord); //frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0))); - frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel); + //frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel); + frag_Diffuse = DiffuseTexel; //frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0); } \ No newline at end of file From 54bed28327fc3c0de5e54d70503fed89a7e3c557 Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Thu, 10 Sep 2015 16:23:24 +0200 Subject: [PATCH 3/5] Working sprite rendering. Removed bone transforms for now. --- include/Core/Engine.h | 42 +++++++++++++++++++---- src/game/Core/Renderer.cpp | 24 +++++++++++-- src/game/Core/Shaders/Forward/Vertex.glsl | 3 +- 3 files changed, 60 insertions(+), 9 deletions(-) mode change 100644 => 100755 src/game/Core/Renderer.cpp mode change 100644 => 100755 src/game/Core/Shaders/Forward/Vertex.glsl diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 7241721..04b3693 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -31,6 +31,7 @@ #include "World.h" #include "CTransform.h" #include "Rendering/CModel.h" +#include "Rendering/CSprite.h" #include "CTemplate.h" #include "Transform/TransformSystem.h" @@ -58,15 +59,17 @@ public: m_World->SystemFactory.Register([this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); m_World->Initialize(); - auto ent = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.f, 0.f, -10.f); - std::shared_ptr model = m_World->AddComponent(ent); - model->ModelFile = "Models/Core/UnitSphere.obj"; - +// { +// auto ent = m_World->CreateEntity(); +// std::shared_ptr transform = m_World->AddComponent(ent); +// transform->Position = glm::vec3(0.f, 0.f, -10.f); +// auto sprite = m_World->AddComponent(ent); +// sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; +// } m_LastTime = glfwGetTime(); } @@ -141,6 +144,21 @@ public: EnqueueModel(modelAsset, modelMatrix, modelComponent->Transparent, modelComponent->Color); } } + + auto spriteComponent = m_World->GetComponent(entity); + if (spriteComponent) + { + auto textureAsset = ResourceManager::Load(spriteComponent->SpriteFile); + if (textureAsset) + { + Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity); + glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(absoluteTransform.Orientation).z, glm::vec3(0, 0, -1)); + glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position) + * glm::toMat4(orientation2D) + * glm::scale(absoluteTransform.Scale); + EnqueueSprite(textureAsset, modelMatrix, spriteComponent->Color); + } + } } m_RendererQueue.Sort(); @@ -167,6 +185,18 @@ public: } } + // TODO: Get this out of engine.h + void EnqueueSprite(Texture* texture, glm::mat4 modelMatrix, glm::vec4 color) + { + SpriteJob job; + job.TextureID = texture->ResourceID; + job.Texture = *texture; + job.ModelMatrix = modelMatrix; + job.Color = color; + + m_RendererQueue.Forward.Add(job); + } + private: std::shared_ptr m_ResourceManager; std::shared_ptr m_EventBroker; diff --git a/src/game/Core/Renderer.cpp b/src/game/Core/Renderer.cpp old mode 100644 new mode 100755 index 5af1892..69aee81 --- a/src/game/Core/Renderer.cpp +++ b/src/game/Core/Renderer.cpp @@ -322,6 +322,26 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glBindVertexArray(modelJob->VAO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->ElementBuffer); glDrawElementsBaseVertex(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, 0, modelJob->StartIndex); + + continue; + } + + auto spriteJob = std::dynamic_pointer_cast(job); + if (spriteJob) + { + glm::mat4 modelMatrix = spriteJob->ModelMatrix; + MVP = PV * modelMatrix; + glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); + glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); + glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix)); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, spriteJob->Texture); + + glBindVertexArray(m_UnitQuad); + glDrawArrays(GL_TRIANGLES, 0, 6); + + continue; } } } @@ -396,9 +416,9 @@ GLuint dd::Renderer::CreateQuad() glBindBuffer(GL_ARRAY_BUFFER, vbo[0]); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, vbo[1]); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0); + glVertexAttribPointer(4, 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); - glEnableVertexAttribArray(2); + glEnableVertexAttribArray(4); glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); diff --git a/src/game/Core/Shaders/Forward/Vertex.glsl b/src/game/Core/Shaders/Forward/Vertex.glsl old mode 100644 new mode 100755 index 4b4e649..46ccf5a --- a/src/game/Core/Shaders/Forward/Vertex.glsl +++ b/src/game/Core/Shaders/Forward/Vertex.glsl @@ -65,7 +65,8 @@ void main() + BoneWeights2[3] * Bones[int(BoneIndices2[3])]; } - gl_Position = MVP * boneTransform * vec4(Position, 1.0); + //gl_Position = MVP * boneTransform * vec4(Position, 1.0); + gl_Position = MVP * vec4(Position, 1.0); Output.Position = (V * M * boneTransform * vec4(Position, 1.0)).xyz; Output.Normal = (inverse(transpose(V * M)) * boneTransform * vec4(Normal, 0.0)).xyz; From 58931e29b3b1b553230f6cdeabc9b9dde4a48a42 Mon Sep 17 00:00:00 2001 From: tleety Date: Thu, 10 Sep 2015 17:45:26 +0200 Subject: [PATCH 4/5] Sprites are now rendered on unitQuads instead of ScreenQuads --- include/Core/Engine.h | 14 +++++++------- include/Core/Renderer.h | 2 +- src/game/Core/Renderer.cpp | 12 +++++------- 3 files changed, 13 insertions(+), 15 deletions(-) mode change 100644 => 100755 include/Core/Renderer.h diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 04b3693..1b05bf8 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -63,13 +63,13 @@ public: m_World->ComponentFactory.Register(); m_World->Initialize(); -// { -// auto ent = m_World->CreateEntity(); -// std::shared_ptr transform = m_World->AddComponent(ent); -// transform->Position = glm::vec3(0.f, 0.f, -10.f); -// auto sprite = m_World->AddComponent(ent); -// sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; -// } + { + auto ent = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(ent); + transform->Position = glm::vec3(0.f, 0.f, -10.f); + auto sprite = m_World->AddComponent(ent); + sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + } m_LastTime = glfwGetTime(); } diff --git a/include/Core/Renderer.h b/include/Core/Renderer.h old mode 100644 new mode 100755 index 8aa4a2c..d3c7054 --- a/include/Core/Renderer.h +++ b/include/Core/Renderer.h @@ -73,7 +73,7 @@ private: ShaderProgram* m_spForward; ShaderProgram* m_spScreen; - GLuint m_UnitQuad = 0; + GLuint m_ScreenQuad = 0; Model* m_UnitSphere = nullptr; GLuint m_rbDepthBuffer = 0; diff --git a/src/game/Core/Renderer.cpp b/src/game/Core/Renderer.cpp index 69aee81..e204763 100755 --- a/src/game/Core/Renderer.cpp +++ b/src/game/Core/Renderer.cpp @@ -98,21 +98,19 @@ void dd::Renderer::LoadShaders() /* Forward rendering */ - m_spForward = ResourceManager::Load("Shaders/Forward/"); m_spForward->Link(); /* Screen draw */ - m_spScreen = ResourceManager::Load("Shaders/Screen/"); m_spScreen->Link(); } void dd::Renderer::CreateBuffers() { - m_UnitQuad = CreateQuad(); + m_ScreenQuad = CreateQuad(); m_UnitSphere = ResourceManager::Load("Models/Core/UnitSphere.obj"); glGenRenderbuffers(1, &m_rbDepthBuffer); @@ -222,7 +220,7 @@ void dd::Renderer::Draw(RenderQueueCollection& rq) m_spScreen->Bind(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_CurrentScreenBuffer); - glBindVertexArray(m_UnitQuad); + glBindVertexArray(m_ScreenQuad); glDrawArrays(GL_TRIANGLES, 0, 6); glfwSwapBuffers(m_Window); @@ -271,7 +269,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights) glBindTexture(GL_TEXTURE_2D, m_GDiffuse); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, m_tLighting); - glBindVertexArray(m_UnitQuad); + glBindVertexArray(m_ScreenQuad); glDrawArrays(GL_TRIANGLES, 0, 6); } @@ -329,7 +327,7 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) auto spriteJob = std::dynamic_pointer_cast(job); if (spriteJob) { - glm::mat4 modelMatrix = spriteJob->ModelMatrix; + glm::mat4 modelMatrix = glm::scale(glm::vec3(0.5f)) * spriteJob->ModelMatrix; MVP = PV * modelMatrix; glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); @@ -338,7 +336,7 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, spriteJob->Texture); - glBindVertexArray(m_UnitQuad); + glBindVertexArray(m_ScreenQuad); glDrawArrays(GL_TRIANGLES, 0, 6); continue; From 1e67bfb103f7f49332fc23416576fa857ca840cb Mon Sep 17 00:00:00 2001 From: tleety Date: Thu, 10 Sep 2015 18:32:50 +0200 Subject: [PATCH 5/5] Sprite ACTUALLY rendered as unitquad now. --- src/game/Core/Renderer.cpp | 3 ++- src/game/Core/Shaders/Forward/Vertex.glsl | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/game/Core/Renderer.cpp b/src/game/Core/Renderer.cpp index e204763..c22530a 100755 --- a/src/game/Core/Renderer.cpp +++ b/src/game/Core/Renderer.cpp @@ -327,7 +327,8 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program) auto spriteJob = std::dynamic_pointer_cast(job); if (spriteJob) { - glm::mat4 modelMatrix = glm::scale(glm::vec3(0.5f)) * spriteJob->ModelMatrix; + glm::mat4 modelMatrix = spriteJob->ModelMatrix; + modelMatrix = modelMatrix * glm::scale(glm::vec3(0.5f)); MVP = PV * modelMatrix; glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix)); diff --git a/src/game/Core/Shaders/Forward/Vertex.glsl b/src/game/Core/Shaders/Forward/Vertex.glsl index 46ccf5a..64a9e26 100755 --- a/src/game/Core/Shaders/Forward/Vertex.glsl +++ b/src/game/Core/Shaders/Forward/Vertex.glsl @@ -68,6 +68,7 @@ void main() //gl_Position = MVP * boneTransform * vec4(Position, 1.0); gl_Position = MVP * vec4(Position, 1.0); + //TODO: Make sure that boneTransform works here. Output.Position = (V * M * boneTransform * vec4(Position, 1.0)).xyz; Output.Normal = (inverse(transpose(V * M)) * boneTransform * vec4(Normal, 0.0)).xyz; Output.Tangent = Tangent;