]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/shaders.c
sRGB convert all shader specified colors
[xonotic/netradiant.git] / tools / quake3 / q3map2 / shaders.c
index 3bf6cbe1ea4d1eb401954dfe9bf61d99eece5ce3..ebe91fd8f6b41251330b9813c9838d1860b7d153 100644 (file)
@@ -687,7 +687,7 @@ void FinishShader( shaderInfo_t *si )
 {
        int             x, y;
        float   st[ 2 ], o[ 2 ], dist, bestDist;
-       vec4_t  color, bestColor, delta;
+       vec4_t  color, delta;
        
 
        /* don't double-dip */
@@ -727,8 +727,6 @@ void FinishShader( shaderInfo_t *si )
                        dist = delta[ 0 ] * delta[ 0 ] + delta[ 1 ] * delta[ 1 ] + delta[ 2 ] * delta[ 2 ] + delta[ 3 ] * delta[ 3 ];
                        if( dist < bestDist )
                        {
-                               VectorCopy( color, bestColor );
-                               bestColor[ 3 ] = color[ 3 ];
                                si->stFlat[ 0 ] = st[ 0 ];
                                si->stFlat[ 1 ] = st[ 1 ];
                        }
@@ -829,6 +827,13 @@ finds a shaderinfo for a named shader
 
 #define MAX_SHADER_DEPRECATION_DEPTH 16
 
+shaderInfo_t *ShaderInfoForShaderNull( const char *shaderName )
+{
+       if(!strcmp(shaderName, "noshader"))
+               return NULL;
+       return ShaderInfoForShader(shaderName);
+}
+
 shaderInfo_t *ShaderInfoForShader( const char *shaderName )
 {
        int                             i;
@@ -1295,6 +1300,13 @@ static void ParseShaderFile( const char *filename )
                                sun->color[ 1 ] = atof( token );
                                GetTokenAppend( shaderText, qfalse );
                                sun->color[ 2 ] = atof( token );
+
+                               if(colorsRGB)
+                               {
+                                       sun->color[0] = Image_LinearFloatFromsRGBFloat(sun->color[0]);
+                                       sun->color[1] = Image_LinearFloatFromsRGBFloat(sun->color[1]);
+                                       sun->color[2] = Image_LinearFloatFromsRGBFloat(sun->color[2]);
+                               }
                                
                                /* normalize it */
                                VectorNormalize( sun->color, sun->color );
@@ -1487,6 +1499,12 @@ static void ParseShaderFile( const char *filename )
                                        si->color[ 1 ] = atof( token );
                                        GetTokenAppend( shaderText, qfalse );
                                        si->color[ 2 ] = atof( token );
+                                       if(colorsRGB)
+                                       {
+                                               si->color[0] = Image_LinearFloatFromsRGBFloat(si->color[0]);
+                                               si->color[1] = Image_LinearFloatFromsRGBFloat(si->color[1]);
+                                               si->color[2] = Image_LinearFloatFromsRGBFloat(si->color[2]);
+                                       }
                                        ColorNormalize( si->color, si->color );
                                }
                                
@@ -1522,6 +1540,13 @@ static void ParseShaderFile( const char *filename )
                                        si->floodlightIntensity = atof( token ); 
                                        GetTokenAppend( shaderText, qfalse );
                                        si->floodlightDirectionScale = atof( token ); 
+                                       if(colorsRGB)
+                                       {
+                                               si->floodlightRGB[0] = Image_LinearFloatFromsRGBFloat(si->floodlightRGB[0]);
+                                               si->floodlightRGB[1] = Image_LinearFloatFromsRGBFloat(si->floodlightRGB[1]);
+                                               si->floodlightRGB[2] = Image_LinearFloatFromsRGBFloat(si->floodlightRGB[2]);
+                                       }
+                                       VectorNormalize(si->floodlightRGB);
                                }
 
                                /* jal: q3map_nodirty : skip dirty */
@@ -1801,6 +1826,12 @@ static void ParseShaderFile( const char *filename )
                                        {
                                                cm->type = CM_COLOR_SET;
                                                Parse1DMatrixAppend( shaderText, 3, cm->data );
+                                               if(colorsRGB)
+                                               {
+                                                       cm->data[0] = Image_LinearFloatFromsRGBFloat(cm->data[0]);
+                                                       cm->data[1] = Image_LinearFloatFromsRGBFloat(cm->data[1]);
+                                                       cm->data[2] = Image_LinearFloatFromsRGBFloat(cm->data[2]);
+                                               }
                                        }
                                        
                                        /* alpha scale A */