diff --git a/SDK/src/NDK/Systems/RenderSystem.cpp b/SDK/src/NDK/Systems/RenderSystem.cpp index 9bd53e58a..3390edf0f 100644 --- a/SDK/src/NDK/Systems/RenderSystem.cpp +++ b/SDK/src/NDK/Systems/RenderSystem.cpp @@ -37,8 +37,9 @@ namespace Ndk NzSceneData sceneData; sceneData.ambientColor = NzColor(25, 25, 25); sceneData.background = &background; + sceneData.viewer = &camComponent; - m_renderTechnique.Draw(&camComponent, sceneData); + m_renderTechnique.Draw(sceneData); } } diff --git a/include/Nazara/Graphics/AbstractRenderTechnique.hpp b/include/Nazara/Graphics/AbstractRenderTechnique.hpp index 646e713f9..8a464b4e3 100644 --- a/include/Nazara/Graphics/AbstractRenderTechnique.hpp +++ b/include/Nazara/Graphics/AbstractRenderTechnique.hpp @@ -25,7 +25,7 @@ class NAZARA_API NzAbstractRenderTechnique : NzNonCopyable NzAbstractRenderTechnique(); virtual ~NzAbstractRenderTechnique(); - virtual bool Draw(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const = 0; + virtual bool Draw(const NzSceneData& sceneData) const = 0; virtual void EnableInstancing(bool instancing); diff --git a/include/Nazara/Graphics/DeferredBloomPass.hpp b/include/Nazara/Graphics/DeferredBloomPass.hpp index f2539421f..85f770470 100644 --- a/include/Nazara/Graphics/DeferredBloomPass.hpp +++ b/include/Nazara/Graphics/DeferredBloomPass.hpp @@ -27,7 +27,7 @@ class NAZARA_API NzDeferredBloomPass : public NzDeferredRenderPass float GetBrightThreshold() const; NzTexture* GetTexture(unsigned int i) const; - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; bool Resize(const NzVector2ui& dimensions); void SetBlurPassCount(unsigned int passCount); diff --git a/include/Nazara/Graphics/DeferredDOFPass.hpp b/include/Nazara/Graphics/DeferredDOFPass.hpp index bbcae2275..b25c21613 100644 --- a/include/Nazara/Graphics/DeferredDOFPass.hpp +++ b/include/Nazara/Graphics/DeferredDOFPass.hpp @@ -21,7 +21,7 @@ class NAZARA_API NzDeferredDOFPass : public NzDeferredRenderPass NzDeferredDOFPass(); virtual ~NzDeferredDOFPass(); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; bool Resize(const NzVector2ui& dimensions); protected: diff --git a/include/Nazara/Graphics/DeferredFXAAPass.hpp b/include/Nazara/Graphics/DeferredFXAAPass.hpp index 043518ba6..b9ca6f1ea 100644 --- a/include/Nazara/Graphics/DeferredFXAAPass.hpp +++ b/include/Nazara/Graphics/DeferredFXAAPass.hpp @@ -19,7 +19,7 @@ class NAZARA_API NzDeferredFXAAPass : public NzDeferredRenderPass NzDeferredFXAAPass(); virtual ~NzDeferredFXAAPass(); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; protected: NzRenderStates m_states; diff --git a/include/Nazara/Graphics/DeferredFinalPass.hpp b/include/Nazara/Graphics/DeferredFinalPass.hpp index 1514a5c04..9d97a24c7 100644 --- a/include/Nazara/Graphics/DeferredFinalPass.hpp +++ b/include/Nazara/Graphics/DeferredFinalPass.hpp @@ -19,7 +19,7 @@ class NAZARA_API NzDeferredFinalPass : public NzDeferredRenderPass NzDeferredFinalPass(); virtual ~NzDeferredFinalPass(); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; protected: NzRenderStates m_states; diff --git a/include/Nazara/Graphics/DeferredFogPass.hpp b/include/Nazara/Graphics/DeferredFogPass.hpp index 1c03fe8d2..c466e156d 100644 --- a/include/Nazara/Graphics/DeferredFogPass.hpp +++ b/include/Nazara/Graphics/DeferredFogPass.hpp @@ -19,7 +19,7 @@ class NAZARA_API NzDeferredFogPass : public NzDeferredRenderPass NzDeferredFogPass(); virtual ~NzDeferredFogPass(); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; protected: NzRenderStates m_states; diff --git a/include/Nazara/Graphics/DeferredForwardPass.hpp b/include/Nazara/Graphics/DeferredForwardPass.hpp index 824313d87..df0a84589 100644 --- a/include/Nazara/Graphics/DeferredForwardPass.hpp +++ b/include/Nazara/Graphics/DeferredForwardPass.hpp @@ -19,7 +19,7 @@ class NAZARA_API NzDeferredForwardPass : public NzDeferredRenderPass virtual ~NzDeferredForwardPass(); void Initialize(NzDeferredRenderTechnique* technique); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const; protected: const NzForwardRenderTechnique* m_forwardTechnique; diff --git a/include/Nazara/Graphics/DeferredGeometryPass.hpp b/include/Nazara/Graphics/DeferredGeometryPass.hpp index bef3746e2..b8ef4bd55 100644 --- a/include/Nazara/Graphics/DeferredGeometryPass.hpp +++ b/include/Nazara/Graphics/DeferredGeometryPass.hpp @@ -18,7 +18,7 @@ class NAZARA_API NzDeferredGeometryPass : public NzDeferredRenderPass NzDeferredGeometryPass(); virtual ~NzDeferredGeometryPass(); - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; bool Resize(const NzVector2ui& dimensions); protected: diff --git a/include/Nazara/Graphics/DeferredPhongLightingPass.hpp b/include/Nazara/Graphics/DeferredPhongLightingPass.hpp index 9da871fea..0c907cb7a 100644 --- a/include/Nazara/Graphics/DeferredPhongLightingPass.hpp +++ b/include/Nazara/Graphics/DeferredPhongLightingPass.hpp @@ -26,7 +26,7 @@ class NAZARA_API NzDeferredPhongLightingPass : public NzDeferredRenderPass bool IsLightMeshesDrawingEnabled() const; - bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; + bool Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const; protected: NzLightUniforms m_directionalLightUniforms; diff --git a/include/Nazara/Graphics/DeferredRenderPass.hpp b/include/Nazara/Graphics/DeferredRenderPass.hpp index 24ca198a3..f596110c3 100644 --- a/include/Nazara/Graphics/DeferredRenderPass.hpp +++ b/include/Nazara/Graphics/DeferredRenderPass.hpp @@ -34,7 +34,7 @@ class NAZARA_API NzDeferredRenderPass bool IsEnabled() const; - virtual bool Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const = 0; + virtual bool Process(const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const = 0; virtual bool Resize(const NzVector2ui& GBufferSize); protected: diff --git a/include/Nazara/Graphics/DeferredRenderTechnique.hpp b/include/Nazara/Graphics/DeferredRenderTechnique.hpp index 637dac881..143fe48ac 100644 --- a/include/Nazara/Graphics/DeferredRenderTechnique.hpp +++ b/include/Nazara/Graphics/DeferredRenderTechnique.hpp @@ -30,7 +30,7 @@ class NAZARA_API NzDeferredRenderTechnique : public NzAbstractRenderTechnique NzDeferredRenderTechnique(); ~NzDeferredRenderTechnique(); - bool Draw(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const override; + bool Draw(const NzSceneData& sceneData) const override; void EnablePass(nzRenderPassType renderPass, int position, bool enable); diff --git a/include/Nazara/Graphics/ForwardRenderTechnique.hpp b/include/Nazara/Graphics/ForwardRenderTechnique.hpp index 0ea4e450c..9726090f9 100644 --- a/include/Nazara/Graphics/ForwardRenderTechnique.hpp +++ b/include/Nazara/Graphics/ForwardRenderTechnique.hpp @@ -21,7 +21,7 @@ class NAZARA_API NzForwardRenderTechnique : public NzAbstractRenderTechnique NzForwardRenderTechnique(); ~NzForwardRenderTechnique() = default; - bool Draw(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const override; + bool Draw(const NzSceneData& sceneData) const override; unsigned int GetMaxLightPassPerObject() const; NzAbstractRenderQueue* GetRenderQueue() override; @@ -36,10 +36,10 @@ class NAZARA_API NzForwardRenderTechnique : public NzAbstractRenderTechnique struct ShaderUniforms; bool ChooseLights(const NzSpheref& object, bool includeDirectionalLights = true) const; - void DrawBasicSprites(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const; - void DrawBillboards(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const; - void DrawOpaqueModels(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const; - void DrawTransparentModels(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const; + void DrawBasicSprites(const NzSceneData& sceneData) const; + void DrawBillboards(const NzSceneData& sceneData) const; + void DrawOpaqueModels(const NzSceneData& sceneData) const; + void DrawTransparentModels(const NzSceneData& sceneData) const; const ShaderUniforms* GetShaderUniforms(const NzShader* shader) const; void OnShaderInvalidated(const NzShader* shader) const; void SendLightUniforms(const NzShader* shader, const NzLightUniforms& uniforms, unsigned int index, unsigned int uniformOffset) const; diff --git a/include/Nazara/Graphics/SceneData.hpp b/include/Nazara/Graphics/SceneData.hpp index d13207fae..a1dbe8103 100644 --- a/include/Nazara/Graphics/SceneData.hpp +++ b/include/Nazara/Graphics/SceneData.hpp @@ -10,11 +10,13 @@ #include class NzAbstractBackground; +class NzAbstractViewer; struct NzSceneData { NzColor ambientColor; - NzAbstractBackground* background; + const NzAbstractBackground* background; + const NzAbstractViewer* viewer; }; #endif // NAZARA_SCENEDATA_HPP diff --git a/src/Nazara/Graphics/DeferredBloomPass.cpp b/src/Nazara/Graphics/DeferredBloomPass.cpp index 1883a3346..aab4251a3 100644 --- a/src/Nazara/Graphics/DeferredBloomPass.cpp +++ b/src/Nazara/Graphics/DeferredBloomPass.cpp @@ -63,9 +63,8 @@ NzTexture* NzDeferredBloomPass::GetTexture(unsigned int i) const return m_bloomTextures[i]; } -bool NzDeferredBloomPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredBloomPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { - NazaraUnused(viewer); NazaraUnused(sceneData); NzRenderer::SetRenderStates(m_bloomStates); diff --git a/src/Nazara/Graphics/DeferredDOFPass.cpp b/src/Nazara/Graphics/DeferredDOFPass.cpp index 06de07dfb..6b0e65c31 100644 --- a/src/Nazara/Graphics/DeferredDOFPass.cpp +++ b/src/Nazara/Graphics/DeferredDOFPass.cpp @@ -117,9 +117,8 @@ NzDeferredDOFPass::NzDeferredDOFPass() NzDeferredDOFPass::~NzDeferredDOFPass() = default; -bool NzDeferredDOFPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredDOFPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { - NazaraUnused(viewer); NazaraUnused(sceneData); NzRenderer::SetTextureSampler(0, m_pointSampler); diff --git a/src/Nazara/Graphics/DeferredFXAAPass.cpp b/src/Nazara/Graphics/DeferredFXAAPass.cpp index 09f8150c7..0e903f8a8 100644 --- a/src/Nazara/Graphics/DeferredFXAAPass.cpp +++ b/src/Nazara/Graphics/DeferredFXAAPass.cpp @@ -21,9 +21,8 @@ NzDeferredFXAAPass::NzDeferredFXAAPass() NzDeferredFXAAPass::~NzDeferredFXAAPass() = default; -bool NzDeferredFXAAPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredFXAAPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { - NazaraUnused(viewer); NazaraUnused(sceneData); m_workRTT->SetColorTarget(firstWorkTexture); diff --git a/src/Nazara/Graphics/DeferredFinalPass.cpp b/src/Nazara/Graphics/DeferredFinalPass.cpp index d97058ffb..67c84958b 100644 --- a/src/Nazara/Graphics/DeferredFinalPass.cpp +++ b/src/Nazara/Graphics/DeferredFinalPass.cpp @@ -33,13 +33,13 @@ NzDeferredFinalPass::NzDeferredFinalPass() NzDeferredFinalPass::~NzDeferredFinalPass() = default; -bool NzDeferredFinalPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredFinalPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { - NazaraUnused(viewer); - NazaraUnused(sceneData); + NazaraAssert(sceneData.viewer, "Invalid viewer"); + NazaraUnused(firstWorkTexture); - viewer->ApplyView(); + sceneData.viewer->ApplyView(); NzRenderer::SetRenderStates(m_states); NzRenderer::SetTexture(0, m_workTextures[secondWorkTexture]); diff --git a/src/Nazara/Graphics/DeferredFogPass.cpp b/src/Nazara/Graphics/DeferredFogPass.cpp index e2838e4f5..e99f4807c 100644 --- a/src/Nazara/Graphics/DeferredFogPass.cpp +++ b/src/Nazara/Graphics/DeferredFogPass.cpp @@ -130,16 +130,16 @@ NzDeferredFogPass::NzDeferredFogPass() NzDeferredFogPass::~NzDeferredFogPass() = default; -bool NzDeferredFogPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredFogPass::Process( const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { - NazaraUnused(sceneData); + NazaraAssert(sceneData.viewer, "Invalid viewer"); m_workRTT->SetColorTarget(firstWorkTexture); NzRenderer::SetTarget(m_workRTT); NzRenderer::SetViewport(NzRecti(0, 0, m_dimensions.x, m_dimensions.y)); NzRenderer::SetShader(m_shader); - m_shader->SendVector(m_shaderEyePositionLocation, viewer->GetEyePosition()); + m_shader->SendVector(m_shaderEyePositionLocation, sceneData.viewer->GetEyePosition()); NzRenderer::SetRenderStates(m_states); NzRenderer::SetTexture(0, m_workTextures[secondWorkTexture]); diff --git a/src/Nazara/Graphics/DeferredForwardPass.cpp b/src/Nazara/Graphics/DeferredForwardPass.cpp index f17ec3ea0..7a568645e 100644 --- a/src/Nazara/Graphics/DeferredForwardPass.cpp +++ b/src/Nazara/Graphics/DeferredForwardPass.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include #include @@ -21,9 +22,9 @@ void NzDeferredForwardPass::Initialize(NzDeferredRenderTechnique* technique) m_forwardTechnique = technique->GetForwardTechnique(); } -bool NzDeferredForwardPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const +bool NzDeferredForwardPass::Process(const NzSceneData& sceneData, unsigned int workTexture, unsigned sceneTexture) const { - NazaraUnused(sceneData); + NazaraAssert(sceneData.viewer, "Invalid viewer"); NazaraUnused(workTexture); m_workRTT->SetColorTarget(sceneTexture); @@ -31,13 +32,12 @@ bool NzDeferredForwardPass::Process(const NzAbstractViewer* viewer, const NzScen NzRenderer::SetViewport(NzRecti(0, 0, m_dimensions.x, m_dimensions.y)); if (sceneData.background) - sceneData.background->Draw(viewer); + sceneData.background->Draw(sceneData.viewer); - NzRenderer::SetMatrix(nzMatrixType_Projection, viewer->GetProjectionMatrix()); - NzRenderer::SetMatrix(nzMatrixType_View, viewer->GetViewMatrix()); + NzRenderer::SetMatrix(nzMatrixType_Projection, sceneData.viewer->GetProjectionMatrix()); + NzRenderer::SetMatrix(nzMatrixType_View, sceneData.viewer->GetViewMatrix()); - m_forwardTechnique->Draw(viewer, sceneData); + m_forwardTechnique->Draw(sceneData); return false; } - diff --git a/src/Nazara/Graphics/DeferredGeometryPass.cpp b/src/Nazara/Graphics/DeferredGeometryPass.cpp index 7d6e44fef..9e4ebb9ba 100644 --- a/src/Nazara/Graphics/DeferredGeometryPass.cpp +++ b/src/Nazara/Graphics/DeferredGeometryPass.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include #include @@ -29,8 +30,9 @@ NzDeferredGeometryPass::NzDeferredGeometryPass() NzDeferredGeometryPass::~NzDeferredGeometryPass() = default; -bool NzDeferredGeometryPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredGeometryPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { + NazaraAssert(sceneData.viewer, "Invalid viewer"); NazaraUnused(firstWorkTexture); NazaraUnused(secondWorkTexture); @@ -45,8 +47,8 @@ bool NzDeferredGeometryPass::Process(const NzAbstractViewer* viewer, const NzSce NzRenderer::DrawFullscreenQuad(); - NzRenderer::SetMatrix(nzMatrixType_Projection, viewer->GetProjectionMatrix()); - NzRenderer::SetMatrix(nzMatrixType_View, viewer->GetViewMatrix()); + NzRenderer::SetMatrix(nzMatrixType_Projection, sceneData.viewer->GetProjectionMatrix()); + NzRenderer::SetMatrix(nzMatrixType_View, sceneData.viewer->GetViewMatrix()); const NzShader* lastShader = nullptr; const ShaderUniforms* shaderUniforms = nullptr; @@ -81,7 +83,7 @@ bool NzDeferredGeometryPass::Process(const NzAbstractViewer* viewer, const NzSce // Couleur ambiante de la scène shader->SendColor(shaderUniforms->sceneAmbient, sceneData.ambientColor); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); lastShader = shader; } diff --git a/src/Nazara/Graphics/DeferredPhongLightingPass.cpp b/src/Nazara/Graphics/DeferredPhongLightingPass.cpp index ea273b275..e63c19d61 100644 --- a/src/Nazara/Graphics/DeferredPhongLightingPass.cpp +++ b/src/Nazara/Graphics/DeferredPhongLightingPass.cpp @@ -65,8 +65,9 @@ bool NzDeferredPhongLightingPass::IsLightMeshesDrawingEnabled() const return m_lightMeshesDrawing; } -bool NzDeferredPhongLightingPass::Process(const NzAbstractViewer* viewer, const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const +bool NzDeferredPhongLightingPass::Process(const NzSceneData& sceneData, unsigned int firstWorkTexture, unsigned secondWorkTexture) const { + NazaraAssert(sceneData.viewer, "Invalid viewer"); NazaraUnused(secondWorkTexture); m_workRTT->SetColorTarget(firstWorkTexture); @@ -98,7 +99,7 @@ bool NzDeferredPhongLightingPass::Process(const NzAbstractViewer* viewer, const NzRenderer::SetRenderStates(lightStates); NzRenderer::SetShader(m_directionalLightShader); m_directionalLightShader->SendColor(m_directionalLightShaderSceneAmbientLocation, sceneData.ambientColor); - m_directionalLightShader->SendVector(m_directionalLightShaderEyePositionLocation, viewer->GetEyePosition()); + m_directionalLightShader->SendVector(m_directionalLightShaderEyePositionLocation, sceneData.viewer->GetEyePosition()); for (auto& light : m_renderQueue->directionalLights) { @@ -131,7 +132,7 @@ bool NzDeferredPhongLightingPass::Process(const NzAbstractViewer* viewer, const NzRenderer::SetShader(m_pointSpotLightShader); m_pointSpotLightShader->SendColor(m_pointSpotLightShaderSceneAmbientLocation, sceneData.ambientColor); - m_pointSpotLightShader->SendVector(m_pointSpotLightShaderEyePositionLocation, viewer->GetEyePosition()); + m_pointSpotLightShader->SendVector(m_pointSpotLightShaderEyePositionLocation, sceneData.viewer->GetEyePosition()); NzMatrix4f lightMatrix; lightMatrix.MakeIdentity(); diff --git a/src/Nazara/Graphics/DeferredRenderTechnique.cpp b/src/Nazara/Graphics/DeferredRenderTechnique.cpp index 610317392..72ce11fef 100644 --- a/src/Nazara/Graphics/DeferredRenderTechnique.cpp +++ b/src/Nazara/Graphics/DeferredRenderTechnique.cpp @@ -203,9 +203,10 @@ m_GBufferSize(0U) NzDeferredRenderTechnique::~NzDeferredRenderTechnique() = default; -bool NzDeferredRenderTechnique::Draw(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +bool NzDeferredRenderTechnique::Draw(const NzSceneData& sceneData) const { - NzRecti viewerViewport = viewer->GetViewport(); + NazaraAssert(sceneData.viewer, "Invalid viewer"); + NzRecti viewerViewport = sceneData.viewer->GetViewport(); NzVector2ui viewportDimensions(viewerViewport.width, viewerViewport.height); if (viewportDimensions != m_GBufferSize) @@ -226,7 +227,7 @@ bool NzDeferredRenderTechnique::Draw(const NzAbstractViewer* viewer, const NzSce const NzDeferredRenderPass* pass = passIt2.second.get(); if (pass->IsEnabled()) { - if (pass->Process(viewer, sceneData, workTexture, sceneTexture)) + if (pass->Process(sceneData, workTexture, sceneTexture)) std::swap(workTexture, sceneTexture); } } diff --git a/src/Nazara/Graphics/ForwardRenderTechnique.cpp b/src/Nazara/Graphics/ForwardRenderTechnique.cpp index da2d83256..f0c85e607 100644 --- a/src/Nazara/Graphics/ForwardRenderTechnique.cpp +++ b/src/Nazara/Graphics/ForwardRenderTechnique.cpp @@ -47,30 +47,30 @@ m_maxLightPassPerObject(3) m_spriteBuffer.Reset(NzVertexDeclaration::Get(nzVertexLayout_XYZ_Color_UV), &m_vertexBuffer); } -bool NzForwardRenderTechnique::Draw(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +bool NzForwardRenderTechnique::Draw(const NzSceneData& sceneData) const { - NazaraAssert(viewer, "Invalid viewer"); + NazaraAssert(sceneData.viewer, "Invalid viewer"); - m_renderQueue.Sort(viewer); + m_renderQueue.Sort(sceneData.viewer); NzRenderer::Enable(nzRendererParameter_DepthBuffer, true); NzRenderer::Enable(nzRendererParameter_DepthWrite, true); NzRenderer::Clear(nzRendererBuffer_Depth); if (sceneData.background) - sceneData.background->Draw(viewer); + sceneData.background->Draw(sceneData.viewer); if (!m_renderQueue.opaqueModels.empty()) - DrawOpaqueModels(viewer, sceneData); + DrawOpaqueModels(sceneData); if (!m_renderQueue.transparentModels.empty()) - DrawTransparentModels(viewer, sceneData); + DrawTransparentModels(sceneData); if (!m_renderQueue.basicSprites.empty()) - DrawBasicSprites(viewer, sceneData); + DrawBasicSprites(sceneData); if (!m_renderQueue.billboards.empty()) - DrawBillboards(viewer, sceneData); + DrawBillboards(sceneData); // Les autres drawables (Exemple: Terrain) for (const NzDrawable* drawable : m_renderQueue.otherDrawables) @@ -201,9 +201,9 @@ bool NzForwardRenderTechnique::ChooseLights(const NzSpheref& object, bool includ }); } -void NzForwardRenderTechnique::DrawBasicSprites(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +void NzForwardRenderTechnique::DrawBasicSprites(const NzSceneData& sceneData) const { - NazaraAssert(viewer, "Invalid viewer"); + NazaraAssert(sceneData.viewer, "Invalid viewer"); const NzShader* lastShader = nullptr; const ShaderUniforms* shaderUniforms = nullptr; @@ -254,7 +254,7 @@ void NzForwardRenderTechnique::DrawBasicSprites(const NzAbstractViewer* viewer, // Overlay shader->SendInteger(shaderUniforms->textureOverlay, overlayUnit); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); lastShader = shader; } @@ -307,9 +307,9 @@ void NzForwardRenderTechnique::DrawBasicSprites(const NzAbstractViewer* viewer, } } -void NzForwardRenderTechnique::DrawBillboards(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +void NzForwardRenderTechnique::DrawBillboards(const NzSceneData& sceneData) const { - NazaraAssert(viewer, "Invalid viewer"); + NazaraAssert(sceneData.viewer, "Invalid viewer"); const NzShader* lastShader = nullptr; const ShaderUniforms* shaderUniforms = nullptr; @@ -342,7 +342,7 @@ void NzForwardRenderTechnique::DrawBillboards(const NzAbstractViewer* viewer, co // Couleur ambiante de la scène shader->SendColor(shaderUniforms->sceneAmbient, sceneData.ambientColor); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); lastShader = shader; } @@ -388,7 +388,7 @@ void NzForwardRenderTechnique::DrawBillboards(const NzAbstractViewer* viewer, co // Couleur ambiante de la scène shader->SendColor(shaderUniforms->sceneAmbient, sceneData.ambientColor); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); lastShader = shader; } @@ -449,9 +449,9 @@ void NzForwardRenderTechnique::DrawBillboards(const NzAbstractViewer* viewer, co } } -void NzForwardRenderTechnique::DrawOpaqueModels(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +void NzForwardRenderTechnique::DrawOpaqueModels(const NzSceneData& sceneData) const { - NazaraAssert(viewer, "Invalid viewer"); + NazaraAssert(sceneData.viewer, "Invalid viewer"); const NzShader* lastShader = nullptr; const ShaderUniforms* shaderUniforms = nullptr; @@ -486,7 +486,7 @@ void NzForwardRenderTechnique::DrawOpaqueModels(const NzAbstractViewer* viewer, // Couleur ambiante de la scène shader->SendColor(shaderUniforms->sceneAmbient, sceneData.ambientColor); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); lastShader = shader; } @@ -652,9 +652,9 @@ void NzForwardRenderTechnique::DrawOpaqueModels(const NzAbstractViewer* viewer, } } -void NzForwardRenderTechnique::DrawTransparentModels(const NzAbstractViewer* viewer, const NzSceneData& sceneData) const +void NzForwardRenderTechnique::DrawTransparentModels(const NzSceneData& sceneData) const { - NazaraAssert(viewer, "Invalid viewer"); + NazaraAssert(sceneData.viewer, "Invalid viewer"); const NzShader* lastShader = nullptr; const ShaderUniforms* shaderUniforms = nullptr; @@ -679,7 +679,7 @@ void NzForwardRenderTechnique::DrawTransparentModels(const NzAbstractViewer* vie // Couleur ambiante de la scène shader->SendColor(shaderUniforms->sceneAmbient, sceneData.ambientColor); // Position de la caméra - shader->SendVector(shaderUniforms->eyePosition, viewer->GetEyePosition()); + shader->SendVector(shaderUniforms->eyePosition, sceneData.viewer->GetEyePosition()); // On envoie les lumières directionnelles s'il y a (Les mêmes pour tous) if (shaderUniforms->hasLightUniforms) diff --git a/src/Nazara/Graphics/Scene.cpp b/src/Nazara/Graphics/Scene.cpp index 48e8dd9a6..207e89ac8 100644 --- a/src/Nazara/Graphics/Scene.cpp +++ b/src/Nazara/Graphics/Scene.cpp @@ -73,9 +73,10 @@ void NzScene::Draw() NzSceneData sceneData; sceneData.ambientColor = m_ambientColor; sceneData.background = (m_backgroundEnabled) ? m_background.get() : nullptr; + sceneData.viewer = m_viewer; NzErrorFlags errFlags(nzErrorFlag_ThrowException, true); - m_renderTechnique->Draw(m_viewer, sceneData); + m_renderTechnique->Draw(sceneData); } catch (const std::exception& e) {