summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw/draw_cull.c
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-07-13 14:22:46 -0600
committerBrian <brian.paul@tungstengraphics.com>2007-07-13 14:22:46 -0600
commitdc313b578386dc07f4916fba98da061af3ab18e5 (patch)
tree28dc7a6218e61a152136555e3f32d017c1762b2d /src/mesa/pipe/draw/draw_cull.c
parent2bf4a500de24347476ce96cdd48d68ddeecbb019 (diff)
Fix more polygon winding, culling confusion.
If the determinant of the triangle is positive, its winding is CCW (right-handed coord system).
Diffstat (limited to 'src/mesa/pipe/draw/draw_cull.c')
-rw-r--r--src/mesa/pipe/draw/draw_cull.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/mesa/pipe/draw/draw_cull.c b/src/mesa/pipe/draw/draw_cull.c
index 863686f150..e563f9f45f 100644
--- a/src/mesa/pipe/draw/draw_cull.c
+++ b/src/mesa/pipe/draw/draw_cull.c
@@ -40,7 +40,7 @@
struct cull_stage {
struct draw_stage stage;
- GLuint mode; /**< one of PIPE_WINDING_x */
+ GLuint winding; /**< which winding(s) to cull (one of PIPE_WINDING_x) */
};
@@ -54,7 +54,7 @@ static void cull_begin( struct draw_stage *stage )
{
struct cull_stage *cull = cull_stage(stage);
- cull->mode = stage->draw->setup.cull_mode;
+ cull->winding = stage->draw->setup.cull_mode;
stage->next->begin( stage->next );
}
@@ -78,10 +78,12 @@ static void cull_tri( struct draw_stage *stage,
header->det = ex * fy - ey * fx;
if (header->det != 0) {
- /* non-zero area */
- GLuint mode = (header->det > 0) ? PIPE_WINDING_CW : PIPE_WINDING_CCW;
+ /* if (det > 0 then Z points toward camera and triangle is
+ * counter-clockwise winding.
+ */
+ GLuint winding = (header->det > 0) ? PIPE_WINDING_CCW : PIPE_WINDING_CW;
- if ((mode & cull_stage(stage)->mode) == 0) {
+ if ((winding & cull_stage(stage)->winding) == 0) {
/* triangle is not culled, pass to next stage */
stage->next->tri( stage->next, header );
}