X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=gl_textures.c;h=42db03eb7f2e47e9b08af6a46d4bec8c3f167068;hb=44eca4096e55c7625b8f8e377806aa7f8365b96b;hp=65daa7beaef558fcf0358624ef50acbbfab0df29;hpb=8d0aa212a91a456c5f7cc13963cc9f501e122ee4;p=xonotic%2Fdarkplaces.git diff --git a/gl_textures.c b/gl_textures.c index 65daa7be..42db03eb 100644 --- a/gl_textures.c +++ b/gl_textures.c @@ -23,6 +23,7 @@ cvar_t gl_texturecompression_lightcubemaps = {CVAR_SAVE, "gl_texturecompression_ cvar_t gl_texturecompression_reflectmask = {CVAR_SAVE, "gl_texturecompression_reflectmask", "1", "whether to compress reflection cubemap masks (mask of which areas of the texture should reflect the generic shiny cubemap)"}; cvar_t gl_nopartialtextureupdates = {CVAR_SAVE, "gl_nopartialtextureupdates", "1", "use alternate path for dynamic lightmap updates that avoids a possibly slow code path in the driver"}; +qboolean gl_filter_force = false; int gl_filter_min = GL_LINEAR_MIPMAP_LINEAR; int gl_filter_mag = GL_LINEAR; @@ -161,7 +162,6 @@ static gltexturepool_t *gltexturepoolchain = NULL; static unsigned char *resizebuffer = NULL, *colorconvertbuffer; static int resizebuffersize = 0; static const unsigned char *texturebuffer; -static int texturebuffersize = 0; static textypeinfo_t *R_GetTexTypeInfo(textype_t textype, int flags) { @@ -180,15 +180,11 @@ static textypeinfo_t *R_GetTexTypeInfo(textype_t textype, int flags) case TEXTYPE_RGBA: if ((flags & TEXF_COMPRESS) && gl_texturecompression.integer >= 1 && vid.support.arb_texture_compression) return (flags & TEXF_ALPHA) ? &textype_rgba_alpha_compress : &textype_rgba_compress; - else - return (flags & TEXF_ALPHA) ? &textype_rgba_alpha : &textype_rgba; - break; + return (flags & TEXF_ALPHA) ? &textype_rgba_alpha : &textype_rgba; case TEXTYPE_BGRA: if ((flags & TEXF_COMPRESS) && gl_texturecompression.integer >= 1 && vid.support.arb_texture_compression) return (flags & TEXF_ALPHA) ? &textype_bgra_alpha_compress : &textype_bgra_compress; - else - return (flags & TEXF_ALPHA) ? &textype_bgra_alpha : &textype_bgra; - break; + return (flags & TEXF_ALPHA) ? &textype_bgra_alpha : &textype_bgra; case TEXTYPE_ALPHA: return &textype_alpha; case TEXTYPE_SHADOWMAP: @@ -197,9 +193,9 @@ static textypeinfo_t *R_GetTexTypeInfo(textype_t textype, int flags) return &textype_colorbuffer; default: Host_Error("R_GetTexTypeInfo: unknown texture format"); - return NULL; + break; } - return NULL; // this line only to hush compiler warnings + return NULL; } // dynamic texture code [11/22/2007 Black] @@ -329,6 +325,7 @@ static void GL_TextureMode_f (void) if (Cmd_Argc() == 1) { + Con_Printf("Texture mode is %sforced\n", gl_filter_force ? "" : "not "); for (i = 0;i < 6;i++) { if (gl_filter_min == modes[i].minification) @@ -341,7 +338,7 @@ static void GL_TextureMode_f (void) return; } - for (i = 0;i < 6;i++) + for (i = 0;i < (int)(sizeof(modes)/sizeof(*modes));i++) if (!strcasecmp (modes[i].name, Cmd_Argv(1) ) ) break; if (i == 6) @@ -352,6 +349,7 @@ static void GL_TextureMode_f (void) gl_filter_min = modes[i].minification; gl_filter_mag = modes[i].magnification; + gl_filter_force = ((Cmd_Argc() > 2) && !strcasecmp(Cmd_Argv(2), "force")); // change all the existing mipmap texture objects // FIXME: force renderer(/client/something?) restart instead? @@ -362,7 +360,7 @@ static void GL_TextureMode_f (void) for (glt = pool->gltchain;glt;glt = glt->chain) { // only update already uploaded images - if (glt->texnum && !(glt->flags & (TEXF_FORCENEAREST | TEXF_FORCELINEAR))) + if (glt->texnum && (gl_filter_force || !(glt->flags & (TEXF_FORCENEAREST | TEXF_FORCELINEAR)))) { oldbindtexnum = R_Mesh_TexBound(0, gltexturetypeenums[glt->texturetype]); qglBindTexture(gltexturetypeenums[glt->texturetype], glt->texnum);CHECKGLERROR @@ -530,8 +528,8 @@ static void r_textures_start(void) // Disable JPEG screenshots if the DLL isn't loaded if (! JPEG_OpenLibrary ()) Cvar_SetValueQuick (&scr_screenshot_jpeg, 0); - // TODO: support png screenshots? - PNG_OpenLibrary (); + if (! PNG_OpenLibrary ()) + Cvar_SetValueQuick (&scr_screenshot_png, 0); } static void r_textures_shutdown(void) @@ -547,7 +545,6 @@ static void r_textures_shutdown(void) } resizebuffersize = 0; - texturebuffersize = 0; resizebuffer = NULL; colorconvertbuffer = NULL; texturebuffer = NULL; @@ -561,7 +558,7 @@ static void r_textures_newmap(void) void R_Textures_Init (void) { - Cmd_AddCommand("gl_texturemode", &GL_TextureMode_f, "set texture filtering mode (GL_NEAREST, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, etc)"); + Cmd_AddCommand("gl_texturemode", &GL_TextureMode_f, "set texture filtering mode (GL_NEAREST, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, etc); an additional argument 'force' forces the texture mode even in cases where it may not be appropriate"); Cmd_AddCommand("r_texturestats", R_TextureStats_f, "print information about all loaded textures and some statistics"); Cvar_RegisterVariable (&gl_max_size); Cvar_RegisterVariable (&gl_picmip); @@ -673,7 +670,7 @@ static void GL_SetupTextureParameters(int flags, textype_t textype, int texturet } CHECKGLERROR - if (flags & TEXF_FORCENEAREST) + if (!gl_filter_force && flags & TEXF_FORCENEAREST) { if (flags & TEXF_MIPMAP) { @@ -685,7 +682,7 @@ static void GL_SetupTextureParameters(int flags, textype_t textype, int texturet } qglTexParameteri(textureenum, GL_TEXTURE_MAG_FILTER, GL_NEAREST);CHECKGLERROR } - else if (flags & TEXF_FORCELINEAR) + else if (!gl_filter_force && flags & TEXF_FORCELINEAR) { if (flags & TEXF_MIPMAP) { @@ -1200,7 +1197,9 @@ int R_SaveTextureDDSFile(rtexture_t *rt, const char *filename, qboolean skipunco rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filename, int flags, qboolean *hasalphaflag, float *avgcolor) { - int i, size, dds_flags, dds_format_flags, dds_miplevels, dds_width, dds_height, textype; + int i, size, dds_format_flags, dds_miplevels, dds_width, dds_height; + //int dds_flags; + textype_t textype; int bytesperblock, bytesperpixel; int mipcomplete; gltexture_t *glt; @@ -1233,7 +1232,7 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen return NULL; } - dds_flags = BuffLittleLong(dds+8); + //dds_flags = BuffLittleLong(dds+8); dds_format_flags = BuffLittleLong(dds+80); dds_miplevels = (BuffLittleLong(dds+108) & 0x400000) ? BuffLittleLong(dds+28) : 1; dds_width = BuffLittleLong(dds+16);