From b908a9f9c683abae3a745105bd945af980a7d2b1 Mon Sep 17 00:00:00 2001 From: Simon Holmberg Date: Mon, 11 Jan 2016 13:48:55 +0100 Subject: [PATCH] Revert "Forward+" --- assets | 2 +- include/Engine/Rendering/DrawFinalPass.h | 38 ----- include/Engine/Rendering/DrawFinalPassState.h | 15 -- include/Engine/Rendering/LightCullingPass.h | 78 --------- .../Engine/Rendering/LightCullingPassState.h | 0 include/Engine/Rendering/PickingPass.h | 6 +- include/Engine/Rendering/RenderQueue.h | 11 +- include/Engine/Rendering/Renderer.h | 65 +++++++- resources/Schema/Components.xsd | 1 - resources/Schema/Components/PointLight.xml | 7 - resources/Schema/Components/PointLight.xsd | 20 --- resources/Schema/Entities/Test.xml | 8 +- resources/Schema/Types/Entity.xsd | 1 - resources/Shaders/CullLights.comp.glsl | 154 ------------------ resources/Shaders/ForwardPlus.frag.glsl | 132 --------------- resources/Shaders/ForwardPlus.vert.glsl | 34 ---- resources/Shaders/GridFrustum.comp.glsl | 47 +++--- resources/Shaders/cullLights.comp.glsl | 35 ++++ src/Engine/Rendering/DrawFinalPass.cpp | 65 -------- src/Engine/Rendering/DrawFinalPassState.cpp | 17 -- src/Engine/Rendering/DrawScenePass.cpp | 15 +- src/Engine/Rendering/LightCullingPass.cpp | 126 -------------- .../Rendering/LightCullingPassState.cpp | 0 src/Engine/Rendering/RenderQueueFactory.cpp | 28 ---- src/Engine/Rendering/RenderState.cpp | 1 - src/Engine/Rendering/Renderer.cpp | 144 +++++++++++++++- 26 files changed, 271 insertions(+), 779 deletions(-) delete mode 100644 include/Engine/Rendering/DrawFinalPass.h delete mode 100644 include/Engine/Rendering/DrawFinalPassState.h delete mode 100644 include/Engine/Rendering/LightCullingPass.h delete mode 100644 include/Engine/Rendering/LightCullingPassState.h delete mode 100644 resources/Schema/Components/PointLight.xml delete mode 100644 resources/Schema/Components/PointLight.xsd delete mode 100644 resources/Shaders/CullLights.comp.glsl delete mode 100644 resources/Shaders/ForwardPlus.frag.glsl delete mode 100644 resources/Shaders/ForwardPlus.vert.glsl create mode 100644 resources/Shaders/cullLights.comp.glsl delete mode 100644 src/Engine/Rendering/DrawFinalPass.cpp delete mode 100644 src/Engine/Rendering/DrawFinalPassState.cpp delete mode 100644 src/Engine/Rendering/LightCullingPass.cpp delete mode 100644 src/Engine/Rendering/LightCullingPassState.cpp diff --git a/assets b/assets index c8e631f4..673d4a4e 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit c8e631f449515cdbe3647b96ce472839748e28f9 +Subproject commit 673d4a4e4c5a3f5bc9fedf82234e8f8751f63a44 diff --git a/include/Engine/Rendering/DrawFinalPass.h b/include/Engine/Rendering/DrawFinalPass.h deleted file mode 100644 index 1a201daf..00000000 --- a/include/Engine/Rendering/DrawFinalPass.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef DrawFinalPass_h__ -#define DrawFinalPass_h__ - -#include "IRenderer.h" -#include "DrawFinalPassState.h" -#include "LightCullingPass.h" -#include "FrameBuffer.h" -#include "ShaderProgram.h" -#include "Util/UnorderedMapVec2.h" -#include "Texture.h" - -class DrawFinalPass -{ -public: - DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass); - ~DrawFinalPass() { } - void InitializeTextures(); - void InitializeFrameBuffers(); - void InitializeShaderPrograms(); - - void Draw(RenderQueueCollection& rq); - - //Getters - - -private: - void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const; - - Texture* m_WhiteTexture; - - const IRenderer* m_Renderer; - const LightCullingPass* m_LightCullingPass; - - ShaderProgram* m_ForwardPlusProgram; - -}; - -#endif \ No newline at end of file diff --git a/include/Engine/Rendering/DrawFinalPassState.h b/include/Engine/Rendering/DrawFinalPassState.h deleted file mode 100644 index 72d8e392..00000000 --- a/include/Engine/Rendering/DrawFinalPassState.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef DrawFinalPassState_h__ -#define DrawFinalPassState_h__ - -#include "Rendering/RenderState.h" - -class DrawFinalPassState : public RenderState -{ -public: - DrawFinalPassState(); - ~DrawFinalPassState(); -private: - -}; - -#endif \ No newline at end of file diff --git a/include/Engine/Rendering/LightCullingPass.h b/include/Engine/Rendering/LightCullingPass.h deleted file mode 100644 index e08aacdf..00000000 --- a/include/Engine/Rendering/LightCullingPass.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef LightCullingPass_h__ -#define LightCullingPass_h__ - -#define TILE_SIZE 16 -#define NUM_LIGHTS 1000 - -#include "IRenderer.h" -#include "LightCullingPassState.h" -#include "ShaderProgram.h" - - -class LightCullingPass -{ -public: - LightCullingPass(IRenderer* renderer); - ~LightCullingPass(); - - void GenerateNewFrustum(); - void CullLights(); - void FillLightList(RenderQueueCollection& rq); - - GLuint FrustumSSBO() const { return m_FrustumSSBO; } - GLuint LightSSBO() const { return m_LightSSBO; } - GLuint LightGridSSBO() const { return m_LightGridSSBO; } - GLuint LightOffsetSSBO() const { return m_LightOffsetSSBO; } - GLuint LightIndexSSBO() const { return m_LightIndexSSBO; } -private: - - void InitializeSSBOs(); - void InitializeShaderPrograms(); - - const IRenderer* m_Renderer; - - GLuint m_FrustumSSBO = 0; - GLuint m_LightSSBO = 0; - GLuint m_LightGridSSBO = 0; - GLuint m_LightOffsetSSBO = 0; - GLuint m_LightIndexSSBO = 0; - - ShaderProgram* m_CalculateFrustumProgram; - ShaderProgram* m_LightCullProgram; - - struct Plane { - glm::vec3 Normal; - float d; - }; - - struct Frustum { - Plane Planes[4]; - }; - Frustum m_Frustums[80*45]; //TODO: Renderer: Make this change with resolution - - //This should be a component - struct PointLight { - glm::vec4 Position = glm::vec4(0.f); - glm::vec4 Color = glm::vec4(1.f); - float Radius = 5.f; - float Intensity = 0.8f; - float Falloff = 0.3f; - float Padding = 1337; - }; - std::vector m_PointLights; - - struct LightGrid { - float Start; - float Amount; - glm::vec2 Padding; - }; - - LightGrid m_LightGrid[80*45]; //TODO: Renderer: Make this change with resolution - - int m_LightOffset = 0; - - float m_LightIndex[80*45*200]; //TODO: Renderer: Make this change with resolution -}; - - -#endif \ No newline at end of file diff --git a/include/Engine/Rendering/LightCullingPassState.h b/include/Engine/Rendering/LightCullingPassState.h deleted file mode 100644 index e69de29b..00000000 diff --git a/include/Engine/Rendering/PickingPass.h b/include/Engine/Rendering/PickingPass.h index 0c1261ce..e1bc42db 100644 --- a/include/Engine/Rendering/PickingPass.h +++ b/include/Engine/Rendering/PickingPass.h @@ -1,8 +1,6 @@ #ifndef PickingPass_h__ #define PickingPass_h__ - - #include "IRenderer.h" #include "PickingPassState.h" #include "FrameBuffer.h" @@ -11,8 +9,6 @@ #include "../Core/EventBroker.h" #include "EPicking.h" - - class PickingPass { public: @@ -24,6 +20,7 @@ public: void Draw(RenderQueueCollection& rq); + //Getters const ShaderProgram& PickingProgram() const { return *m_PickingProgram; } const std::unordered_map& PickingColorsToEntity() const { return m_PickingColorsToEntity; } @@ -31,6 +28,7 @@ public: GLuint DepthBuffer() const { return m_DepthBuffer; } const FrameBuffer& PickingBuffer() const { return m_PickingBuffer; } + private: void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const; diff --git a/include/Engine/Rendering/RenderQueue.h b/include/Engine/Rendering/RenderQueue.h index 44d5e172..2942c743 100644 --- a/include/Engine/Rendering/RenderQueue.h +++ b/include/Engine/Rendering/RenderQueue.h @@ -82,12 +82,11 @@ struct SpriteJob : RenderJob struct PointLightJob : RenderJob { - glm::vec4 Position; - glm::vec4 Color; - float Radius; - float Intensity; - float Falloff; - float padding = 123; + glm::vec3 Position; + glm::vec3 SpecularColor = glm::vec3(1, 1, 1); + glm::vec3 DiffuseColor = glm::vec3(1, 1, 1); + float Radius = 1.f; + float Intensity = 0.8f; void CalculateHash() override { diff --git a/include/Engine/Rendering/Renderer.h b/include/Engine/Rendering/Renderer.h index c9f5d76f..19b48e1a 100644 --- a/include/Engine/Rendering/Renderer.h +++ b/include/Engine/Rendering/Renderer.h @@ -13,8 +13,19 @@ #include "PickingPass.h" #include "DrawScenePass.h" #include "DebugCameraInputController.h" -#include "LightCullingPass.h" -#include "DrawFinalPass.h" + + +#define TILE_SIZE 16 +#define NUM_LIGHTS 3 + + +enum lightType +{ + Point, + Spot, + Directional, + Area +}; #include "../Core/EventBroker.h" #include "EPicking.h" @@ -47,24 +58,70 @@ private: DrawScenePass* m_DrawScenePass; PickingPass* m_PickingPass; - LightCullingPass* m_LightCullingPass; ImGuiRenderPass* m_ImGuiRenderPass; - DrawFinalPass* m_DrawFinalPass; //----------------------Functions----------------------// void InitializeWindow(); void InitializeShaders(); void InitializeTextures(); + void InitializeSSBOs(); void InitializeRenderPasses(); //TODO: Renderer: Get InputUpdate out of renderer void InputUpdate(double dt); //void PickingPass(RenderQueueCollection& rq); void DrawScreenQuad(GLuint textureToDraw); + //----------------------Forward+-----------------------// + void CalculateFrustum(); + void CullLights(); + //Frustum + struct Plane { + glm::vec3 Normal; + float d; + }; + struct Frustum { + Plane Planes[4]; + }; + Frustum m_Frustums[80*45]; //TODO: Renderer: Make this change with resolution + + //Lights + void TEMPCreateLights(); + //TODO: Renderer: Add Directionllights, spotlights and area lights to this as type. + struct PointLight { + glm::vec4 Position = glm::vec4(0.f); + glm::vec4 Color = glm::vec4(1.f); + float Radius = 5.f; + float Intensity = 0.8f; + float Falloff = 0.3f; + float Padding = 1337; + }; + PointLight m_PointLights[NUM_LIGHTS]; + + struct LightGrid { + int Amount; + int Start; + glm::vec2 Padding; + }; + LightGrid m_LightGrid[80*45]; + + int m_LightOffset = 0; + + int m_LightIndex[80*45*200]; + + //-------------------------SSBO------------------------// + GLuint m_FrustumSSBO = 0; + GLuint m_LightSSBO = 1; + GLuint m_LightGridSSBO = 2; + GLuint m_LightOffsetSSBO = 3; + GLuint m_LightIndexSSBO = 4; + void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type); //--------------------ShaderPrograms-------------------// ShaderProgram* m_BasicForwardProgram; ShaderProgram* m_DrawScreenQuadProgram; + ShaderProgram* m_CalculateFrustumProgram; + ShaderProgram* m_LightCullProgram; + }; #endif \ No newline at end of file diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd index 459fd9d7..7fcdd565 100644 --- a/resources/Schema/Components.xsd +++ b/resources/Schema/Components.xsd @@ -7,7 +7,6 @@ - \ No newline at end of file diff --git a/resources/Schema/Components/PointLight.xml b/resources/Schema/Components/PointLight.xml deleted file mode 100644 index 6b1382db..00000000 --- a/resources/Schema/Components/PointLight.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - 1.0 - 0.8 - 0.3 - true - \ No newline at end of file diff --git a/resources/Schema/Components/PointLight.xsd b/resources/Schema/Components/PointLight.xsd deleted file mode 100644 index d1a9f52c..00000000 --- a/resources/Schema/Components/PointLight.xsd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - A pointlight that lights up geometry in a radius. - - - - - - - - - - - - \ No newline at end of file diff --git a/resources/Schema/Entities/Test.xml b/resources/Schema/Entities/Test.xml index 809bca51..528c7e95 100644 --- a/resources/Schema/Entities/Test.xml +++ b/resources/Schema/Entities/Test.xml @@ -10,7 +10,7 @@ - - +