Renderer/RenderStates: Update RenderStates structure (preparing for renderer update)

Former-commit-id: 392c7c33ff64d19e0fe3c7bdc8b22fe17c150887 [formerly d12a3c5f664fccebe0ee40a73bb0310e2d02287e]
Former-commit-id: 22743f015567a8471f97cb90a06175f600ef0f8f
This commit is contained in:
Lynix
2016-07-21 23:00:09 +02:00
parent 31bc8604a4
commit 56443c91e4
17 changed files with 339 additions and 218 deletions

View File

@@ -19,11 +19,11 @@ namespace Nz
RenderStates BuildRenderStates()
{
RenderStates states;
states.cullingSide = FaceSide_Back;
states.depthFunc = RendererComparison_Equal;
states.faceCulling = FaceSide_Back;
states.parameters[RendererParameter_DepthBuffer] = true;
states.parameters[RendererParameter_DepthWrite] = false;
states.parameters[RendererParameter_FaceCulling] = true;
states.depthBuffer = true;
states.depthWrite = false;
states.faceCulling = true;
return states;
}

View File

@@ -32,7 +32,7 @@ namespace Nz
m_bloomBrightShader = ShaderLibrary::Get("DeferredBloomBright");
m_bloomFinalShader = ShaderLibrary::Get("DeferredBloomFinal");
m_bloomStates.parameters[RendererParameter_DepthBuffer] = false;
m_bloomStates.depthBuffer = false;
m_gaussianBlurShader = ShaderLibrary::Get("DeferredGaussianBlur");
m_gaussianBlurShaderFilterLocation = m_gaussianBlurShader->GetUniformLocation("Filter");

View File

@@ -127,7 +127,7 @@ namespace Nz
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
m_states.parameters[RendererParameter_DepthBuffer] = false;
m_states.depthBuffer = false;
}
DeferredDOFPass::~DeferredDOFPass() = default;

View File

@@ -28,7 +28,7 @@ namespace Nz
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
m_states.parameters[RendererParameter_DepthBuffer] = false;
m_states.depthBuffer = false;
}
DeferredFXAAPass::~DeferredFXAAPass() = default;

View File

@@ -26,7 +26,7 @@ namespace Nz
m_pointSampler.SetFilterMode(SamplerFilter_Nearest);
m_pointSampler.SetWrapMode(SamplerWrap_Clamp);
m_states.parameters[RendererParameter_DepthBuffer] = false;
m_states.depthBuffer = false;
m_uberShader = UberShaderLibrary::Get("Basic");

View File

@@ -141,7 +141,7 @@ namespace Nz
m_shader = BuildFogShader();
m_shaderEyePositionLocation = m_shader->GetUniformLocation("EyePosition");
m_states.parameters[RendererParameter_DepthBuffer] = false;
m_states.depthBuffer = false;
}
DeferredFogPass::~DeferredFogPass() = default;

View File

@@ -31,12 +31,12 @@ namespace Nz
DeferredGeometryPass::DeferredGeometryPass()
{
m_clearShader = ShaderLibrary::Get("DeferredGBufferClear");
m_clearStates.parameters[RendererParameter_DepthBuffer] = true;
m_clearStates.parameters[RendererParameter_FaceCulling] = true;
m_clearStates.parameters[RendererParameter_StencilTest] = true;
m_clearStates.depthBuffer = true;
m_clearStates.faceCulling = true;
m_clearStates.stencilTest = true;
m_clearStates.depthFunc = RendererComparison_Always;
m_clearStates.frontFace.stencilCompare = RendererComparison_Always;
m_clearStates.frontFace.stencilPass = StencilOperation_Zero;
m_clearStates.stencilCompare.front = RendererComparison_Always;
m_clearStates.stencilPass.front = StencilOperation_Zero;
}
DeferredGeometryPass::~DeferredGeometryPass() = default;

View File

