Lines Matching refs:ctx

61 validate_stencil_op(struct gl_context *ctx, GLenum op)
80 validate_stencil_func(struct gl_context *ctx, GLenum func)
112 GET_CURRENT_CONTEXT(ctx);
115 _mesa_debug(ctx, "glClearStencil(%d)\n", s);
117 ctx->PopAttribState |= GL_STENCIL_BUFFER_BIT;
118 ctx->Stencil.Clear = (GLuint) s;
139 GET_CURRENT_CONTEXT(ctx);
142 _mesa_debug(ctx, "glStencilFuncSeparateATI()\n");
144 if (!validate_stencil_func(ctx, frontfunc)) {
145 _mesa_error(ctx, GL_INVALID_ENUM,
149 if (!validate_stencil_func(ctx, backfunc)) {
150 _mesa_error(ctx, GL_INVALID_ENUM,
156 if (ctx->Stencil.Function[0] == frontfunc &&
157 ctx->Stencil.Function[1] == backfunc &&
158 ctx->Stencil.ValueMask[0] == mask &&
159 ctx->Stencil.ValueMask[1] == mask &&
160 ctx->Stencil.Ref[0] == ref &&
161 ctx->Stencil.Ref[1] == ref)
163 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
164 ctx->NewDriverState |= ST_NEW_DSA;
165 ctx->Stencil.Function[0] = frontfunc;
166 ctx->Stencil.Function[1] = backfunc;
167 ctx->Stencil.Ref[0] = ctx->Stencil.Ref[1] = ref;
168 ctx->Stencil.ValueMask[0] = ctx->Stencil.ValueMask[1] = mask;
186 stencil_func(struct gl_context *ctx, GLenum func, GLint ref, GLuint mask)
188 const GLint face = ctx->Stencil.ActiveFace;
191 if (ctx->Stencil.Function[face] == func &&
192 ctx->Stencil.ValueMask[face] == mask &&
193 ctx->Stencil.Ref[face] == ref)
195 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
196 ctx->NewDriverState |= ST_NEW_DSA;
197 ctx->Stencil.Function[face] = func;
198 ctx->Stencil.Ref[face] = ref;
199 ctx->Stencil.ValueMask[face] = mask;
203 if (ctx->Stencil.Function[0] == func &&
204 ctx->Stencil.Function[1] == func &&
205 ctx->Stencil.ValueMask[0] == mask &&
206 ctx->Stencil.ValueMask[1] == mask &&
207 ctx->Stencil.Ref[0] == ref &&
208 ctx->Stencil.Ref[1] == ref)
210 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
211 ctx->NewDriverState |= ST_NEW_DSA;
212 ctx->Stencil.Function[0] = ctx->Stencil.Function[1] = func;
213 ctx->Stencil.Ref[0] = ctx->Stencil.Ref[1] = ref;
214 ctx->Stencil.ValueMask[0] = ctx->Stencil.ValueMask[1] = mask;
222 GET_CURRENT_CONTEXT(ctx);
223 stencil_func(ctx, func, ref, mask);
230 GET_CURRENT_CONTEXT(ctx);
233 _mesa_debug(ctx, "glStencilFunc()\n");
235 if (!validate_stencil_func(ctx, func)) {
236 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilFunc(func)");
240 stencil_func(ctx, func, ref, mask);
258 GET_CURRENT_CONTEXT(ctx);
259 const GLint face = ctx->Stencil.ActiveFace;
262 _mesa_debug(ctx, "glStencilMask()\n");
267 if (ctx->Stencil.WriteMask[face] == mask)
269 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
270 ctx->NewDriverState |= ST_NEW_DSA;
271 ctx->Stencil.WriteMask[face] = mask;
275 if (ctx->Stencil.WriteMask[0] == mask &&
276 ctx->Stencil.WriteMask[1] == mask)
278 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
279 ctx->NewDriverState |= ST_NEW_DSA;
280 ctx->Stencil.WriteMask[0] = ctx->Stencil.WriteMask[1] = mask;
300 stencil_op(struct gl_context *ctx, GLenum fail, GLenum zfail, GLenum zpass)
302 const GLint face = ctx->Stencil.ActiveFace;
306 if (ctx->Stencil.ZFailFunc[face] == zfail &&
307 ctx->Stencil.ZPassFunc[face] == zpass &&
308 ctx->Stencil.FailFunc[face] == fail)
310 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
311 ctx->NewDriverState |= ST_NEW_DSA;
312 ctx->Stencil.ZFailFunc[face] = zfail;
313 ctx->Stencil.ZPassFunc[face] = zpass;
314 ctx->Stencil.FailFunc[face] = fail;
318 if (ctx->Stencil.ZFailFunc[0] == zfail &&
319 ctx->Stencil.ZFailFunc[1] == zfail &&
320 ctx->Stencil.ZPassFunc[0] == zpass &&
321 ctx->Stencil.ZPassFunc[1] == zpass &&
322 ctx->Stencil.FailFunc[0] == fail &&
323 ctx->Stencil.FailFunc[1] == fail)
325 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
326 ctx->NewDriverState |= ST_NEW_DSA;
327 ctx->Stencil.ZFailFunc[0] = ctx->Stencil.ZFailFunc[1] = zfail;
328 ctx->Stencil.ZPassFunc[0] = ctx->Stencil.ZPassFunc[1] = zpass;
329 ctx->Stencil.FailFunc[0] = ctx->Stencil.FailFunc[1] = fail;
337 GET_CURRENT_CONTEXT(ctx);
338 stencil_op(ctx, fail, zfail, zpass);
345 GET_CURRENT_CONTEXT(ctx);
348 _mesa_debug(ctx, "glStencilOp()\n");
350 if (!validate_stencil_op(ctx, fail)) {
351 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOp(sfail)");
355 if (!validate_stencil_op(ctx, zfail)) {
356 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOp(zfail)");
360 if (!validate_stencil_op(ctx, zpass)) {
361 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOp(zpass)");
365 stencil_op(ctx, fail, zfail, zpass);
373 GET_CURRENT_CONTEXT(ctx);
376 _mesa_debug(ctx, "glActiveStencilFaceEXT()\n");
378 if (!ctx->Extensions.EXT_stencil_two_side) {
379 _mesa_error(ctx, GL_INVALID_OPERATION, "glActiveStencilFaceEXT");
384 ctx->Stencil.ActiveFace = (face == GL_FRONT) ? 0 : 2;
387 _mesa_error(ctx, GL_INVALID_ENUM, "glActiveStencilFaceEXT(face)");
393 stencil_op_separate(struct gl_context *ctx, GLenum face, GLenum sfail,
398 if (ctx->Stencil.ZFailFunc[0] != zfail ||
399 ctx->Stencil.ZPassFunc[0] != zpass ||
400 ctx->Stencil.FailFunc[0] != sfail){
401 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
402 ctx->NewDriverState |= ST_NEW_DSA;
403 ctx->Stencil.ZFailFunc[0] = zfail;
404 ctx->Stencil.ZPassFunc[0] = zpass;
405 ctx->Stencil.FailFunc[0] = sfail;
411 if (ctx->Stencil.ZFailFunc[1] != zfail ||
412 ctx->Stencil.ZPassFunc[1] != zpass ||
413 ctx->Stencil.FailFunc[1] != sfail) {
414 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
415 ctx->NewDriverState |= ST_NEW_DSA;
416 ctx->Stencil.ZFailFunc[1] = zfail;
417 ctx->Stencil.ZPassFunc[1] = zpass;
418 ctx->Stencil.FailFunc[1] = sfail;
428 GET_CURRENT_CONTEXT(ctx);
429 stencil_op_separate(ctx, face, sfail, zfail, zpass);
436 GET_CURRENT_CONTEXT(ctx);
439 _mesa_debug(ctx, "glStencilOpSeparate()\n");
441 if (!validate_stencil_op(ctx, sfail)) {
442 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(sfail)");
446 if (!validate_stencil_op(ctx, zfail)) {
447 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(zfail)");
451 if (!validate_stencil_op(ctx, zpass)) {
452 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(zpass)");
457 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilOpSeparate(face)");
461 stencil_op_separate(ctx, face, sfail, zfail, zpass);
466 stencil_func_separate(struct gl_context *ctx, GLenum face, GLenum func,
469 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
470 ctx->NewDriverState |= ST_NEW_DSA;
474 ctx->Stencil.Function[0] = func;
475 ctx->Stencil.Ref[0] = ref;
476 ctx->Stencil.ValueMask[0] = mask;
481 ctx->Stencil.Function[1] = func;
482 ctx->Stencil.Ref[1] = ref;
483 ctx->Stencil.ValueMask[1] = mask;
493 GET_CURRENT_CONTEXT(ctx);
494 stencil_func_separate(ctx, face, func, ref, mask);
501 GET_CURRENT_CONTEXT(ctx);
504 _mesa_debug(ctx, "glStencilFuncSeparate()\n");
507 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilFuncSeparate(face)");
511 if (!validate_stencil_func(ctx, func)) {
512 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilFuncSeparate(func)");
516 stencil_func_separate(ctx, face, func, ref, mask);
521 stencil_mask_separate(struct gl_context *ctx, GLenum face, GLuint mask)
523 FLUSH_VERTICES(ctx, 0, GL_STENCIL_BUFFER_BIT);
524 ctx->NewDriverState |= ST_NEW_DSA;
527 ctx->Stencil.WriteMask[0] = mask;
531 ctx->Stencil.WriteMask[1] = mask;
540 GET_CURRENT_CONTEXT(ctx);
541 stencil_mask_separate(ctx, face, mask);
548 GET_CURRENT_CONTEXT(ctx);
551 _mesa_debug(ctx, "glStencilMaskSeparate()\n");
554 _mesa_error(ctx, GL_INVALID_ENUM, "glStencilaMaskSeparate(face)");
558 stencil_mask_separate(ctx, face, mask);
565 * \param ctx GL context.
570 _mesa_init_stencil(struct gl_context *ctx)
572 ctx->Stencil.Enabled = GL_FALSE;
573 ctx->Stencil.TestTwoSide = GL_FALSE;
574 ctx->Stencil.ActiveFace = 0; /* 0 = GL_FRONT, 2 = GL_BACK */
575 ctx->Stencil.Function[0] = GL_ALWAYS;
576 ctx->Stencil.Function[1] = GL_ALWAYS;
577 ctx->Stencil.Function[2] = GL_ALWAYS;
578 ctx->Stencil.FailFunc[0] = GL_KEEP;
579 ctx->Stencil.FailFunc[1] = GL_KEEP;
580 ctx->Stencil.FailFunc[2] = GL_KEEP;
581 ctx->Stencil.ZPassFunc[0] = GL_KEEP;
582 ctx->Stencil.ZPassFunc[1] = GL_KEEP;
583 ctx->Stencil.ZPassFunc[2] = GL_KEEP;
584 ctx->Stencil.ZFailFunc[0] = GL_KEEP;
585 ctx->Stencil.ZFailFunc[1] = GL_KEEP;
586 ctx->Stencil.ZFailFunc[2] = GL_KEEP;
587 ctx->Stencil.Ref[0] = 0;
588 ctx->Stencil.Ref[1] = 0;
589 ctx->Stencil.Ref[2] = 0;
601 ctx->Stencil.ValueMask[0] = 0xFF;
602 ctx->Stencil.ValueMask[1] = 0xFF;
603 ctx->Stencil.ValueMask[2] = 0xFF;
604 ctx->Stencil.WriteMask[0] = 0xFF;
605 ctx->Stencil.WriteMask[1] = 0xFF;
606 ctx->Stencil.WriteMask[2] = 0xFF;
608 ctx->Stencil.Clear = 0;
609 ctx->Stencil._BackFace = 1;