r300: properly handle GL_POINT in glPolygonMode
authorChristoph Brill <egore911@egore911.de>
Wed, 27 Feb 2008 21:06:38 +0000 (22:06 +0100)
committerChristoph Brill <egore911@egore911.de>
Wed, 27 Feb 2008 21:06:38 +0000 (22:06 +0100)
Until now the polygon mode was completely turned of when you used
GL_POINT. For me it looked buggy to completely disable the polygon
mode for FrontMode and BackMode if any of these was GL_POINT.

src/mesa/drivers/dri/r300/r300_state.c

index dc6a31e130166d141c92add7dd2c21b513b20947..42a1acfd1af23db27e4abc598d83f914f605c7bd 100644 (file)
@@ -571,12 +571,16 @@ static void r300SetStencilState(GLcontext * ctx, GLboolean state)
 static void r300UpdatePolygonMode(GLcontext * ctx)
 {
        r300ContextPtr r300 = R300_CONTEXT(ctx);
-       uint32_t hw_mode = 0;
+       uint32_t hw_mode = GA_POLY_MODE_DISABLE;
 
+       /* Only do something if a polygon mode is wanted, default is GL_FILL */
        if (ctx->Polygon.FrontMode != GL_FILL ||
            ctx->Polygon.BackMode != GL_FILL) {
                GLenum f, b;
 
+               /* Handle GL_CW (clock wise and GL_CCW (counter clock wise)
+                * correctly by selecting the correct front and back face
+                */
                if (ctx->Polygon.FrontFace == GL_CCW) {
                        f = ctx->Polygon.FrontMode;
                        b = ctx->Polygon.BackMode;
@@ -585,14 +589,15 @@ static void r300UpdatePolygonMode(GLcontext * ctx)
                        b = ctx->Polygon.FrontMode;
                }
 
+               /* Enable polygon mode */
                hw_mode |= GA_POLY_MODE_DUAL;
 
                switch (f) {
                case GL_LINE:
                        hw_mode |= GA_POLY_MODE_FRONT_PTYPE_LINE;
                        break;
-               case GL_POINT:  /* TODO: noops, find out why */
-                       hw_mode |= GA_POLY_MODE_DISABLE;
+               case GL_POINT:
+                       hw_mode |= GA_POLY_MODE_FRONT_PTYPE_POINT;
                        break;
                case GL_FILL:
                        hw_mode |= GA_POLY_MODE_FRONT_PTYPE_TRI;
@@ -603,8 +608,8 @@ static void r300UpdatePolygonMode(GLcontext * ctx)
                case GL_LINE:
                        hw_mode |= GA_POLY_MODE_BACK_PTYPE_LINE;
                        break;
-               case GL_POINT:  /* TODO: noops, find out why */
-                       hw_mode |= GA_POLY_MODE_DISABLE;
+               case GL_POINT:
+                       hw_mode |= GA_POLY_MODE_BACK_PTYPE_POINT;
                        break;
                case GL_FILL:
                        hw_mode |= GA_POLY_MODE_BACK_PTYPE_TRI;