X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=gl_textures.c;h=6bcd55a8a4b51b3665d088b106c5ef16588c0e26;hp=8ad1278fe69805f15cb119f352270e1e92d5271d;hb=e13119a0c2d45c917d429dda262803208fee95a9;hpb=bdffd88cf8584630d1e24363e75a969435af2809 diff --git a/gl_textures.c b/gl_textures.c index 8ad1278f..6bcd55a8 100644 --- a/gl_textures.c +++ b/gl_textures.c @@ -343,7 +343,7 @@ static void GL_TextureMode_f (void) } for (i = 0;i < 6;i++) - if (!Q_strcasecmp (modes[i].name, Cmd_Argv(1) ) ) + if (!strcasecmp (modes[i].name, Cmd_Argv(1) ) ) break; if (i == 6) { @@ -478,7 +478,9 @@ static void r_textures_start(void) texturedatamempool = Mem_AllocPool("Texture Storage (not yet uploaded)"); textureprocessingmempool = Mem_AllocPool("Texture Processing Buffers"); - JPEG_OpenLibrary (); + // Disable JPEG screenshots if the DLL isn't loaded + if (! JPEG_OpenLibrary ()) + Cvar_SetValueQuick (&scr_screenshot_jpeg, 0); } static void r_textures_shutdown(void) @@ -558,7 +560,7 @@ void R_MakeResizeBufferBigger(int size) static void GL_SetupTextureParameters(int flags, int texturetype) { int textureenum = gltexturetypeenums[texturetype]; - int wrapmode = (flags & TEXF_CLAMP) ? GL_CLAMP : GL_REPEAT; + int wrapmode = ((flags & TEXF_CLAMP) && gl_support_clamptoedge) ? GL_CLAMP_TO_EDGE : GL_REPEAT; CHECKGLERROR @@ -567,11 +569,35 @@ static void GL_SetupTextureParameters(int flags, int texturetype) if (gltexturetypedimensions[texturetype] >= 3) qglTexParameteri(textureenum, GL_TEXTURE_WRAP_R, wrapmode); - if (flags & TEXF_MIPMAP) - qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, gl_filter_min); + if (flags & TEXF_FORCENEAREST) + { + if (flags & TEXF_MIPMAP) + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); + else + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + qglTexParameteri(textureenum, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + } + else if (flags & TEXF_FORCELINEAR) + { + if (flags & TEXF_MIPMAP) + { + if (gl_filter_min == GL_NEAREST_MIPMAP_LINEAR || gl_filter_min == GL_LINEAR_MIPMAP_LINEAR) + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + else + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); + } + else + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTexParameteri(textureenum, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } else - qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, gl_filter_mag); - qglTexParameteri(textureenum, GL_TEXTURE_MAG_FILTER, gl_filter_mag); + { + if (flags & TEXF_MIPMAP) + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, gl_filter_min); + else + qglTexParameteri(textureenum, GL_TEXTURE_MIN_FILTER, gl_filter_mag); + qglTexParameteri(textureenum, GL_TEXTURE_MAG_FILTER, gl_filter_mag); + } CHECKGLERROR } @@ -959,6 +985,8 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden texinfo = R_GetTexTypeInfo(textype, flags); size = width * height * depth * sides * texinfo->inputbytesperpixel; + if (size < 1) + Sys_Error("R_LoadTexture: bogus texture size (%dx%dx%dx%dbppx%dsides = %d bytes)\n", width, height, depth, texinfo->inputbytesperpixel * 8, sides); // clear the alpha flag if the texture has no transparent pixels switch(textype) @@ -971,7 +999,7 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden { for (i = 0;i < size;i++) { - if (((qbyte *)&palette[data[i]])[3] == 255) + if (((qbyte *)&palette[data[i]])[3] < 255) { flags |= TEXF_ALPHA; break; @@ -1029,7 +1057,7 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden { glt->inputtexels = Mem_Alloc(texturedatamempool, size); if (glt->inputtexels == NULL) - Sys_Error("R_SetupTexture: out of memory\n"); + Sys_Error("R_LoadTexture: out of memory\n"); memcpy(glt->inputtexels, data, size); } else