Renderer/RenderStates: Update RenderStates structure (preparing for renderer update)
Former-commit-id: 392c7c33ff64d19e0fe3c7bdc8b22fe17c150887 [formerly d12a3c5f664fccebe0ee40a73bb0310e2d02287e] Former-commit-id: 22743f015567a8471f97cb90a06175f600ef0f8f
This commit is contained in:
@@ -53,7 +53,36 @@ namespace Nz
|
||||
{
|
||||
NazaraAssert(renderParameter <= RendererParameter_Max, "Renderer parameter out of enum");
|
||||
|
||||
m_states.parameters[renderParameter] = enable;
|
||||
switch (renderParameter)
|
||||
{
|
||||
case RendererParameter_Blend:
|
||||
m_states.blending = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_ColorWrite:
|
||||
m_states.colorWrite = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_DepthBuffer:
|
||||
m_states.depthBuffer = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_DepthWrite:
|
||||
m_states.depthWrite = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_FaceCulling:
|
||||
m_states.faceCulling = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_ScissorTest:
|
||||
m_states.scissorTest = enable;
|
||||
return;
|
||||
|
||||
case RendererParameter_StencilTest:
|
||||
m_states.stencilTest = enable;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -257,7 +286,7 @@ namespace Nz
|
||||
|
||||
inline FaceSide Material::GetFaceCulling() const
|
||||
{
|
||||
return m_states.faceCulling;
|
||||
return m_states.cullingSide;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -489,7 +518,32 @@ namespace Nz
|
||||
{
|
||||
NazaraAssert(parameter <= RendererParameter_Max, "Renderer parameter out of enum");
|
||||
|
||||
return m_states.parameters[parameter];
|
||||
switch (parameter)
|
||||
{
|
||||
case RendererParameter_Blend:
|
||||
return m_states.blending;
|
||||
|
||||
case RendererParameter_ColorWrite:
|
||||
return m_states.colorWrite;
|
||||
|
||||
case RendererParameter_DepthBuffer:
|
||||
return m_states.depthBuffer;
|
||||
|
||||
case RendererParameter_DepthWrite:
|
||||
return m_states.depthWrite;
|
||||
|
||||
case RendererParameter_FaceCulling:
|
||||
return m_states.faceCulling;
|
||||
|
||||
case RendererParameter_ScissorTest:
|
||||
return m_states.scissorTest;
|
||||
|
||||
case RendererParameter_StencilTest:
|
||||
return m_states.stencilTest;
|
||||
}
|
||||
|
||||
NazaraInternalError("Unhandled renderer parameter: 0x" + String::Number(parameter, 16));
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -778,7 +832,7 @@ namespace Nz
|
||||
|
||||
inline void Material::SetFaceCulling(FaceSide faceSide)
|
||||
{
|
||||
m_states.faceCulling = faceSide;
|
||||
m_states.cullingSide = faceSide;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -8,37 +8,75 @@
|
||||
#define NAZARA_RENDERSTATES_HPP
|
||||
|
||||
#include <Nazara/Utility/Enums.hpp>
|
||||
#include <Nazara/Renderer/Shader.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
struct RenderStates
|
||||
{
|
||||
RenderStates();
|
||||
RenderStates(const RenderStates& states);
|
||||
~RenderStates() = default;
|
||||
BlendFunc dstBlend = BlendFunc_Zero;
|
||||
BlendFunc srcBlend = BlendFunc_One;
|
||||
FaceFilling faceFilling = FaceFilling_Fill;
|
||||
FaceSide cullingSide = FaceSide_Back;
|
||||
RendererComparison depthFunc = RendererComparison_Less;
|
||||
|
||||
RenderStates& operator=(const RenderStates& states);
|
||||
|
||||
struct Face
|
||||
struct
|
||||
{
|
||||
RendererComparison stencilCompare;
|
||||
StencilOperation stencilFail;
|
||||
StencilOperation stencilPass;
|
||||
StencilOperation stencilZFail;
|
||||
UInt32 stencilMask;
|
||||
unsigned int stencilReference;
|
||||
};
|
||||
RendererComparison back = RendererComparison_Always;
|
||||
RendererComparison front = RendererComparison_Always;
|
||||
} stencilCompare;
|
||||
|
||||
Face backFace;
|
||||
Face frontFace;
|
||||
BlendFunc dstBlend;
|
||||
BlendFunc srcBlend;
|
||||
FaceFilling faceFilling;
|
||||
FaceSide faceCulling;
|
||||
RendererComparison depthFunc;
|
||||
bool parameters[RendererParameter_Max+1];
|
||||
float lineWidth;
|
||||
float pointSize;
|
||||
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;
|
||||
|
||||
bool blending = false;
|
||||
bool colorWrite = true;
|
||||
bool depthBuffer = false;
|
||||
bool depthWrite = true;
|
||||
bool faceCulling = false;
|
||||
bool scissorTest = false;
|
||||
bool stencilTest = false;
|
||||
|
||||
float lineWidth = 1.f;
|
||||
float pointSize = 1.f;
|
||||
};
|
||||
|
||||
struct RenderPipeline : RenderStates
|
||||
{
|
||||
ShaderConstRef shader;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -2,52 +2,12 @@
|
||||
// This file is part of the "Nazara Engine - Renderer module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Renderer/RenderStates.hpp>
|
||||
#include <cstring>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline RenderStates::RenderStates() :
|
||||
dstBlend(BlendFunc_Zero),
|
||||
srcBlend(BlendFunc_One),
|
||||
faceFilling(FaceFilling_Fill),
|
||||
faceCulling(FaceSide_Back),
|
||||
depthFunc(RendererComparison_Less),
|
||||
lineWidth(1.f),
|
||||
pointSize(1.f)
|
||||
{
|
||||
parameters[RendererParameter_Blend] = false;
|
||||
parameters[RendererParameter_ColorWrite] = true;
|
||||
parameters[RendererParameter_DepthBuffer] = false;
|
||||
parameters[RendererParameter_DepthWrite] = true;
|
||||
parameters[RendererParameter_FaceCulling] = false;
|
||||
parameters[RendererParameter_ScissorTest] = false;
|
||||
parameters[RendererParameter_StencilTest] = false;
|
||||
|
||||
for (unsigned int i = 0; i < 2; ++i)
|
||||
{
|
||||
Face& face = (i == 0) ? backFace : frontFace;
|
||||
|
||||
face.stencilCompare = RendererComparison_Always;
|
||||
face.stencilFail = StencilOperation_Keep;
|
||||
face.stencilMask = 0xFFFFFFFF;
|
||||
face.stencilPass = StencilOperation_Keep;
|
||||
face.stencilReference = 0;
|
||||
face.stencilZFail = StencilOperation_Keep;
|
||||
}
|
||||
}
|
||||
|
||||
inline RenderStates::RenderStates(const RenderStates& states)
|
||||
{
|
||||
std::memcpy(this, &states, sizeof(RenderStates));
|
||||
}
|
||||
|
||||
inline RenderStates& RenderStates::operator=(const RenderStates& states)
|
||||
{
|
||||
std::memcpy(this, &states, sizeof(RenderStates));
|
||||
|
||||
return *this;
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Renderer/DebugOff.hpp>
|
||||
|
||||
Reference in New Issue
Block a user