mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
add missing _mesa_StencilFuncSeparateATI function
This commit is contained in:
parent
cf9b07ea34
commit
04097f5583
2 changed files with 77 additions and 0 deletions
|
|
@ -82,6 +82,81 @@ _mesa_ClearStencil( GLint s )
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the function and reference value for stencil testing.
|
||||
*
|
||||
* \param frontfunc front test function.
|
||||
* \param backfunc back test function.
|
||||
* \param ref front and back reference value.
|
||||
* \param mask front and back bitmask.
|
||||
*
|
||||
* \sa glStencilFunc().
|
||||
*
|
||||
* Verifies the parameters and updates the respective values in
|
||||
* __GLcontextRec::Stencil. On change flushes the vertices and notifies the
|
||||
* driver via the dd_function_table::StencilFunc callback.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_StencilFuncSeparateATI( GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
const GLint stencilMax = (1 << ctx->DrawBuffer->Visual.stencilBits) - 1;
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
switch (frontfunc) {
|
||||
case GL_NEVER:
|
||||
case GL_LESS:
|
||||
case GL_LEQUAL:
|
||||
case GL_GREATER:
|
||||
case GL_GEQUAL:
|
||||
case GL_EQUAL:
|
||||
case GL_NOTEQUAL:
|
||||
case GL_ALWAYS:
|
||||
break;
|
||||
default:
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glStencilFuncSeparateATI (0x%04x)", frontfunc );
|
||||
return;
|
||||
}
|
||||
|
||||
switch (backfunc) {
|
||||
case GL_NEVER:
|
||||
case GL_LESS:
|
||||
case GL_LEQUAL:
|
||||
case GL_GREATER:
|
||||
case GL_GEQUAL:
|
||||
case GL_EQUAL:
|
||||
case GL_NOTEQUAL:
|
||||
case GL_ALWAYS:
|
||||
break;
|
||||
default:
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glStencilFuncSeparateATI (0x%04x)", backfunc );
|
||||
return;
|
||||
}
|
||||
|
||||
ref = CLAMP( ref, 0, stencilMax );
|
||||
|
||||
/* set both front and back state */
|
||||
if (ctx->Stencil.Function[0] == frontfunc &&
|
||||
ctx->Stencil.Function[1] == backfunc &&
|
||||
ctx->Stencil.ValueMask[0] == mask &&
|
||||
ctx->Stencil.ValueMask[1] == mask &&
|
||||
ctx->Stencil.Ref[0] == ref &&
|
||||
ctx->Stencil.Ref[1] == ref)
|
||||
return;
|
||||
FLUSH_VERTICES(ctx, _NEW_STENCIL);
|
||||
ctx->Stencil.Function[0] = frontfunc;
|
||||
ctx->Stencil.Function[1] = backfunc;
|
||||
ctx->Stencil.Ref[0] = ctx->Stencil.Ref[1] = ref;
|
||||
ctx->Stencil.ValueMask[0] = ctx->Stencil.ValueMask[1] = mask;
|
||||
if (ctx->Driver.StencilFuncSeparate) {
|
||||
ctx->Driver.StencilFuncSeparate(ctx, GL_FRONT,
|
||||
frontfunc, ref, mask);
|
||||
ctx->Driver.StencilFuncSeparate(ctx, GL_BACK,
|
||||
backfunc, ref, mask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the function and reference value for stencil testing.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ _mesa_StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
|||
extern void GLAPIENTRY
|
||||
_mesa_StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_StencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_StencilMaskSeparate(GLenum face, GLuint mask);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue