Begin work on RenderPipeline
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Renderer/Config.hpp>
|
||||
#include <Nazara/Renderer/RenderPipeline.hpp>
|
||||
#include <Nazara/Utility/AbstractBuffer.hpp>
|
||||
#include <memory>
|
||||
|
||||
@@ -23,6 +24,7 @@ namespace Nz
|
||||
virtual ~RenderDevice();
|
||||
|
||||
virtual std::unique_ptr<AbstractBuffer> InstantiateBuffer(Buffer* parent, BufferType type) = 0;
|
||||
virtual std::unique_ptr<RenderPipeline> InstantiateRenderPipeline(RenderPipelineInfo pipelineInfo) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -9,31 +9,20 @@
|
||||
|
||||
#include <Nazara/Utility/Enums.hpp>
|
||||
#include <Nazara/Renderer/RenderStates.hpp>
|
||||
#include <Nazara/Renderer/Shader.hpp>
|
||||
//#include <Nazara/Renderer/Shader.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct RenderPipelineInfo : RenderStates
|
||||
{
|
||||
ShaderConstRef shader;
|
||||
/*ShaderConstRef shader;*/
|
||||
};
|
||||
|
||||
class RenderPipeline
|
||||
class NAZARA_RENDERER_API RenderPipeline
|
||||
{
|
||||
public:
|
||||
inline RenderPipeline();
|
||||
inline ~RenderPipeline();
|
||||
|
||||
inline bool Create(const RenderPipelineInfo& pipelineInfo);
|
||||
inline void Destroy();
|
||||
|
||||
inline const RenderPipelineInfo& GetInfo() const;
|
||||
|
||||
inline bool IsValid() const;
|
||||
|
||||
private:
|
||||
RenderPipelineInfo m_pipelineInfo;
|
||||
bool m_valid;
|
||||
RenderPipeline() = default;
|
||||
virtual ~RenderPipeline();
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -8,41 +8,6 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline RenderPipeline::RenderPipeline() :
|
||||
m_valid(false)
|
||||
{
|
||||
}
|
||||
|
||||
inline RenderPipeline::~RenderPipeline()
|
||||
{
|
||||
}
|
||||
|
||||
inline bool RenderPipeline::Create(const RenderPipelineInfo& pipelineInfo)
|
||||
{
|
||||
NazaraAssert(pipelineInfo.shader, "Invalid shader");
|
||||
|
||||
m_pipelineInfo = pipelineInfo;
|
||||
m_valid = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
inline void RenderPipeline::Destroy()
|
||||
{
|
||||
m_valid = false;
|
||||
}
|
||||
|
||||
inline const RenderPipelineInfo& RenderPipeline::GetInfo() const
|
||||
{
|
||||
NazaraAssert(m_valid, "Invalid pipeline info");
|
||||
|
||||
return m_pipelineInfo;
|
||||
}
|
||||
|
||||
inline bool RenderPipeline::IsValid() const
|
||||
{
|
||||
return m_valid;
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Renderer/DebugOff.hpp>
|
||||
|
||||
@@ -18,49 +18,18 @@ namespace Nz
|
||||
BlendFunc srcBlend = BlendFunc_One;
|
||||
FaceFilling faceFilling = FaceFilling_Fill;
|
||||
FaceSide cullingSide = FaceSide_Back;
|
||||
RendererComparison depthFunc = RendererComparison_Less;
|
||||
RendererComparison depthCompare = RendererComparison_Less;
|
||||
|
||||
struct
|
||||
{
|
||||
RendererComparison back = RendererComparison_Always;
|
||||
RendererComparison front = RendererComparison_Always;
|
||||
} stencilCompare;
|
||||
|
||||
struct
|
||||
{
|
||||
UInt32 back = 0xFFFFFFFF;
|
||||
UInt32 front = 0xFFFFFFFF;
|
||||
} stencilCompareMask;
|
||||
|
||||
struct
|
||||
{
|
||||
StencilOperation back = StencilOperation_Keep;
|
||||
StencilOperation front = StencilOperation_Keep;
|
||||
} stencilDepthFail;
|
||||
|
||||
struct
|
||||
{
|
||||
StencilOperation back = StencilOperation_Keep;
|
||||
StencilOperation front = StencilOperation_Keep;
|
||||
} stencilFail;
|
||||
|
||||
struct
|
||||
{
|
||||
StencilOperation back = StencilOperation_Keep;
|
||||
StencilOperation front = StencilOperation_Keep;
|
||||
} stencilPass;
|
||||
|
||||
struct
|
||||
{
|
||||
UInt32 back = 0U;
|
||||
UInt32 front = 0U;
|
||||
} stencilReference;
|
||||
|
||||
struct
|
||||
{
|
||||
UInt32 back = 0xFFFFFFFF;
|
||||
UInt32 front = 0xFFFFFFFF;
|
||||
} stencilWriteMask;
|
||||
RendererComparison compare = RendererComparison_Always;
|
||||
StencilOperation depthFail = StencilOperation_Keep;
|
||||
StencilOperation fail = StencilOperation_Keep;
|
||||
StencilOperation pass = StencilOperation_Keep;
|
||||
UInt32 compareMask = 0xFFFFFFFF;
|
||||
UInt32 reference = 0;
|
||||
UInt32 writeMask = 0xFFFFFFFF;
|
||||
} stencilBack, stencilFront;
|
||||
|
||||
bool blending = false;
|
||||
bool colorWrite = true;
|
||||
|
||||
@@ -35,27 +35,28 @@ namespace Nz
|
||||
}
|
||||
|
||||
if (lhs.depthBuffer)
|
||||
NazaraRenderStateMember(depthFunc);
|
||||
NazaraRenderStateMember(depthCompare);
|
||||
|
||||
if (lhs.faceCulling)
|
||||
NazaraRenderStateMember(cullingSide);
|
||||
|
||||
if (lhs.stencilTest)
|
||||
{
|
||||
NazaraRenderStateMember(stencilCompare.back);
|
||||
NazaraRenderStateMember(stencilCompare.front);
|
||||
NazaraRenderStateMember(stencilCompareMask.back);
|
||||
NazaraRenderStateMember(stencilCompareMask.front);
|
||||
NazaraRenderStateMember(stencilDepthFail.back);
|
||||
NazaraRenderStateMember(stencilDepthFail.front);
|
||||
NazaraRenderStateMember(stencilFail.back);
|
||||
NazaraRenderStateMember(stencilFail.front);
|
||||
NazaraRenderStateMember(stencilPass.back);
|
||||
NazaraRenderStateMember(stencilPass.front);
|
||||
NazaraRenderStateMember(stencilReference.back);
|
||||
NazaraRenderStateMember(stencilReference.front);
|
||||
NazaraRenderStateMember(stencilWriteMask.back);
|
||||
NazaraRenderStateMember(stencilWriteMask.front);
|
||||
NazaraRenderStateMember(stencilBack.compare);
|
||||
NazaraRenderStateMember(stencilBack.compareMask);
|
||||
NazaraRenderStateMember(stencilBack.depthFail);
|
||||
NazaraRenderStateMember(stencilBack.fail);
|
||||
NazaraRenderStateMember(stencilBack.pass);
|
||||
NazaraRenderStateMember(stencilBack.reference);
|
||||
NazaraRenderStateMember(stencilBack.writeMask);
|
||||
|
||||
NazaraRenderStateMember(stencilFront.compare);
|
||||
NazaraRenderStateMember(stencilFront.compareMask);
|
||||
NazaraRenderStateMember(stencilFront.depthFail);
|
||||
NazaraRenderStateMember(stencilFront.fail);
|
||||
NazaraRenderStateMember(stencilFront.pass);
|
||||
NazaraRenderStateMember(stencilFront.reference);
|
||||
NazaraRenderStateMember(stencilFront.writeMask);
|
||||
}
|
||||
|
||||
NazaraRenderStateFloatMember(lineWidth, 0.001f);
|
||||
@@ -85,6 +86,7 @@ namespace std
|
||||
#define NazaraRenderStateBoolDep(dependency, member) parameterHash |= ((pipelineInfo.dependency && pipelineInfo.member) ? 1U : 0U) << (parameterIndex++)
|
||||
#define NazaraRenderStateEnum(member) Nz::HashCombine(seed, static_cast<Nz::UInt8>(pipelineInfo.member))
|
||||
#define NazaraRenderStateFloat(member, maxDiff) Nz::HashCombine(seed, std::floor(pipelineInfo.member / maxDiff) * maxDiff)
|
||||
#define NazaraRenderStateUInt32(member) Nz::HashCombine(seed, pipelineInfo.member)
|
||||
|
||||
NazaraRenderStateBool(blending);
|
||||
NazaraRenderStateBool(colorWrite);
|
||||
@@ -104,27 +106,28 @@ namespace std
|
||||
}
|
||||
|
||||
if (pipelineInfo.depthBuffer)
|
||||
NazaraRenderStateEnum(depthFunc);
|
||||
NazaraRenderStateEnum(depthCompare);
|
||||
|
||||
if (pipelineInfo.faceCulling)
|
||||
NazaraRenderStateEnum(cullingSide);
|
||||
|
||||
if (pipelineInfo.stencilTest)
|
||||
{
|
||||
NazaraRenderStateEnum(stencilCompare.back);
|
||||
NazaraRenderStateEnum(stencilCompare.front);
|
||||
NazaraRenderStateEnum(stencilCompareMask.back);
|
||||
NazaraRenderStateEnum(stencilCompareMask.front);
|
||||
NazaraRenderStateEnum(stencilDepthFail.back);
|
||||
NazaraRenderStateEnum(stencilDepthFail.front);
|
||||
NazaraRenderStateEnum(stencilFail.back);
|
||||
NazaraRenderStateEnum(stencilFail.front);
|
||||
NazaraRenderStateEnum(stencilPass.back);
|
||||
NazaraRenderStateEnum(stencilPass.front);
|
||||
NazaraRenderStateEnum(stencilReference.back);
|
||||
NazaraRenderStateEnum(stencilReference.front);
|
||||
NazaraRenderStateEnum(stencilWriteMask.back);
|
||||
NazaraRenderStateEnum(stencilWriteMask.front);
|
||||
NazaraRenderStateEnum(stencilBack.compare);
|
||||
NazaraRenderStateUInt32(stencilBack.compareMask);
|
||||
NazaraRenderStateEnum(stencilBack.depthFail);
|
||||
NazaraRenderStateEnum(stencilBack.fail);
|
||||
NazaraRenderStateEnum(stencilBack.pass);
|
||||
NazaraRenderStateUInt32(stencilBack.reference);
|
||||
NazaraRenderStateUInt32(stencilBack.writeMask);
|
||||
|
||||
NazaraRenderStateEnum(stencilFront.compare);
|
||||
NazaraRenderStateUInt32(stencilFront.compareMask);
|
||||
NazaraRenderStateEnum(stencilFront.depthFail);
|
||||
NazaraRenderStateEnum(stencilFront.fail);
|
||||
NazaraRenderStateEnum(stencilFront.pass);
|
||||
NazaraRenderStateUInt32(stencilFront.reference);
|
||||
NazaraRenderStateUInt32(stencilFront.writeMask);
|
||||
}
|
||||
|
||||
NazaraRenderStateFloat(lineWidth, 0.001f);
|
||||
@@ -134,6 +137,7 @@ namespace std
|
||||
#undef NazaraRenderStateBoolDep
|
||||
#undef NazaraRenderStateEnum
|
||||
#undef NazaraRenderStateFloat
|
||||
#undef NazaraRenderStateUInt32
|
||||
|
||||
Nz::HashCombine(seed, parameterHash);
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class RenderDevice;
|
||||
|
||||
class NAZARA_RENDERER_API RenderWindow : public Window
|
||||
{
|
||||
public:
|
||||
@@ -34,6 +36,7 @@ namespace Nz
|
||||
void EnableVerticalSync(bool enabled);
|
||||
|
||||
inline RenderWindowImpl* GetImpl();
|
||||
std::shared_ptr<RenderDevice> GetRenderDevice();
|
||||
|
||||
inline bool IsValid() const;
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
#include <Nazara/Platform/WindowHandle.hpp>
|
||||
#include <Nazara/Renderer/Config.hpp>
|
||||
#include <Nazara/Renderer/RenderDevice.hpp>
|
||||
#include <Nazara/Renderer/RenderWindowParameters.hpp>
|
||||
#include <vector>
|
||||
|
||||
@@ -26,6 +27,8 @@ namespace Nz
|
||||
virtual ~RenderWindowImpl();
|
||||
|
||||
virtual bool Create(RendererImpl* renderer, RenderSurface* surface, const Vector2ui& size, const RenderWindowParameters& parameters) = 0;
|
||||
|
||||
virtual std::shared_ptr<RenderDevice> GetRenderDevice() = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user