Made stencil per face side

Former-commit-id: 093f2125886d47ebc79f97aaecfad3a5216f399a
This commit is contained in:
Lynix
2013-09-06 18:17:58 +02:00
parent 1ed8ea8ad5
commit d4abb8fc49
5 changed files with 214 additions and 71 deletions

View File

@@ -17,20 +17,26 @@ struct NzRenderStates
NzRenderStates& operator=(const NzRenderStates& states);
struct Face
{
nzRendererComparison stencilCompare;
nzStencilOperation stencilFail;
nzStencilOperation stencilPass;
nzStencilOperation stencilZFail;
nzUInt32 stencilMask;
unsigned int stencilReference;
};
Face backFace;
Face frontFace;
nzBlendFunc dstBlend;
nzBlendFunc srcBlend;
nzFaceFilling faceFilling;
nzFaceSide faceCulling;
nzRendererComparison depthFunc;
nzRendererComparison stencilCompare;
nzStencilOperation stencilFail;
nzStencilOperation stencilPass;
nzStencilOperation stencilZFail;
nzUInt32 stencilMask;
bool parameters[nzRendererParameter_Max+1];
float lineWidth;
float pointSize;
unsigned int stencilReference;
};
#include <Nazara/Renderer/RenderStates.inl>

View File

@@ -11,14 +11,8 @@ srcBlend(nzBlendFunc_One),
faceFilling(nzFaceFilling_Fill),
faceCulling(nzFaceSide_Back),
depthFunc(nzRendererComparison_Less),
stencilCompare(nzRendererComparison_Always),
stencilFail(nzStencilOperation_Keep),
stencilPass(nzStencilOperation_Keep),
stencilZFail(nzStencilOperation_Keep),
stencilMask(0xFFFFFFFF),
lineWidth(1.f),
pointSize(1.f),
stencilReference(0)
pointSize(1.f)
{
parameters[nzRendererParameter_Blend] = false;
parameters[nzRendererParameter_ColorWrite] = true;
@@ -27,6 +21,18 @@ stencilReference(0)
parameters[nzRendererParameter_FaceCulling] = false;
parameters[nzRendererParameter_ScissorTest] = false;
parameters[nzRendererParameter_StencilTest] = false;
for (unsigned int i = 0; i < 2; ++i)
{
Face& face = (i == 0) ? backFace : frontFace;
face.stencilCompare = nzRendererComparison_Always;
face.stencilFail = nzStencilOperation_Keep;
face.stencilMask = 0xFFFFFFFF;
face.stencilPass = nzStencilOperation_Keep;
face.stencilReference = 0;
face.stencilZFail = nzStencilOperation_Keep;
}
}
inline NzRenderStates::NzRenderStates(const NzRenderStates& states)

View File

@@ -88,12 +88,12 @@ class NAZARA_API NzRenderer
static void SetRenderStates(const NzRenderStates& states);
static void SetScissorRect(const NzRecti& rect);
static void SetShaderProgram(const NzShaderProgram* shader);
static void SetStencilCompareFunction(nzRendererComparison compareFunc);
static void SetStencilFailOperation(nzStencilOperation failOperation);
static void SetStencilMask(nzUInt32 mask);
static void SetStencilPassOperation(nzStencilOperation passOperation);
static void SetStencilReferenceValue(unsigned int refValue);
static void SetStencilZFailOperation(nzStencilOperation zfailOperation);
static void SetStencilCompareFunction(nzRendererComparison compareFunc, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static void SetStencilFailOperation(nzStencilOperation failOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static void SetStencilMask(nzUInt32 mask, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static void SetStencilPassOperation(nzStencilOperation passOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static void SetStencilReferenceValue(unsigned int refValue, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static void SetStencilZFailOperation(nzStencilOperation zfailOperation, nzFaceSide faceSide = nzFaceSide_FrontAndBack);
static bool SetTarget(const NzRenderTarget* target);
static void SetTexture(nzUInt8 unit, const NzTexture* texture);
static void SetTextureSampler(nzUInt8 textureUnit, const NzTextureSampler& sampler);