]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_textures.c
fixed signed vs. unsigned warning
[xonotic/darkplaces.git] / gl_textures.c
index b10611b7b2c9ba8f222ea347de3eaf4f4ca03f94..f4ccbcaec93fddfd709de399957d4abe91033cec 100644 (file)
@@ -889,7 +889,7 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden
        int i, size;
        gltexture_t *glt;
        gltexturepool_t *pool = (gltexturepool_t *)rtexturepool;
-       textypeinfo_t *texinfo;
+       textypeinfo_t *texinfo, *texinfo2;
 
        if (cls.state == ca_dedicated)
                return NULL;
@@ -972,6 +972,12 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden
                Host_Error("R_LoadTexture: unknown texture type");
        }
 
+       texinfo2 = R_GetTexTypeInfo(textype, flags);
+       if(size == width * height * depth * sides * texinfo->inputbytesperpixel)
+               texinfo = texinfo2;
+       else
+               Con_Printf ("R_LoadTexture: input size changed after alpha fallback\n");
+
        glt = (gltexture_t *)Mem_Alloc(texturemempool, sizeof(gltexture_t));
        if (identifier)
                strlcpy (glt->identifier, identifier, sizeof(glt->identifier));
@@ -1236,8 +1242,8 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen
                for (i = 3;i < size;i += 4)
                        if (ddspixels[i] < 255)
                                break;
-               if (i < size)
-                       flags |= TEXF_ALPHA;
+               if (i >= size)
+                       flags &= ~TEXF_ALPHA;
        }
        else if (!memcmp(dds+84, "DXT1", 4))
        {
@@ -1259,10 +1265,9 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen
                        if (ddspixels[i+0] + ddspixels[i+1] * 256 <= ddspixels[i+2] + ddspixels[i+3] * 256)
                                break;
                if (i < size)
-               {
                        textype = TEXTYPE_DXT1A;
-                       flags |= TEXF_ALPHA;
-               }
+               else
+                       flags &= ~TEXF_ALPHA;
        }
        else if (!memcmp(dds+84, "DXT3", 4))
        {
@@ -1276,7 +1281,6 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen
                        Con_Printf("^1%s: invalid DXT3 DDS image\n", filename);
                        return NULL;
                }
-               flags |= TEXF_ALPHA;
        }
        else if (!memcmp(dds+84, "DXT5", 4))
        {
@@ -1290,7 +1294,6 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen
                        Con_Printf("^1%s: invalid DXT5 DDS image\n", filename);
                        return NULL;
                }
-               flags |= TEXF_ALPHA;
        }
        else
        {