Decreased useless OpenGL calls (Optimization)
Former-commit-id: b07c32afa9aa98b91eb8bd146a175f693af539ed
This commit is contained in:
parent
5b33a992ad
commit
308c2cfd78
|
|
@ -135,24 +135,43 @@ void NzOpenGL::ApplyStates(const NzRenderStates& states)
|
|||
|
||||
NzRenderStates& currentRenderStates = s_contextStates->renderStates;
|
||||
|
||||
if (currentRenderStates.dstBlend != states.dstBlend ||
|
||||
currentRenderStates.srcBlend != states.srcBlend)
|
||||
// Les fonctions de blend n'a aucun intérêt sans blending
|
||||
if (states.parameters[nzRendererParameter_Blend])
|
||||
{
|
||||
glBlendFunc(BlendFunc[states.srcBlend], BlendFunc[states.dstBlend]);
|
||||
currentRenderStates.dstBlend = states.dstBlend;
|
||||
currentRenderStates.srcBlend = states.srcBlend;
|
||||
if (currentRenderStates.dstBlend != states.dstBlend ||
|
||||
currentRenderStates.srcBlend != states.srcBlend)
|
||||
{
|
||||
glBlendFunc(BlendFunc[states.srcBlend], BlendFunc[states.dstBlend]);
|
||||
currentRenderStates.dstBlend = states.dstBlend;
|
||||
currentRenderStates.srcBlend = states.srcBlend;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentRenderStates.depthFunc != states.depthFunc)
|
||||
if (states.parameters[nzRendererParameter_DepthBuffer])
|
||||
{
|
||||
glDepthFunc(RendererComparison[states.depthFunc]);
|
||||
currentRenderStates.depthFunc = states.depthFunc;
|
||||
// La comparaison de profondeur n'a aucun intérêt sans depth buffer
|
||||
if (currentRenderStates.depthFunc != states.depthFunc)
|
||||
{
|
||||
glDepthFunc(RendererComparison[states.depthFunc]);
|
||||
currentRenderStates.depthFunc = states.depthFunc;
|
||||
}
|
||||
|
||||
// Le DepthWrite n'a aucune importance si le DepthBuffer est désactivé
|
||||
if (currentRenderStates.parameters[nzRendererParameter_DepthWrite] != states.parameters[nzRendererParameter_DepthWrite])
|
||||
{
|
||||
glDepthMask((states.parameters[nzRendererParameter_DepthWrite]) ? GL_TRUE : GL_FALSE);
|
||||
currentRenderStates.parameters[nzRendererParameter_DepthWrite] = states.parameters[nzRendererParameter_DepthWrite];
|
||||
}
|
||||
}
|
||||
|
||||
if (currentRenderStates.faceCulling != states.faceCulling)
|
||||
// Inutile de changer le mode de face culling s'il n'est pas actif
|
||||
if (states.parameters[nzRendererParameter_FaceCulling])
|
||||
{
|
||||
glCullFace(FaceCulling[states.faceCulling]);
|
||||
currentRenderStates.faceCulling = states.faceCulling;
|
||||
if (currentRenderStates.faceCulling != states.faceCulling)
|
||||
{
|
||||
glCullFace(FaceCulling[states.faceCulling]);
|
||||
currentRenderStates.faceCulling = states.faceCulling;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentRenderStates.faceFilling != states.faceFilling)
|
||||
|
|
@ -161,24 +180,29 @@ void NzOpenGL::ApplyStates(const NzRenderStates& states)
|
|||
currentRenderStates.faceFilling = states.faceFilling;
|
||||
}
|
||||
|
||||
if (currentRenderStates.stencilCompare != states.stencilCompare ||
|
||||
currentRenderStates.stencilMask != states.stencilMask ||
|
||||
currentRenderStates.stencilReference != states.stencilReference)
|
||||
// Ici encore, ça ne sert à rien de se soucier des fonctions de stencil sans qu'il soit activé
|
||||
if (states.parameters[nzRendererParameter_StencilTest])
|
||||
{
|
||||
glStencilFunc(RendererComparison[states.stencilCompare], states.stencilReference, states.stencilMask);
|
||||
currentRenderStates.stencilCompare = states.stencilCompare;
|
||||
currentRenderStates.stencilMask = states.stencilMask;
|
||||
currentRenderStates.stencilReference = states.stencilReference;
|
||||
}
|
||||
if (currentRenderStates.stencilCompare != states.stencilCompare ||
|
||||
currentRenderStates.stencilMask != states.stencilMask ||
|
||||
currentRenderStates.stencilReference != states.stencilReference)
|
||||
{
|
||||
glStencilFunc(RendererComparison[states.stencilCompare], states.stencilReference, states.stencilMask);
|
||||
currentRenderStates.stencilCompare = states.stencilCompare;
|
||||
currentRenderStates.stencilMask = states.stencilMask;
|
||||
currentRenderStates.stencilReference = states.stencilReference;
|
||||
}
|
||||
|
||||
if (currentRenderStates.stencilFail != states.stencilFail ||
|
||||
currentRenderStates.stencilPass != states.stencilPass ||
|
||||
currentRenderStates.stencilZFail != states.stencilZFail)
|
||||
{
|
||||
glStencilOp(StencilOperation[states.stencilFail], StencilOperation[states.stencilZFail], StencilOperation[states.stencilPass]);
|
||||
currentRenderStates.stencilFail = states.stencilFail;
|
||||
currentRenderStates.stencilPass = states.stencilPass;
|
||||
currentRenderStates.stencilZFail = states.stencilZFail;
|
||||
// Ici encore, ça ne sert à rien de se soucier des fonctions de stencil sans qu'il soit activé
|
||||
if (currentRenderStates.stencilFail != states.stencilFail ||
|
||||
currentRenderStates.stencilPass != states.stencilPass ||
|
||||
currentRenderStates.stencilZFail != states.stencilZFail)
|
||||
{
|
||||
glStencilOp(StencilOperation[states.stencilFail], StencilOperation[states.stencilZFail], StencilOperation[states.stencilPass]);
|
||||
currentRenderStates.stencilFail = states.stencilFail;
|
||||
currentRenderStates.stencilPass = states.stencilPass;
|
||||
currentRenderStates.stencilZFail = states.stencilZFail;
|
||||
}
|
||||
}
|
||||
|
||||
if (!NzNumberEquals(currentRenderStates.lineWidth, states.lineWidth, 0.001f))
|
||||
|
|
@ -222,12 +246,6 @@ void NzOpenGL::ApplyStates(const NzRenderStates& states)
|
|||
currentRenderStates.parameters[nzRendererParameter_DepthBuffer] = states.parameters[nzRendererParameter_DepthBuffer];
|
||||
}
|
||||
|
||||
if (currentRenderStates.parameters[nzRendererParameter_DepthWrite] != states.parameters[nzRendererParameter_DepthWrite])
|
||||
{
|
||||
glDepthMask((states.parameters[nzRendererParameter_DepthWrite]) ? GL_TRUE : GL_FALSE);
|
||||
currentRenderStates.parameters[nzRendererParameter_DepthWrite] = states.parameters[nzRendererParameter_DepthWrite];
|
||||
}
|
||||
|
||||
if (currentRenderStates.parameters[nzRendererParameter_FaceCulling] != states.parameters[nzRendererParameter_FaceCulling])
|
||||
{
|
||||
if (states.parameters[nzRendererParameter_FaceCulling])
|
||||
|
|
|
|||
Loading…
Reference in New Issue