Compute quad.facing from prim->det and polygon winding.
Updated comments/questions about area vs. prim->det.
This commit is contained in:
@@ -74,7 +74,7 @@ struct quad_header {
|
||||
GLint x0;
|
||||
GLint y0;
|
||||
GLuint mask;
|
||||
GLuint facing; /**< Front or back facing? */
|
||||
GLuint facing; /**< Front (0) or back (1) facing? */
|
||||
|
||||
struct {
|
||||
GLfloat color[4][QUAD_SIZE]; /* rrrr, gggg, bbbb, aaaa */
|
||||
|
||||
@@ -279,26 +279,32 @@ static GLboolean setup_sort_vertices( struct setup_stage *setup,
|
||||
setup->etop.dx = setup->vmax->data[0][0] - setup->vmid->data[0][0];
|
||||
setup->etop.dy = setup->vmax->data[0][1] - setup->vmid->data[0][1];
|
||||
|
||||
/* xxx: may need to adjust this sign according to the if-tree
|
||||
* above:
|
||||
/*
|
||||
* Compute triangle's area. Use 1/area to compute partial
|
||||
* derivatives of attributes later.
|
||||
*
|
||||
* XXX: this is like 'det', but calculated from screen coords??
|
||||
* The area will be the same as prim->det, but the sign may be
|
||||
* different depending on how the vertices get sorted above.
|
||||
*
|
||||
* To determine whether the primitive is front or back facing we
|
||||
* use the prim->det value because its sign is correct.
|
||||
*/
|
||||
{
|
||||
const GLfloat area = (setup->emaj.dx * setup->ebot.dy -
|
||||
setup->ebot.dx * setup->emaj.dy);
|
||||
|
||||
setup->oneoverarea = 1.0 / area;
|
||||
/*
|
||||
_mesa_printf("%s one-over-area %f area %f det %f\n",
|
||||
__FUNCTION__, setup->oneoverarea, area, prim->det );
|
||||
*/
|
||||
}
|
||||
|
||||
/* XXX need to know if this is a front or back-facing triangle:
|
||||
/* We need to know if this is a front or back-facing triangle for:
|
||||
* - the GLSL gl_FrontFacing fragment attribute (bool)
|
||||
* - two-sided stencil test
|
||||
*/
|
||||
setup->quad.facing = 0;
|
||||
|
||||
_mesa_printf("%s one-over-area %f\n", __FUNCTION__, setup->oneoverarea );
|
||||
|
||||
setup->quad.facing = (prim->det > 0.0) ^ (setup->softpipe->setup.front_winding == PIPE_WINDING_CW);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user