Deferred Shading update
-Deferred Shading now use a dynamics pass system -Forward Shading is now capable of rendering more than three lights (Multipass) Former-commit-id: 74ed0b998d72aa9eb3bd2aab938a75985ebb2bf6
This commit is contained in:
@@ -9,15 +9,19 @@
|
||||
|
||||
#include <Nazara/Prerequesites.hpp>
|
||||
#include <Nazara/Graphics/AbstractRenderTechnique.hpp>
|
||||
#include <Nazara/Graphics/DeferredRenderPass.hpp>
|
||||
#include <Nazara/Graphics/DeferredRenderQueue.hpp>
|
||||
#include <Nazara/Graphics/ForwardRenderTechnique.hpp>
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
#include <Nazara/Renderer/RenderBuffer.hpp>
|
||||
#include <Nazara/Renderer/RenderStates.hpp>
|
||||
#include <Nazara/Renderer/RenderTexture.hpp>
|
||||
#include <Nazara/Renderer/ShaderProgram.hpp>
|
||||
#include <Nazara/Renderer/Texture.hpp>
|
||||
#include <Nazara/Renderer/TextureSampler.hpp>
|
||||
#include <Nazara/Utility/Mesh.hpp>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
class NAZARA_API NzDeferredRenderTechnique : public NzAbstractRenderTechnique, public NzRenderTarget::Listener
|
||||
{
|
||||
@@ -25,61 +29,47 @@ class NAZARA_API NzDeferredRenderTechnique : public NzAbstractRenderTechnique, p
|
||||
NzDeferredRenderTechnique();
|
||||
~NzDeferredRenderTechnique();
|
||||
|
||||
void Clear(const NzScene* scene);
|
||||
bool Draw(const NzScene* scene);
|
||||
void Clear(const NzScene* scene) const;
|
||||
bool Draw(const NzScene* scene) const;
|
||||
|
||||
void EnablePass(nzRenderPassType renderPass, int position, bool enable);
|
||||
|
||||
NzRenderBuffer* GetDepthStencilBuffer() const;
|
||||
NzTexture* GetGBuffer(unsigned int i) const;
|
||||
NzRenderTexture* GetGBufferRTT() const;
|
||||
const NzForwardRenderTechnique* GetForwardTechnique() const;
|
||||
NzDeferredRenderPass* GetPass(nzRenderPassType renderPass, int position = 0);
|
||||
NzAbstractRenderQueue* GetRenderQueue() override;
|
||||
nzRenderTechniqueType GetType() const override;
|
||||
NzRenderTexture* GetWorkRTT() const;
|
||||
NzTexture* GetWorkTexture(unsigned int i) const;
|
||||
|
||||
bool IsPassEnabled(nzRenderPassType renderPass, int position);
|
||||
|
||||
NzDeferredRenderPass* ResetPass(nzRenderPassType renderPass, int position);
|
||||
|
||||
void SetPass(nzRenderPassType relativeTo, int position, NzDeferredRenderPass* pass);
|
||||
|
||||
static bool IsSupported();
|
||||
|
||||
private:
|
||||
void GeomPass(const NzScene* scene);
|
||||
void DirectionalLightPass(const NzScene* scene);
|
||||
void PointLightPass(const NzScene* scene);
|
||||
void SpotLightPass(const NzScene* scene);
|
||||
bool UpdateTextures() const;
|
||||
bool Resize(const NzVector2ui& dimensions) const;
|
||||
|
||||
struct RenderPassComparator
|
||||
{
|
||||
bool operator()(nzRenderPassType pass1, nzRenderPassType pass2);
|
||||
};
|
||||
|
||||
std::map<nzRenderPassType, std::map<int, std::unique_ptr<NzDeferredRenderPass>>, RenderPassComparator> m_passes;
|
||||
NzForwardRenderTechnique m_forwardTechnique; // Doit être initialisé avant la RenderQueue
|
||||
NzDeferredRenderQueue m_renderQueue;
|
||||
NzMeshRef m_sphere;
|
||||
NzStaticMesh* m_sphereMesh;
|
||||
mutable NzRenderTexture m_bloomRTT;
|
||||
mutable NzRenderTexture m_dofRTT;
|
||||
mutable NzRenderTexture m_geometryRTT;
|
||||
mutable NzRenderTexture m_ssaoRTT;
|
||||
NzRenderStates m_clearStates;
|
||||
NzShaderProgramRef m_aaProgram;
|
||||
NzShaderProgramRef m_blitProgram;
|
||||
NzShaderProgramRef m_bloomBrightProgram;
|
||||
NzShaderProgramRef m_bloomFinalProgram;
|
||||
NzShaderProgramRef m_clearProgram;
|
||||
NzShaderProgramRef m_directionalLightProgram;
|
||||
NzShaderProgramRef m_depthOfFieldProgram;
|
||||
NzShaderProgramRef m_gaussianBlurProgram;
|
||||
NzShaderProgramRef m_pointLightProgram;
|
||||
NzShaderProgramRef m_ssaoProgram;
|
||||
NzShaderProgramRef m_ssaoFinalProgram;
|
||||
NzShaderProgramRef m_spotLightProgram;
|
||||
mutable NzTextureRef m_bloomTextureA;
|
||||
mutable NzTextureRef m_bloomTextureB;
|
||||
mutable NzTextureRef m_dofTextureA;
|
||||
mutable NzTextureRef m_dofTextureB;
|
||||
mutable NzRenderBufferRef m_depthStencilBuffer;
|
||||
mutable NzRenderTexture m_GBufferRTT;
|
||||
mutable NzRenderTexture m_workRTT;
|
||||
mutable NzTextureRef m_GBuffer[4];
|
||||
mutable NzTextureRef m_ssaoTextureA;
|
||||
mutable NzTextureRef m_ssaoTextureB;
|
||||
mutable NzTextureRef m_ssaoNoiseTexture;
|
||||
mutable NzTextureRef m_workTextureA;
|
||||
mutable NzTextureRef m_workTextureB;
|
||||
NzTextureSampler m_bilinearSampler;
|
||||
NzTextureSampler m_pointSampler;
|
||||
NzTextureSampler m_ssaoSampler;
|
||||
NzVector2ui m_GBufferSize;
|
||||
mutable NzTextureRef m_workTextures[2];
|
||||
mutable NzVector2ui m_GBufferSize;
|
||||
const NzRenderTarget* m_viewerTarget;
|
||||
mutable bool m_texturesUpdated;
|
||||
int m_gaussianBlurProgramFilterLocation;
|
||||
};
|
||||
|
||||
#endif // NAZARA_FORWARDRENDERTECHNIQUE_HPP
|
||||
|
||||
Reference in New Issue
Block a user