Graphics/RenderTechnique: Move viewer to SceneData
Former-commit-id: 6c8b5a00b65649c7a3877a186b51f7240361e801
This commit is contained in:
parent
8f797737c6
commit
d9c31636b9
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -10,11 +10,13 @@
|
|||
#include <Nazara/Core/Color.hpp>
|
||||
|
||||
class NzAbstractBackground;
|
||||
class NzAbstractViewer;
|
||||
|
||||
struct NzSceneData
|
||||
{
|
||||
NzColor ambientColor;
|
||||
NzAbstractBackground* background;
|
||||
const NzAbstractBackground* background;
|
||||
const NzAbstractViewer* viewer;
|
||||
};
|
||||
|
||||
#endif // NAZARA_SCENEDATA_HPP
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/DeferredForwardPass.hpp>
|
||||
#include <Nazara/Core/Error.hpp>
|
||||
#include <Nazara/Graphics/AbstractBackground.hpp>
|
||||
#include <Nazara/Graphics/AbstractViewer.hpp>
|
||||
#include <Nazara/Graphics/DeferredRenderTechnique.hpp>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Graphics/DeferredGeometryPass.hpp>
|
||||
#include <Nazara/Core/Error.hpp>
|
||||
#include <Nazara/Core/ErrorFlags.hpp>
|
||||
#include <Nazara/Graphics/AbstractViewer.hpp>
|
||||
#include <Nazara/Graphics/DeferredRenderTechnique.hpp>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue