+void R_Textures_Frame (void)
+{
+ // could do procedural texture animation here, if we keep track of which
+ // textures were accessed this frame...
+
+ // free the resize buffers
+ resizebuffersize = 0;
+ if (resizebuffer)
+ {
+ Mem_Free(resizebuffer);
+ resizebuffer = NULL;
+ }
+ if (colorconvertbuffer)
+ {
+ Mem_Free(colorconvertbuffer);
+ colorconvertbuffer = NULL;
+ }
+}
+
+void R_MakeResizeBufferBigger(int size)
+{
+ if (resizebuffersize < size)
+ {
+ resizebuffersize = size;
+ if (resizebuffer)
+ Mem_Free(resizebuffer);
+ if (colorconvertbuffer)
+ Mem_Free(colorconvertbuffer);
+ resizebuffer = Mem_Alloc(textureprocessingmempool, resizebuffersize);
+ colorconvertbuffer = Mem_Alloc(textureprocessingmempool, resizebuffersize);
+ if (!resizebuffer || !colorconvertbuffer)
+ Host_Error("R_Upload: out of memory\n");
+ }
+}
+
+static void GL_SetupTextureParameters(int flags, int texturetype)
+{
+ int textureenum = gltexturetypeenums[texturetype];
+ int wrapmode = ((flags & TEXF_CLAMP) && gl_support_clamptoedge) ? GL_CLAMP_TO_EDGE : GL_REPEAT;
+
+ CHECKGLERROR
+
+ if (gl_support_anisotropy)
+ qglTexParameterf(textureenum, GL_TEXTURE_MAX_ANISOTROPY_EXT, gl_texture_anisotropy.value);
+ qglTexParameteri(textureenum, GL_TEXTURE_WRAP_S, wrapmode);
+ qglTexParameteri(textureenum, GL_TEXTURE_WRAP_T, wrapmode);
+ if (gltexturetypedimensions[texturetype] >= 3)
+ qglTexParameteri(textureenum, GL_TEXTURE_WRAP_R, wrapmode);
+
+ 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
+ {
+ 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
+}
+