@@ -120,9 +120,9 @@ namespace Nz
RenderStates lightStates;
lightStates.dstBlend = BlendFunc_One;
lightStates.srcBlend = BlendFunc_One;
lightStates.parameters[RendererParameter_Blend] = true;
lightStates.parameters[RendererParameter_DepthBuffer] = false;
lightStates.parameters[RendererParameter_DepthWrite] = false;
lightStates.blending = true;
lightStates.depthBuffer = false;
lightStates.depthWrite = false;
// Directional lights
if (!m_renderQueue->directionalLights.empty())
@@ -146,18 +146,18 @@ namespace Nz
if (!m_renderQueue->pointLights.empty() || !m_renderQueue->spotLights.empty())
{
// http://www.altdevblogaday.com/2011/08/08/stencil-buffer-optimisation-for-deferred-lights/
lightStates.parameters[RendererParameter_StencilTest] = true;
lightStates.faceCulling = FaceSide_Front;
lightStates.backFace.stencilMask = 0xFF;
lightStates.backFace.stencilReference = 0;
lightStates.backFace.stencilFail = StencilOperation_Keep;
lightStates.backFace.stencilPass = StencilOperation_Keep;
lightStates.backFace.stencilZFail = StencilOperation_Invert;
lightStates.frontFace.stencilMask = 0xFF;
lightStates.frontFace.stencilReference = 0;
lightStates.frontFace.stencilFail = StencilOperation_Keep;
lightStates.frontFace.stencilPass = StencilOperation_Keep;
lightStates.frontFace.stencilZFail = StencilOperation_Invert;
lightStates.cullingSide = FaceSide_Front;
lightStates.stencilTest = true;
lightStates.stencilDepthFail.back = StencilOperation_Invert;
lightStates.stencilDepthFail.front = StencilOperation_Invert;
lightStates.stencilFail.back = StencilOperation_Keep;
lightStates.stencilFail.front = StencilOperation_Keep;
lightStates.stencilPass.back = StencilOperation_Keep;
lightStates.stencilPass.front = StencilOperation_Keep;
lightStates.stencilReference.back = 0;
lightStates.stencilReference.front = 0;
lightStates.stencilWriteMask.back = 0xFF;
lightStates.stencilWriteMask.front = 0xFF;
Renderer::SetRenderStates(lightStates);

View File

@@ -252,41 +252,41 @@ namespace Nz
// Stencil
if (matData.GetIntegerParameter(MaterialData::StencilCompare, &iValue))
m_states.frontFace.stencilCompare = static_cast<RendererComparison>(iValue);
m_states.stencilCompare.front = static_cast<RendererComparison>(iValue);
if (matData.GetIntegerParameter(MaterialData::StencilFail, &iValue))
m_states.frontFace.stencilFail = static_cast<StencilOperation>(iValue);
m_states.stencilFail.front = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::StencilPass, &iValue))
m_states.frontFace.stencilPass = static_cast<StencilOperation>(iValue);
m_states.stencilPass.front = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::StencilZFail, &iValue))
m_states.frontFace.stencilZFail = static_cast<StencilOperation>(iValue);
m_states.stencilDepthFail.front = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::StencilMask, &iValue))
m_states.frontFace.stencilMask = static_cast<UInt32>(iValue);
m_states.stencilWriteMask.front = static_cast<UInt32>(iValue);
if (matData.GetIntegerParameter(MaterialData::StencilReference, &iValue))
m_states.frontFace.stencilReference = static_cast<unsigned int>(iValue);
m_states.stencilReference.front = static_cast<unsigned int>(iValue);
// Stencil (back)
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilCompare, &iValue))
m_states.backFace.stencilCompare = static_cast<RendererComparison>(iValue);
m_states.stencilCompare.back = static_cast<RendererComparison>(iValue);
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilFail, &iValue))
m_states.backFace.stencilFail = static_cast<StencilOperation>(iValue);
m_states.stencilFail.back = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilPass, &iValue))
m_states.backFace.stencilPass = static_cast<StencilOperation>(iValue);
m_states.stencilPass.back = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilZFail, &iValue))
m_states.backFace.stencilZFail = static_cast<StencilOperation>(iValue);
m_states.stencilDepthFail.back = static_cast<StencilOperation>(iValue);
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilMask, &iValue))
m_states.backFace.stencilMask = static_cast<UInt32>(iValue);
m_states.stencilWriteMask.back = static_cast<UInt32>(iValue);
if (matData.GetIntegerParameter(MaterialData::BackFaceStencilReference, &iValue))
m_states.backFace.stencilReference = static_cast<unsigned int>(iValue);
m_states.stencilReference.back = static_cast<unsigned int>(iValue);
// Textures
if (matParams.loadAlphaMap && matData.GetStringParameter(MaterialData::AlphaTexturePath, &path))
@@ -332,13 +332,13 @@ namespace Nz
matData->SetParameter(MaterialData::Transform, IsTransformEnabled());
// RendererParameter
matData->SetParameter(MaterialData::Blending, GetRenderStates().parameters[RendererParameter_Blend]);
matData->SetParameter(MaterialData::ColorWrite, GetRenderStates().parameters[RendererParameter_ColorWrite]);
matData->SetParameter(MaterialData::DepthBuffer, GetRenderStates().parameters[RendererParameter_DepthBuffer]);
matData->SetParameter(MaterialData::DepthWrite, GetRenderStates().parameters[RendererParameter_DepthWrite]);
matData->SetParameter(MaterialData::FaceCulling, GetRenderStates().parameters[RendererParameter_FaceCulling]);
matData->SetParameter(MaterialData::ScissorTest, GetRenderStates().parameters[RendererParameter_ScissorTest]);
matData->SetParameter(MaterialData::StencilTest, GetRenderStates().parameters[RendererParameter_StencilTest]);
matData->SetParameter(MaterialData::Blending, GetRenderStates().blending);
matData->SetParameter(MaterialData::ColorWrite, GetRenderStates().colorWrite);
matData->SetParameter(MaterialData::DepthBuffer, GetRenderStates().depthBuffer);
matData->SetParameter(MaterialData::DepthWrite, GetRenderStates().depthWrite);
matData->SetParameter(MaterialData::FaceCulling, GetRenderStates().faceCulling);
matData->SetParameter(MaterialData::ScissorTest, GetRenderStates().scissorTest);
matData->SetParameter(MaterialData::StencilTest, GetRenderStates().stencilTest);
// Samplers
matData->SetParameter(MaterialData::DiffuseAnisotropyLevel, int(GetDiffuseSampler().GetAnisotropicLevel()));
@@ -350,20 +350,20 @@ namespace Nz
matData->SetParameter(MaterialData::SpecularWrap, int(GetSpecularSampler().GetWrapMode()));
// Stencil
matData->SetParameter(MaterialData::StencilCompare, int(GetRenderStates().frontFace.stencilCompare));
matData->SetParameter(MaterialData::StencilFail, int(GetRenderStates().frontFace.stencilFail));
matData->SetParameter(MaterialData::StencilPass, int(GetRenderStates().frontFace.stencilPass));
matData->SetParameter(MaterialData::StencilZFail, int(GetRenderStates().frontFace.stencilZFail));
matData->SetParameter(MaterialData::StencilMask, int(GetRenderStates().frontFace.stencilMask));
matData->SetParameter(MaterialData::StencilReference, int(GetRenderStates().frontFace.stencilReference));
matData->SetParameter(MaterialData::StencilCompare, int(GetRenderStates().stencilCompare.front));
matData->SetParameter(MaterialData::StencilFail, int(GetRenderStates().stencilFail.front));
matData->SetParameter(MaterialData::StencilPass, int(GetRenderStates().stencilPass.front));
matData->SetParameter(MaterialData::StencilZFail, int(GetRenderStates().stencilDepthFail.front));
matData->SetParameter(MaterialData::StencilMask, int(GetRenderStates().stencilWriteMask.front));
matData->SetParameter(MaterialData::StencilReference, int(GetRenderStates().stencilReference.front));
// Stencil (back)
matData->SetParameter(MaterialData::BackFaceStencilCompare, int(GetRenderStates().backFace.stencilCompare));
matData->SetParameter(MaterialData::BackFaceStencilFail, int(GetRenderStates().backFace.stencilFail));
matData->SetParameter(MaterialData::BackFaceStencilPass, int(GetRenderStates().backFace.stencilPass));
matData->SetParameter(MaterialData::BackFaceStencilZFail, int(GetRenderStates().backFace.stencilZFail));
matData->SetParameter(MaterialData::BackFaceStencilMask, int(GetRenderStates().backFace.stencilMask));
matData->SetParameter(MaterialData::BackFaceStencilReference, int(GetRenderStates().backFace.stencilReference));
matData->SetParameter(MaterialData::BackFaceStencilCompare, int(GetRenderStates().stencilCompare.back));
matData->SetParameter(MaterialData::BackFaceStencilFail, int(GetRenderStates().stencilFail.back));
matData->SetParameter(MaterialData::BackFaceStencilPass, int(GetRenderStates().stencilPass.back));
matData->SetParameter(MaterialData::BackFaceStencilZFail, int(GetRenderStates().stencilDepthFail.back));
matData->SetParameter(MaterialData::BackFaceStencilMask, int(GetRenderStates().stencilWriteMask.back));
matData->SetParameter(MaterialData::BackFaceStencilReference, int(GetRenderStates().stencilReference.back));
// Textures
if (HasAlphaMap())
@@ -441,8 +441,8 @@ namespace Nz
m_specularColor = Color::White;
m_specularSampler = TextureSampler();
m_states = RenderStates();
m_states.parameters[RendererParameter_DepthBuffer] = true;
m_states.parameters[RendererParameter_FaceCulling] = true;
m_states.depthBuffer = true;
m_states.faceCulling = true;
m_transformEnabled = true;
SetShader("Basic");

View File

@@ -181,10 +181,10 @@ namespace Nz
// Renderstates
s_renderStates.depthFunc = RendererComparison_Equal;
s_renderStates.faceCulling = FaceSide_Front;
s_renderStates.parameters[RendererParameter_DepthBuffer] = true;
s_renderStates.parameters[RendererParameter_DepthWrite] = false;
s_renderStates.parameters[RendererParameter_FaceCulling] = true;
s_renderStates.cullingSide = FaceSide_Front;
s_renderStates.depthBuffer = true;
s_renderStates.depthWrite = false;
s_renderStates.faceCulling = true;
// Exception-free zone
s_indexBuffer = std::move(indexBuffer);

View File

@@ -20,10 +20,10 @@ namespace Nz
{
RenderStates states;
states.depthFunc = RendererComparison_Equal;
states.faceCulling = FaceSide_Back;
states.parameters[RendererParameter_DepthBuffer] = true;
states.parameters[RendererParameter_DepthWrite] = false;
states.parameters[RendererParameter_FaceCulling] = true;
states.cullingSide = FaceSide_Back;
states.depthBuffer = true;
states.depthWrite = false;
states.faceCulling = true;
return states;
}