}
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)
{
}
}
}
- gl_backend_rebindtextures = true;
}
static int R_CalcTexelDataSize (gltexture_t *glt)
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)
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
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
}
qbyte *prevbuffer;
prevbuffer = data;
+ R_Mesh_EndBatch();
+
CHECKGLERROR
glt->texnum = glt->image->texnum;
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)
{
for (i = 0;i < size;i++)
{
- if (((qbyte *)&palette[data[i]])[3] == 255)
+ if (((qbyte *)&palette[data[i]])[3] < 255)
{
flags |= TEXF_ALPHA;
break;
{
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