summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/pipe/draw/draw_unfilled.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/mesa/pipe/draw/draw_unfilled.c b/src/mesa/pipe/draw/draw_unfilled.c
index a1d9d14352..8ee23d7493 100644
--- a/src/mesa/pipe/draw/draw_unfilled.c
+++ b/src/mesa/pipe/draw/draw_unfilled.c
@@ -25,6 +25,11 @@
*
**************************************************************************/
+/**
+ * \brief Drawing stage for handling glPolygonMode(line/point).
+ * Convert triangles to points or lines as needed.
+ */
+
/* Authors: Keith Whitwell <keith@tungstengraphics.com>
*/
@@ -36,6 +41,10 @@
struct unfilled_stage {
struct prim_stage stage;
+ /** [0] = front face, [1] = back face.
+ * legal values: PIPE_POLYGON_MODE_FILL, PIPE_POLYGON_MODE_LINE,
+ * and PIPE_POLYGON_MODE_POINT,
+ */
GLuint mode[2];
};
@@ -50,8 +59,8 @@ static void unfilled_begin( struct prim_stage *stage )
{
struct unfilled_stage *unfilled = unfilled_stage(stage);
- unfilled->mode[0] = stage->draw->setup.fill_ccw;
- unfilled->mode[1] = stage->draw->setup.fill_cw;
+ unfilled->mode[0] = stage->draw->setup.fill_ccw; /* front */
+ unfilled->mode[1] = stage->draw->setup.fill_cw; /* back */
stage->next->begin( stage->next );
}
@@ -87,6 +96,7 @@ static void points( struct prim_stage *stage,
if (v2->edgeflag) point( stage, v2 );
}
+
static void lines( struct prim_stage *stage,
struct prim_header *header )
{
@@ -109,7 +119,7 @@ static void unfilled_tri( struct prim_stage *stage,
struct prim_header *header )
{
struct unfilled_stage *unfilled = unfilled_stage(stage);
- GLuint mode = unfilled->mode[header->det < 0];
+ GLuint mode = unfilled->mode[header->det > 0.0];
switch (mode) {
case PIPE_POLYGON_MODE_FILL: