mesa/main: Maintain compressed fog mode.
authorGustaw Smolarczyk <wielkiegie@gmail.com>
Thu, 30 Mar 2017 18:09:29 +0000 (20:09 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 8 Apr 2017 18:29:58 +0000 (20:29 +0200)
Signed-off-by: Gustaw Smolarczyk <wielkiegie@gmail.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/main/enable.c
src/mesa/main/fog.c
src/mesa/main/mtypes.h

index d9d63a6..ef278a3 100644 (file)
@@ -385,6 +385,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
             return;
          FLUSH_VERTICES(ctx, _NEW_FOG);
          ctx->Fog.Enabled = state;
+         ctx->Fog._PackedEnabledMode = state ? ctx->Fog._PackedMode : FOG_NONE;
          break;
       case GL_LIGHT0:
       case GL_LIGHT1:
index 1ad939c..76e6508 100644 (file)
@@ -102,8 +102,13 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
          m = (GLenum) (GLint) *params;
         switch (m) {
         case GL_LINEAR:
+           ctx->Fog._PackedMode = FOG_LINEAR;
+           break;
         case GL_EXP:
+           ctx->Fog._PackedMode = FOG_EXP;
+           break;
         case GL_EXP2:
+           ctx->Fog._PackedMode = FOG_EXP2;
            break;
         default:
            _mesa_error( ctx, GL_INVALID_ENUM, "glFog" );
@@ -113,6 +118,8 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
            return;
         FLUSH_VERTICES(ctx, _NEW_FOG);
         ctx->Fog.Mode = m;
+        ctx->Fog._PackedEnabledMode = ctx->Fog.Enabled ?
+                                      ctx->Fog._PackedMode : FOG_NONE;
         break;
       case GL_FOG_DENSITY:
         if (*params<0.0F) {
@@ -210,6 +217,8 @@ void _mesa_init_fog( struct gl_context * ctx )
    /* Fog group */
    ctx->Fog.Enabled = GL_FALSE;
    ctx->Fog.Mode = GL_EXP;
+   ctx->Fog._PackedMode = FOG_EXP;
+   ctx->Fog._PackedEnabledMode = FOG_NONE;
    ASSIGN_4V( ctx->Fog.Color, 0.0, 0.0, 0.0, 0.0 );
    ASSIGN_4V( ctx->Fog.ColorUnclamped, 0.0, 0.0, 0.0, 0.0 );
    ctx->Fog.Index = 0.0;
index d0fb6c7..4986e42 100644 (file)
@@ -575,12 +575,26 @@ struct gl_eval_attrib
 
 
 /**
+ * Compressed fog mode.
+ */
+enum gl_fog_mode
+{
+   FOG_NONE,
+   FOG_LINEAR,
+   FOG_EXP,
+   FOG_EXP2,
+};
+
+
+/**
  * Fog attribute group (GL_FOG_BIT).
  */
 struct gl_fog_attrib
 {
    GLboolean Enabled;          /**< Fog enabled flag */
    GLboolean ColorSumEnabled;
+   uint8_t _PackedMode;                /**< Fog mode as 2 bits */
+   uint8_t _PackedEnabledMode; /**< Masked CompressedMode */
    GLfloat ColorUnclamped[4];            /**< Fog color */
    GLfloat Color[4];           /**< Fog color */
    GLfloat Density;            /**< Density >= 0.0 */