Graphics: Add a way to set which passes are enabled in a frame pipeline
This will be replaced soon with a better system
This commit is contained in:
@@ -30,6 +30,8 @@ namespace Nz
|
||||
inline float GetAspectRatio() const;
|
||||
const Color& GetClearColor() const override;
|
||||
inline DegreeAnglef GetFOV() const;
|
||||
inline FramePipelineExtraPassFlags GetFramePipelineExtraPassFlags() const;
|
||||
inline ProjectionType GetProjectionType() const;
|
||||
UInt32 GetRenderMask() const override;
|
||||
inline Int32 GetRenderOrder() const;
|
||||
const RenderTarget& GetRenderTarget() const override;
|
||||
@@ -43,6 +45,7 @@ namespace Nz
|
||||
|
||||
inline void UpdateClearColor(Color color);
|
||||
inline void UpdateFOV(DegreeAnglef fov);
|
||||
inline void UpdateFramePipelineExtraPassFlags(FramePipelineExtraPassFlags framePipelineExtraFlags);
|
||||
inline void UpdateProjectionType(ProjectionType projectionType);
|
||||
inline void UpdateRenderMask(UInt32 renderMask);
|
||||
inline void UpdateRenderOrder(Int32 renderOrder);
|
||||
@@ -67,6 +70,7 @@ namespace Nz
|
||||
const RenderTarget* m_renderTarget;
|
||||
Color m_clearColor;
|
||||
DegreeAnglef m_fov;
|
||||
FramePipelineExtraPassFlags m_framePipelineExtraPassFlags;
|
||||
Int32 m_renderOrder;
|
||||
ProjectionType m_projectionType;
|
||||
Rectf m_targetRegion;
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace Nz
|
||||
m_renderTarget(nullptr),
|
||||
m_clearColor(Color::Black()),
|
||||
m_fov(90.f),
|
||||
m_framePipelineExtraPassFlags(FramePipelineExtraPass::DebugDraw),
|
||||
m_renderOrder(0),
|
||||
m_projectionType(projectionType),
|
||||
m_targetRegion(0.f, 0.f, 1.f, 1.f),
|
||||
@@ -20,6 +21,9 @@ namespace Nz
|
||||
m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f),
|
||||
m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f)
|
||||
{
|
||||
if (projectionType == ProjectionType::Perspective)
|
||||
m_framePipelineExtraPassFlags |= FramePipelineExtraPass::DepthPrepass;
|
||||
|
||||
UpdateTarget(renderTarget);
|
||||
}
|
||||
|
||||
@@ -27,6 +31,7 @@ namespace Nz
|
||||
m_renderTarget(nullptr),
|
||||
m_clearColor(camera.m_clearColor),
|
||||
m_fov(camera.m_fov),
|
||||
m_framePipelineExtraPassFlags(camera.m_framePipelineExtraPassFlags),
|
||||
m_renderOrder(camera.m_renderOrder),
|
||||
m_projectionType(camera.m_projectionType),
|
||||
m_targetRegion(camera.m_targetRegion),
|
||||
@@ -44,6 +49,7 @@ namespace Nz
|
||||
m_renderTarget(nullptr),
|
||||
m_clearColor(camera.m_clearColor),
|
||||
m_fov(camera.m_fov),
|
||||
m_framePipelineExtraPassFlags(camera.m_framePipelineExtraPassFlags),
|
||||
m_renderOrder(camera.m_renderOrder),
|
||||
m_projectionType(camera.m_projectionType),
|
||||
m_targetRegion(camera.m_targetRegion),
|
||||
@@ -67,6 +73,16 @@ namespace Nz
|
||||
return m_fov;
|
||||
}
|
||||
|
||||
inline FramePipelineExtraPassFlags Camera::GetFramePipelineExtraPassFlags() const
|
||||
{
|
||||
return m_framePipelineExtraPassFlags;
|
||||
}
|
||||
|
||||
inline ProjectionType Camera::GetProjectionType() const
|
||||
{
|
||||
return m_projectionType;
|
||||
}
|
||||
|
||||
inline Int32 Camera::GetRenderOrder() const
|
||||
{
|
||||
return m_renderOrder;
|
||||
@@ -103,6 +119,11 @@ namespace Nz
|
||||
UpdateProjectionMatrix();
|
||||
}
|
||||
|
||||
inline void Camera::UpdateFramePipelineExtraPassFlags(FramePipelineExtraPassFlags framePipelineExtraFlags)
|
||||
{
|
||||
m_framePipelineExtraPassFlags = framePipelineExtraFlags;
|
||||
}
|
||||
|
||||
inline void Camera::UpdateZFar(float zFar)
|
||||
{
|
||||
m_zFar = zFar;
|
||||
@@ -119,6 +140,7 @@ namespace Nz
|
||||
|
||||
inline Camera& Camera::operator=(const Camera& camera)
|
||||
{
|
||||
m_framePipelineExtraPassFlags = camera.m_framePipelineExtraPassFlags;
|
||||
m_fov = camera.m_fov;
|
||||
m_projectionType = camera.m_projectionType;
|
||||
m_targetRegion = camera.m_targetRegion;
|
||||
@@ -135,6 +157,7 @@ namespace Nz
|
||||
|
||||
inline Camera& Camera::operator=(Camera&& camera) noexcept
|
||||
{
|
||||
m_framePipelineExtraPassFlags = camera.m_framePipelineExtraPassFlags;
|
||||
m_fov = camera.m_fov;
|
||||
m_projectionType = camera.m_projectionType;
|
||||
m_targetRegion = camera.m_targetRegion;
|
||||
@@ -246,3 +269,4 @@ namespace Nz
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
#include "Camera.hpp"
|
||||
|
||||
@@ -41,6 +41,24 @@ namespace Nz
|
||||
Volume
|
||||
};
|
||||
|
||||
enum class FramePipelineExtraPass
|
||||
{
|
||||
DebugDraw,
|
||||
DepthPrepass,
|
||||
|
||||
Max = DepthPrepass
|
||||
};
|
||||
|
||||
template<>
|
||||
struct EnumAsFlags<FramePipelineExtraPass>
|
||||
{
|
||||
static constexpr FramePipelineExtraPass max = FramePipelineExtraPass::Max;
|
||||
};
|
||||
|
||||
using FramePipelineExtraPassFlags = Flags<FramePipelineExtraPass>;
|
||||
|
||||
constexpr FramePipelineExtraPassFlags FramePipelineAllExtraPasses = FramePipelineExtraPass::DebugDraw | FramePipelineExtraPass::DepthPrepass;
|
||||
|
||||
enum class MaterialPropertyType
|
||||
{
|
||||
Bool,
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace Nz
|
||||
std::size_t RegisterLight(const Light* light, UInt32 renderMask) override;
|
||||
std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) override;
|
||||
std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) override;
|
||||
std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) override;
|
||||
std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder, FramePipelineExtraPassFlags passFlags) override;
|
||||
std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) override;
|
||||
|
||||
const Light* RetrieveLight(std::size_t lightIndex) const override;
|
||||
@@ -131,6 +131,7 @@ namespace Nz
|
||||
|
||||
struct ViewerData
|
||||
{
|
||||
std::size_t finalColorAttachment;
|
||||
std::size_t forwardColorAttachment;
|
||||
std::size_t debugColorAttachment;
|
||||
std::size_t depthStencilAttachment;
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Nz
|
||||
virtual std::size_t RegisterLight(const Light* light, UInt32 renderMask) = 0;
|
||||
virtual std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) = 0;
|
||||
virtual std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) = 0;
|
||||
virtual std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) = 0;
|
||||
virtual std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder, FramePipelineExtraPassFlags passFlags) = 0;
|
||||
virtual std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) = 0;
|
||||
|
||||
virtual const Light* RetrieveLight(std::size_t lightIndex) const = 0;
|
||||
|
||||
Reference in New Issue
Block a user