X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=gl_textures.c;h=9c1f5f171431ff6d0605be33935ff360c74a96dd;hp=fc3d2ec1d601059193546e88fc710241df70c5b1;hb=7d91a4c10a6acfb3968d023355612425812d9f8e;hpb=2fc27557a6c719496832e949e1f129f6b6b83d97 diff --git a/gl_textures.c b/gl_textures.c index fc3d2ec1..9c1f5f17 100644 --- a/gl_textures.c +++ b/gl_textures.c @@ -1,14 +1,9 @@ #include "quakedef.h" -#ifdef SUPPORTD3D -#include -extern LPDIRECT3DDEVICE9 vid_d3d9dev; -#endif #include "image.h" #include "jpeg.h" #include "image_png.h" #include "intoverflow.h" -#include "dpsoftrast.h" #ifndef GL_TEXTURE_3D #define GL_TEXTURE_3D 0x806F @@ -44,18 +39,6 @@ cvar_t r_texture_dds_swdecode = {0, "r_texture_dds_swdecode", "0", "0: don't sof qboolean gl_filter_force = false; int gl_filter_min = GL_LINEAR_MIPMAP_LINEAR; int gl_filter_mag = GL_LINEAR; -DPSOFTRAST_TEXTURE_FILTER dpsoftrast_filter_mipmap = DPSOFTRAST_TEXTURE_FILTER_LINEAR_MIPMAP_TRIANGLE; -DPSOFTRAST_TEXTURE_FILTER dpsoftrast_filter_nomipmap = DPSOFTRAST_TEXTURE_FILTER_LINEAR; - -#ifdef SUPPORTD3D -int d3d_filter_flatmin = D3DTEXF_LINEAR; -int d3d_filter_flatmag = D3DTEXF_LINEAR; -int d3d_filter_flatmix = D3DTEXF_POINT; -int d3d_filter_mipmin = D3DTEXF_LINEAR; -int d3d_filter_mipmag = D3DTEXF_LINEAR; -int d3d_filter_mipmix = D3DTEXF_LINEAR; -int d3d_filter_nomip = false; -#endif static mempool_t *texturemempool; @@ -187,25 +170,6 @@ typedef struct gltexture_s qboolean dirty; // indicates that R_RealGetTexture should be called qboolean glisdepthstencil; // indicates that FBO attachment has to be GL_DEPTH_STENCIL_ATTACHMENT int gltexturetypeenum; // used by R_Mesh_TexBind - // d3d stuff the backend needs - void *d3dtexture; - void *d3dsurface; -#ifdef SUPPORTD3D - qboolean d3disrendertargetsurface; - qboolean d3disdepthstencilsurface; - int d3dformat; - int d3dusage; - int d3dpool; - int d3daddressu; - int d3daddressv; - int d3daddressw; - int d3dmagfilter; - int d3dminfilter; - int d3dmipfilter; - int d3dmaxmiplevelfilter; - int d3dmipmaplodbias; - int d3dmaxmiplevel; -#endif // dynamic texture stuff [11/22/2007 Black] updatecallback_t updatecallback; @@ -324,7 +288,7 @@ static textypeinfo_t *R_GetTexTypeInfo(textype_t textype, int flags) case TEXTYPE_SRGB_BGRA: return ((flags & TEXF_COMPRESS) && vid.support.ext_texture_compression_s3tc) ? ((flags & TEXF_ALPHA) ? &textype_sRGB_bgra_alpha_compress : &textype_sRGB_bgra_compress) : ((flags & TEXF_ALPHA) ? &textype_sRGB_bgra_alpha : &textype_sRGB_bgra); #endif default: - Host_Error("R_GetTexTypeInfo: unknown texture format"); + Host_Error("R_GetTexTypeInfo: unknown texture format %i with flags %x", (int)textype, flags); break; } return NULL; @@ -388,10 +352,7 @@ void R_FreeTexture(rtexture_t *rt) switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: if (glt->texnum) { @@ -404,30 +365,6 @@ void R_FreeTexture(rtexture_t *rt) qglDeleteRenderbuffers(1, (GLuint *)&glt->renderbuffernum);CHECKGLERROR } break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - if (glt->d3dsurface) - IDirect3DSurface9_Release((IDirect3DSurface9 *)glt->d3dsurface); - else if (glt->tiledepth > 1) - IDirect3DVolumeTexture9_Release((IDirect3DVolumeTexture9 *)glt->d3dtexture); - else if (glt->sides == 6) - IDirect3DCubeTexture9_Release((IDirect3DCubeTexture9 *)glt->d3dtexture); - else - IDirect3DTexture9_Release((IDirect3DTexture9 *)glt->d3dtexture); - glt->d3dtexture = NULL; - glt->d3dsurface = NULL; -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - if (glt->texnum) - DPSOFTRAST_Texture_Free(glt->texnum); - break; } if (glt->inputtexels) @@ -475,39 +412,19 @@ typedef struct glmode_s { const char *name; int minification, magnification; - DPSOFTRAST_TEXTURE_FILTER dpsoftrastfilter_mipmap, dpsoftrastfilter_nomipmap; } glmode_t; static glmode_t modes[6] = { - {"GL_NEAREST", GL_NEAREST, GL_NEAREST, DPSOFTRAST_TEXTURE_FILTER_NEAREST, DPSOFTRAST_TEXTURE_FILTER_NEAREST}, - {"GL_LINEAR", GL_LINEAR, GL_LINEAR, DPSOFTRAST_TEXTURE_FILTER_LINEAR, DPSOFTRAST_TEXTURE_FILTER_LINEAR}, - {"GL_NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST, DPSOFTRAST_TEXTURE_FILTER_NEAREST_MIPMAP_TRIANGLE, DPSOFTRAST_TEXTURE_FILTER_NEAREST}, - {"GL_LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR, DPSOFTRAST_TEXTURE_FILTER_LINEAR_MIPMAP_TRIANGLE, DPSOFTRAST_TEXTURE_FILTER_LINEAR}, - {"GL_NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST, DPSOFTRAST_TEXTURE_FILTER_NEAREST_MIPMAP_TRIANGLE, DPSOFTRAST_TEXTURE_FILTER_NEAREST}, - {"GL_LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, DPSOFTRAST_TEXTURE_FILTER_LINEAR_MIPMAP_TRIANGLE, DPSOFTRAST_TEXTURE_FILTER_LINEAR} + {"GL_NEAREST", GL_NEAREST, GL_NEAREST}, + {"GL_LINEAR", GL_LINEAR, GL_LINEAR}, + {"GL_NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST}, + {"GL_LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR}, + {"GL_NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR, GL_NEAREST}, + {"GL_LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR} }; -#ifdef SUPPORTD3D -typedef struct d3dmode_s -{ - const char *name; - int m1, m2; -} -d3dmode_t; - -static d3dmode_t d3dmodes[6] = -{ - {"GL_NEAREST", D3DTEXF_POINT, D3DTEXF_POINT}, - {"GL_LINEAR", D3DTEXF_LINEAR, D3DTEXF_POINT}, - {"GL_NEAREST_MIPMAP_NEAREST", D3DTEXF_POINT, D3DTEXF_POINT}, - {"GL_LINEAR_MIPMAP_NEAREST", D3DTEXF_LINEAR, D3DTEXF_POINT}, - {"GL_NEAREST_MIPMAP_LINEAR", D3DTEXF_POINT, D3DTEXF_LINEAR}, - {"GL_LINEAR_MIPMAP_LINEAR", D3DTEXF_LINEAR, D3DTEXF_LINEAR} -}; -#endif - static void GL_TextureMode_f (void) { int i; @@ -543,15 +460,9 @@ static void GL_TextureMode_f (void) gl_filter_mag = modes[i].magnification; gl_filter_force = ((Cmd_Argc() > 2) && !strcasecmp(Cmd_Argv(2), "force")); - dpsoftrast_filter_mipmap = modes[i].dpsoftrastfilter_mipmap; - dpsoftrast_filter_nomipmap = modes[i].dpsoftrastfilter_nomipmap; - switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: // change all the existing mipmap texture objects // FIXME: force renderer(/client/something?) restart instead? @@ -580,56 +491,6 @@ static void GL_TextureMode_f (void) } } break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - d3d_filter_flatmin = d3dmodes[i].m1; - d3d_filter_flatmag = d3dmodes[i].m1; - d3d_filter_flatmix = D3DTEXF_POINT; - d3d_filter_mipmin = d3dmodes[i].m1; - d3d_filter_mipmag = d3dmodes[i].m1; - d3d_filter_mipmix = d3dmodes[i].m2; - d3d_filter_nomip = i < 2; - if (gl_texture_anisotropy.integer > 1 && i == 5) - d3d_filter_mipmin = d3d_filter_mipmag = D3DTEXF_ANISOTROPIC; - for (pool = gltexturepoolchain;pool;pool = pool->next) - { - for (glt = pool->gltchain;glt;glt = glt->chain) - { - // only update already uploaded images - if (glt->d3dtexture && !glt->d3dsurface && (gl_filter_force || !(glt->flags & (TEXF_FORCENEAREST | TEXF_FORCELINEAR)))) - { - if (glt->flags & TEXF_MIPMAP) - { - glt->d3dminfilter = d3d_filter_mipmin; - glt->d3dmagfilter = d3d_filter_mipmag; - glt->d3dmipfilter = d3d_filter_mipmix; - glt->d3dmaxmiplevelfilter = 0; - } - else - { - glt->d3dminfilter = d3d_filter_flatmin; - glt->d3dmagfilter = d3d_filter_flatmag; - glt->d3dmipfilter = d3d_filter_flatmix; - glt->d3dmaxmiplevelfilter = 0; - } - } - } - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - // change all the existing texture objects - for (pool = gltexturepoolchain;pool;pool = pool->next) - for (glt = pool->gltchain;glt;glt = glt->chain) - if (glt->texnum && (gl_filter_force || !(glt->flags & (TEXF_FORCENEAREST | TEXF_FORCELINEAR)))) - DPSOFTRAST_Texture_Filter(glt->texnum, (glt->flags & TEXF_MIPMAP) ? dpsoftrast_filter_mipmap : dpsoftrast_filter_nomipmap); - break; } } @@ -672,29 +533,6 @@ static void GL_Texture_CalcImageSize(int texturetype, int flags, int miplevel, i for (depth2 >>= picmip;depth2 > maxsize;depth2 >>= 1); } - switch(vid.renderpath) - { - case RENDERPATH_GL11: - case RENDERPATH_GL13: - case RENDERPATH_GL20: - case RENDERPATH_D3D10: - case RENDERPATH_D3D11: - case RENDERPATH_SOFT: - case RENDERPATH_GLES1: - case RENDERPATH_GLES2: - break; - case RENDERPATH_D3D9: -#if 0 - // for some reason the REF rasterizer (and hence the PIX debugger) does not like small textures... - if (texturetype == GLTEXTURETYPE_2D) - { - width2 = max(width2, 2); - height2 = max(height2, 2); - } -#endif - break; - } - miplevels = 1; if (flags & TEXF_MIPMAP) { @@ -760,7 +598,7 @@ void R_TextureStats_Print(qboolean printeach, qboolean printpool, qboolean print for (glt = pool->gltchain;glt;glt = glt->chain) { glsize = R_CalcTexelDataSize(glt); - isloaded = glt->texnum != 0 || glt->renderbuffernum != 0 || glt->d3dtexture || glt->d3dsurface; + isloaded = glt->texnum != 0 || glt->renderbuffernum != 0; pooltotal++; pooltotalt += glsize; pooltotalp += glt->inputdatasize; @@ -795,26 +633,13 @@ static void r_textures_start(void) { switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: // LordHavoc: allow any alignment CHECKGLERROR qglPixelStorei(GL_UNPACK_ALIGNMENT, 1);CHECKGLERROR qglPixelStorei(GL_PACK_ALIGNMENT, 1);CHECKGLERROR break; - case RENDERPATH_D3D9: - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - break; } texturemempool = Mem_AllocPool("texture management", 0, NULL); @@ -863,34 +688,9 @@ static void r_textures_devicelost(void) continue; switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - if (glt->d3dsurface) - IDirect3DSurface9_Release((IDirect3DSurface9 *)glt->d3dsurface); - else if (glt->tiledepth > 1) - IDirect3DVolumeTexture9_Release((IDirect3DVolumeTexture9 *)glt->d3dtexture); - else if (glt->sides == 6) - IDirect3DCubeTexture9_Release((IDirect3DCubeTexture9 *)glt->d3dtexture); - else - IDirect3DTexture9_Release((IDirect3DTexture9 *)glt->d3dtexture); - glt->d3dtexture = NULL; - glt->d3dsurface = NULL; -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - break; } } } @@ -907,52 +707,9 @@ static void r_textures_devicerestored(void) continue; switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - HRESULT d3dresult; - if (glt->d3disrendertargetsurface) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateRenderTarget(vid_d3d9dev, glt->tilewidth, glt->tileheight, (D3DFORMAT)glt->d3dformat, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)&glt->d3dsurface, NULL))) - Sys_Error("IDirect3DDevice9_CreateRenderTarget failed!"); - } - else if (glt->d3disdepthstencilsurface) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateDepthStencilSurface(vid_d3d9dev, glt->tilewidth, glt->tileheight, (D3DFORMAT)glt->d3dformat, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)&glt->d3dsurface, NULL))) - Sys_Error("IDirect3DDevice9_CreateDepthStencilSurface failed!"); - } - else if (glt->tiledepth > 1) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateVolumeTexture(vid_d3d9dev, glt->tilewidth, glt->tileheight, glt->tiledepth, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DVolumeTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateVolumeTexture failed!"); - } - else if (glt->sides == 6) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateCubeTexture(vid_d3d9dev, glt->tilewidth, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DCubeTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateCubeTexture failed!"); - } - else - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateTexture(vid_d3d9dev, glt->tilewidth, glt->tileheight, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateTexture failed!"); - } - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - break; } } } @@ -996,6 +753,7 @@ void R_Textures_Frame (void) { #ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT static int old_aniso = 0; + static qboolean first_time_aniso = true; #endif // could do procedural texture animation here, if we keep track of which @@ -1027,11 +785,14 @@ void R_Textures_Frame (void) switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: + // ignore the first difference, any textures loaded by now probably had the same aniso value + if (first_time_aniso) + { + first_time_aniso = false; + break; + } CHECKGLERROR GL_ActiveTexture(0); for (pool = gltexturepoolchain;pool;pool = pool->next) @@ -1051,11 +812,6 @@ void R_Textures_Frame (void) } } break; - case RENDERPATH_D3D9: - case RENDERPATH_D3D10: - case RENDERPATH_D3D11: - case RENDERPATH_SOFT: - break; } } #endif @@ -1191,10 +947,7 @@ static void R_UploadPartialTexture(gltexture_t *glt, const unsigned char *data, switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: { int oldbindtexnum; @@ -1207,35 +960,6 @@ static void R_UploadPartialTexture(gltexture_t *glt, const unsigned char *data, qglBindTexture(gltexturetypeenums[glt->texturetype], oldbindtexnum);CHECKGLERROR } break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - RECT d3drect; - D3DLOCKED_RECT d3dlockedrect; - int y; - memset(&d3drect, 0, sizeof(d3drect)); - d3drect.left = fragx; - d3drect.top = fragy; - d3drect.right = fragx+fragwidth; - d3drect.bottom = fragy+fragheight; - if (IDirect3DTexture9_LockRect((IDirect3DTexture9*)glt->d3dtexture, 0, &d3dlockedrect, &d3drect, 0) == D3D_OK && d3dlockedrect.pBits) - { - for (y = 0;y < fragheight;y++) - memcpy((unsigned char *)d3dlockedrect.pBits + d3dlockedrect.Pitch * y, data + fragwidth*glt->bytesperpixel * y, fragwidth*glt->bytesperpixel); - IDirect3DTexture9_UnlockRect((IDirect3DTexture9*)glt->d3dtexture, 0); - } - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - DPSOFTRAST_Texture_UpdatePartial(glt->texnum, 0, data, fragx, fragy, fragwidth, fragheight); - break; } } @@ -1309,10 +1033,7 @@ static void R_UploadFullTexture(gltexture_t *glt, const unsigned char *data) // do the appropriate upload type... switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: if (glt->texnum) // not renderbuffers { @@ -1405,215 +1126,6 @@ static void R_UploadFullTexture(gltexture_t *glt, const unsigned char *data) qglBindTexture(gltexturetypeenums[glt->texturetype], oldbindtexnum);CHECKGLERROR } break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - if (!(glt->flags & TEXF_RENDERTARGET) && glt->d3dtexture && !glt->d3dsurface) - { - D3DLOCKED_RECT d3dlockedrect; - D3DLOCKED_BOX d3dlockedbox; - switch(glt->texturetype) - { - case GLTEXTURETYPE_2D: - if (IDirect3DTexture9_LockRect((IDirect3DTexture9*)glt->d3dtexture, mip, &d3dlockedrect, NULL, 0) == D3D_OK && d3dlockedrect.pBits) - { - if (prevbuffer) - memcpy(d3dlockedrect.pBits, prevbuffer, width*height*glt->bytesperpixel); - else - memset(d3dlockedrect.pBits, 255, width*height*glt->bytesperpixel); - IDirect3DTexture9_UnlockRect((IDirect3DTexture9*)glt->d3dtexture, mip); - } - mip++; - if ((glt->flags & TEXF_MIPMAP) && prevbuffer) - { - while (width > 1 || height > 1 || depth > 1) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_MipReduce32(prevbuffer, resizebuffer, &width, &height, &depth, 1, 1, 1); - prevbuffer = resizebuffer; - if (IDirect3DTexture9_LockRect((IDirect3DTexture9*)glt->d3dtexture, mip, &d3dlockedrect, NULL, 0) == D3D_OK && d3dlockedrect.pBits) - { - memcpy(d3dlockedrect.pBits, prevbuffer, width*height*glt->bytesperpixel); - IDirect3DTexture9_UnlockRect((IDirect3DTexture9*)glt->d3dtexture, mip); - } - mip++; - } - } - break; - case GLTEXTURETYPE_3D: - if (IDirect3DVolumeTexture9_LockBox((IDirect3DVolumeTexture9*)glt->d3dtexture, mip, &d3dlockedbox, NULL, 0) == D3D_OK && d3dlockedbox.pBits) - { - // we are not honoring the RowPitch or SlicePitch, hopefully this works with all sizes - memcpy(d3dlockedbox.pBits, prevbuffer, width*height*depth*glt->bytesperpixel); - IDirect3DVolumeTexture9_UnlockBox((IDirect3DVolumeTexture9*)glt->d3dtexture, mip); - } - mip++; - if (glt->flags & TEXF_MIPMAP) - { - while (width > 1 || height > 1 || depth > 1) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_MipReduce32(prevbuffer, resizebuffer, &width, &height, &depth, 1, 1, 1); - prevbuffer = resizebuffer; - if (IDirect3DVolumeTexture9_LockBox((IDirect3DVolumeTexture9*)glt->d3dtexture, mip, &d3dlockedbox, NULL, 0) == D3D_OK && d3dlockedbox.pBits) - { - // we are not honoring the RowPitch or SlicePitch, hopefully this works with all sizes - memcpy(d3dlockedbox.pBits, prevbuffer, width*height*depth*glt->bytesperpixel); - IDirect3DVolumeTexture9_UnlockBox((IDirect3DVolumeTexture9*)glt->d3dtexture, mip); - } - mip++; - } - } - break; - case GLTEXTURETYPE_CUBEMAP: - // convert and upload each side in turn, - // from a continuous block of input texels - texturebuffer = (unsigned char *)prevbuffer; - for (i = 0;i < 6;i++) - { - prevbuffer = texturebuffer; - texturebuffer += glt->inputwidth * glt->inputheight * glt->inputdepth * glt->textype->inputbytesperpixel; - if (glt->inputwidth != width || glt->inputheight != height || glt->inputdepth != depth) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_Resample32(prevbuffer, glt->inputwidth, glt->inputheight, glt->inputdepth, resizebuffer, width, height, depth, r_lerpimages.integer); - prevbuffer = resizebuffer; - } - // picmip/max_size - while (width > glt->tilewidth || height > glt->tileheight || depth > glt->tiledepth) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_MipReduce32(prevbuffer, resizebuffer, &width, &height, &depth, glt->tilewidth, glt->tileheight, glt->tiledepth); - prevbuffer = resizebuffer; - } - mip = 0; - if (IDirect3DCubeTexture9_LockRect((IDirect3DCubeTexture9*)glt->d3dtexture, (D3DCUBEMAP_FACES)i, mip, &d3dlockedrect, NULL, 0) == D3D_OK && d3dlockedrect.pBits) - { - memcpy(d3dlockedrect.pBits, prevbuffer, width*height*glt->bytesperpixel); - IDirect3DCubeTexture9_UnlockRect((IDirect3DCubeTexture9*)glt->d3dtexture, (D3DCUBEMAP_FACES)i, mip); - } - mip++; - if (glt->flags & TEXF_MIPMAP) - { - while (width > 1 || height > 1 || depth > 1) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_MipReduce32(prevbuffer, resizebuffer, &width, &height, &depth, 1, 1, 1); - prevbuffer = resizebuffer; - if (IDirect3DCubeTexture9_LockRect((IDirect3DCubeTexture9*)glt->d3dtexture, (D3DCUBEMAP_FACES)i, mip, &d3dlockedrect, NULL, 0) == D3D_OK && d3dlockedrect.pBits) - { - memcpy(d3dlockedrect.pBits, prevbuffer, width*height*glt->bytesperpixel); - IDirect3DCubeTexture9_UnlockRect((IDirect3DCubeTexture9*)glt->d3dtexture, (D3DCUBEMAP_FACES)i, mip); - } - mip++; - } - } - } - break; - } - } - glt->d3daddressw = 0; - if (glt->flags & TEXF_CLAMP) - { - glt->d3daddressu = D3DTADDRESS_CLAMP; - glt->d3daddressv = D3DTADDRESS_CLAMP; - if (glt->tiledepth > 1) - glt->d3daddressw = D3DTADDRESS_CLAMP; - } - else - { - glt->d3daddressu = D3DTADDRESS_WRAP; - glt->d3daddressv = D3DTADDRESS_WRAP; - if (glt->tiledepth > 1) - glt->d3daddressw = D3DTADDRESS_WRAP; - } - glt->d3dmipmaplodbias = 0; - glt->d3dmaxmiplevel = 0; - glt->d3dmaxmiplevelfilter = d3d_filter_nomip ? 0 : glt->d3dmaxmiplevel; - if (glt->flags & TEXF_FORCELINEAR) - { - glt->d3dminfilter = D3DTEXF_LINEAR; - glt->d3dmagfilter = D3DTEXF_LINEAR; - glt->d3dmipfilter = D3DTEXF_POINT; - } - else if (glt->flags & TEXF_FORCENEAREST) - { - glt->d3dminfilter = D3DTEXF_POINT; - glt->d3dmagfilter = D3DTEXF_POINT; - glt->d3dmipfilter = D3DTEXF_POINT; - } - else if (glt->flags & TEXF_MIPMAP) - { - glt->d3dminfilter = d3d_filter_mipmin; - glt->d3dmagfilter = d3d_filter_mipmag; - glt->d3dmipfilter = d3d_filter_mipmix; - } - else - { - glt->d3dminfilter = d3d_filter_flatmin; - glt->d3dmagfilter = d3d_filter_flatmag; - glt->d3dmipfilter = d3d_filter_flatmix; - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - switch(glt->texturetype) - { - case GLTEXTURETYPE_2D: - DPSOFTRAST_Texture_UpdateFull(glt->texnum, prevbuffer); - break; - case GLTEXTURETYPE_3D: - DPSOFTRAST_Texture_UpdateFull(glt->texnum, prevbuffer); - break; - case GLTEXTURETYPE_CUBEMAP: - if (glt->inputwidth != width || glt->inputheight != height || glt->inputdepth != depth) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - unsigned char *combinedbuffer = (unsigned char *)Mem_Alloc(tempmempool, glt->tilewidth*glt->tileheight*glt->tiledepth*glt->sides*glt->bytesperpixel); - // convert and upload each side in turn, - // from a continuous block of input texels - // copy the results into combinedbuffer - texturebuffer = (unsigned char *)prevbuffer; - for (i = 0;i < 6;i++) - { - prevbuffer = texturebuffer; - texturebuffer += glt->inputwidth * glt->inputheight * glt->inputdepth * glt->textype->inputbytesperpixel; - if (glt->inputwidth != width || glt->inputheight != height || glt->inputdepth != depth) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_Resample32(prevbuffer, glt->inputwidth, glt->inputheight, glt->inputdepth, resizebuffer, width, height, depth, r_lerpimages.integer); - prevbuffer = resizebuffer; - } - // picmip/max_size - while (width > glt->tilewidth || height > glt->tileheight || depth > glt->tiledepth) - { - R_MakeResizeBufferBigger(width * height * depth * glt->sides * glt->bytesperpixel); - Image_MipReduce32(prevbuffer, resizebuffer, &width, &height, &depth, glt->tilewidth, glt->tileheight, glt->tiledepth); - prevbuffer = resizebuffer; - } - memcpy(combinedbuffer + i*glt->tilewidth*glt->tileheight*glt->tiledepth*glt->bytesperpixel, prevbuffer, glt->tilewidth*glt->tileheight*glt->tiledepth*glt->bytesperpixel); - } - DPSOFTRAST_Texture_UpdateFull(glt->texnum, combinedbuffer); - Mem_Free(combinedbuffer); - } - else - DPSOFTRAST_Texture_UpdateFull(glt->texnum, prevbuffer); - break; - } - if (glt->flags & TEXF_FORCELINEAR) - DPSOFTRAST_Texture_Filter(glt->texnum, DPSOFTRAST_TEXTURE_FILTER_LINEAR); - else if (glt->flags & TEXF_FORCENEAREST) - DPSOFTRAST_Texture_Filter(glt->texnum, DPSOFTRAST_TEXTURE_FILTER_NEAREST); - else if (glt->flags & TEXF_MIPMAP) - DPSOFTRAST_Texture_Filter(glt->texnum, dpsoftrast_filter_mipmap); - else - DPSOFTRAST_Texture_Filter(glt->texnum, dpsoftrast_filter_nomipmap); - break; } } @@ -1828,96 +1340,11 @@ static rtexture_t *R_SetupTexture(rtexturepool_t *rtexturepool, const char *iden // data may be NULL (blank texture for dynamic rendering) switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: CHECKGLERROR qglGenTextures(1, (GLuint *)&glt->texnum);CHECKGLERROR break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - D3DFORMAT d3dformat; - D3DPOOL d3dpool; - DWORD d3dusage; - HRESULT d3dresult; - d3dusage = 0; - d3dpool = D3DPOOL_MANAGED; - if (flags & TEXF_RENDERTARGET) - { - d3dusage |= D3DUSAGE_RENDERTARGET; - d3dpool = D3DPOOL_DEFAULT; - } - switch(textype) - { - case TEXTYPE_PALETTE: d3dformat = (flags & TEXF_ALPHA) ? D3DFMT_A8R8G8B8 : D3DFMT_X8R8G8B8;break; - case TEXTYPE_RGBA: d3dformat = (flags & TEXF_ALPHA) ? D3DFMT_A8B8G8R8 : D3DFMT_X8B8G8R8;break; - case TEXTYPE_BGRA: d3dformat = (flags & TEXF_ALPHA) ? D3DFMT_A8R8G8B8 : D3DFMT_X8R8G8B8;break; - case TEXTYPE_COLORBUFFER: d3dformat = D3DFMT_A8R8G8B8;break; - case TEXTYPE_COLORBUFFER16F: d3dformat = D3DFMT_A16B16G16R16F;break; - case TEXTYPE_COLORBUFFER32F: d3dformat = D3DFMT_A32B32G32R32F;break; - case TEXTYPE_ALPHA: d3dformat = D3DFMT_A8;break; - default: d3dformat = D3DFMT_A8R8G8B8;Sys_Error("R_LoadTexture: unsupported texture type %i when picking D3DFMT", (int)textype);break; - } - glt->d3dformat = d3dformat; - glt->d3dusage = d3dusage; - glt->d3dpool = d3dpool; - glt->d3disrendertargetsurface = false; - glt->d3disdepthstencilsurface = false; - if (glt->tiledepth > 1) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateVolumeTexture(vid_d3d9dev, glt->tilewidth, glt->tileheight, glt->tiledepth, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DVolumeTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateVolumeTexture failed!"); - } - else if (glt->sides == 6) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateCubeTexture(vid_d3d9dev, glt->tilewidth, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DCubeTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateCubeTexture failed!"); - } - else - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateTexture(vid_d3d9dev, glt->tilewidth, glt->tileheight, glt->miplevels, glt->d3dusage, (D3DFORMAT)glt->d3dformat, (D3DPOOL)glt->d3dpool, (IDirect3DTexture9 **)&glt->d3dtexture, NULL))) - Sys_Error("IDirect3DDevice9_CreateTexture failed!"); - } - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - { - int tflags = 0; - switch(textype) - { - case TEXTYPE_PALETTE: tflags = DPSOFTRAST_TEXTURE_FORMAT_BGRA8;break; - case TEXTYPE_RGBA: tflags = DPSOFTRAST_TEXTURE_FORMAT_RGBA8;break; - case TEXTYPE_BGRA: tflags = DPSOFTRAST_TEXTURE_FORMAT_BGRA8;break; - case TEXTYPE_COLORBUFFER: tflags = DPSOFTRAST_TEXTURE_FORMAT_BGRA8;break; - case TEXTYPE_COLORBUFFER16F: tflags = DPSOFTRAST_TEXTURE_FORMAT_RGBA16F;break; - case TEXTYPE_COLORBUFFER32F: tflags = DPSOFTRAST_TEXTURE_FORMAT_RGBA32F;break; - case TEXTYPE_SHADOWMAP16_COMP: - case TEXTYPE_SHADOWMAP16_RAW: - case TEXTYPE_SHADOWMAP24_COMP: - case TEXTYPE_SHADOWMAP24_RAW: tflags = DPSOFTRAST_TEXTURE_FORMAT_DEPTH;break; - case TEXTYPE_DEPTHBUFFER16: - case TEXTYPE_DEPTHBUFFER24: - case TEXTYPE_DEPTHBUFFER24STENCIL8: tflags = DPSOFTRAST_TEXTURE_FORMAT_DEPTH;break; - case TEXTYPE_ALPHA: tflags = DPSOFTRAST_TEXTURE_FORMAT_ALPHA8;break; - default: Sys_Error("R_LoadTexture: unsupported texture type %i when picking DPSOFTRAST_TEXTURE_FLAGS", (int)textype); - } - if (glt->miplevels > 1) tflags |= DPSOFTRAST_TEXTURE_FLAG_MIPMAP; - if (flags & TEXF_ALPHA) tflags |= DPSOFTRAST_TEXTURE_FLAG_USEALPHA; - if (glt->sides == 6) tflags |= DPSOFTRAST_TEXTURE_FLAG_CUBEMAP; - if (glt->flags & TEXF_CLAMP) tflags |= DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE; - glt->texnum = DPSOFTRAST_Texture_New(tflags, glt->tilewidth, glt->tileheight, glt->tiledepth); - } - break; } R_UploadFullTexture(glt, data); @@ -2000,10 +1427,7 @@ rtexture_t *R_LoadTextureRenderBuffer(rtexturepool_t *rtexturepool, const char * // data may be NULL (blank texture for dynamic rendering) switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: CHECKGLERROR qglGenRenderbuffers(1, (GLuint *)&glt->renderbuffernum);CHECKGLERROR @@ -2012,61 +1436,6 @@ rtexture_t *R_LoadTextureRenderBuffer(rtexturepool_t *rtexturepool, const char * // note we can query the renderbuffer for info with glGetRenderbufferParameteriv for GL_WIDTH, GL_HEIGHt, GL_RED_SIZE, GL_GREEN_SIZE, GL_BLUE_SIZE, GL_GL_ALPHA_SIZE, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_INTERNAL_FORMAT qglBindRenderbuffer(GL_RENDERBUFFER, 0);CHECKGLERROR break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - D3DFORMAT d3dformat; - HRESULT d3dresult; - glt->d3disrendertargetsurface = false; - glt->d3disdepthstencilsurface = false; - switch(textype) - { - case TEXTYPE_COLORBUFFER: d3dformat = D3DFMT_A8R8G8B8;glt->d3disrendertargetsurface = true;break; - case TEXTYPE_COLORBUFFER16F: d3dformat = D3DFMT_A16B16G16R16F;glt->d3disrendertargetsurface = true;break; - case TEXTYPE_COLORBUFFER32F: d3dformat = D3DFMT_A32B32G32R32F;glt->d3disrendertargetsurface = true;break; - case TEXTYPE_DEPTHBUFFER16: d3dformat = D3DFMT_D16;glt->d3disdepthstencilsurface = true;break; - case TEXTYPE_DEPTHBUFFER24: d3dformat = D3DFMT_D24X8;glt->d3disdepthstencilsurface = true;break; - case TEXTYPE_DEPTHBUFFER24STENCIL8: d3dformat = D3DFMT_D24S8;glt->d3disdepthstencilsurface = true;break; - default: d3dformat = D3DFMT_A8R8G8B8;Sys_Error("R_LoadTextureRenderbuffer: unsupported texture type %i when picking D3DFMT", (int)textype);break; - } - glt->d3dformat = d3dformat; - glt->d3dusage = 0; - glt->d3dpool = 0; - if (glt->d3disrendertargetsurface) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateRenderTarget(vid_d3d9dev, glt->tilewidth, glt->tileheight, (D3DFORMAT)glt->d3dformat, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)&glt->d3dsurface, NULL))) - Sys_Error("IDirect3DDevice9_CreateRenderTarget failed!"); - } - else if (glt->d3disdepthstencilsurface) - { - if (FAILED(d3dresult = IDirect3DDevice9_CreateDepthStencilSurface(vid_d3d9dev, glt->tilewidth, glt->tileheight, (D3DFORMAT)glt->d3dformat, D3DMULTISAMPLE_NONE, 0, false, (IDirect3DSurface9 **)&glt->d3dsurface, NULL))) - Sys_Error("IDirect3DDevice9_CreateDepthStencilSurface failed!"); - } - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - { - int tflags = 0; - switch(textype) - { - case TEXTYPE_COLORBUFFER: tflags = DPSOFTRAST_TEXTURE_FORMAT_BGRA8 | DPSOFTRAST_TEXTURE_FLAG_USEALPHA | DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE;break; - case TEXTYPE_COLORBUFFER16F: tflags = DPSOFTRAST_TEXTURE_FORMAT_RGBA16F | DPSOFTRAST_TEXTURE_FLAG_USEALPHA | DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE;break; - case TEXTYPE_COLORBUFFER32F: tflags = DPSOFTRAST_TEXTURE_FORMAT_RGBA32F | DPSOFTRAST_TEXTURE_FLAG_USEALPHA | DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE;break; - case TEXTYPE_DEPTHBUFFER16: - case TEXTYPE_DEPTHBUFFER24: - case TEXTYPE_DEPTHBUFFER24STENCIL8: tflags = DPSOFTRAST_TEXTURE_FORMAT_DEPTH | DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE;break; - default: Sys_Error("R_LoadTextureRenderbuffer: unsupported texture type %i when picking DPSOFTRAST_TEXTURE_FLAGS", (int)textype); - } - glt->texnum = DPSOFTRAST_Texture_New(tflags, glt->tilewidth, glt->tileheight, glt->tiledepth); - } - break; } return (rtexture_t *)glt; @@ -2850,10 +2219,7 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen // create the texture object switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: CHECKGLERROR GL_ActiveTexture(0); @@ -2861,35 +2227,6 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen qglGenTextures(1, (GLuint *)&glt->texnum);CHECKGLERROR qglBindTexture(gltexturetypeenums[glt->texturetype], glt->texnum);CHECKGLERROR break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - D3DFORMAT d3dformat; - D3DPOOL d3dpool; - DWORD d3dusage; - switch(textype) - { - case TEXTYPE_BGRA: d3dformat = (flags & TEXF_ALPHA) ? D3DFMT_A8R8G8B8 : D3DFMT_X8R8G8B8;break; - case TEXTYPE_DXT1: case TEXTYPE_DXT1A: d3dformat = D3DFMT_DXT1;break; - case TEXTYPE_DXT3: d3dformat = D3DFMT_DXT3;break; - case TEXTYPE_DXT5: d3dformat = D3DFMT_DXT5;break; - default: d3dformat = D3DFMT_A8R8G8B8;Host_Error("R_LoadTextureDDSFile: unsupported texture type %i when picking D3DFMT", (int)textype);break; - } - d3dusage = 0; - d3dpool = D3DPOOL_MANAGED; - IDirect3DDevice9_CreateTexture(vid_d3d9dev, glt->tilewidth, glt->tileheight, glt->miplevels, d3dusage, d3dformat, d3dpool, (IDirect3DTexture9 **)&glt->d3dtexture, NULL); - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - glt->texnum = DPSOFTRAST_Texture_New(((glt->flags & TEXF_CLAMP) ? DPSOFTRAST_TEXTURE_FLAG_CLAMPTOEDGE : 0) | (dds_miplevels > 1 ? DPSOFTRAST_TEXTURE_FLAG_MIPMAP : 0), glt->tilewidth, glt->tileheight, glt->tiledepth); - break; } // upload the texture @@ -2919,10 +2256,7 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen } switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: if (bytesperblock) { @@ -2933,33 +2267,6 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen qglTexImage2D(GL_TEXTURE_2D, mip, glt->glinternalformat, upload_mipwidth, upload_mipheight, 0, glt->glformat, glt->gltype, upload_mippixels);CHECKGLERROR } break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - { - D3DLOCKED_RECT d3dlockedrect; - if (IDirect3DTexture9_LockRect((IDirect3DTexture9*)glt->d3dtexture, mip, &d3dlockedrect, NULL, 0) == D3D_OK && d3dlockedrect.pBits) - { - memcpy(d3dlockedrect.pBits, upload_mippixels, mipsize); - IDirect3DTexture9_UnlockRect((IDirect3DTexture9*)glt->d3dtexture, mip); - } - break; - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - if (bytesperblock) - Con_DPrintf("FIXME SOFT %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - else - DPSOFTRAST_Texture_UpdateFull(glt->texnum, upload_mippixels); - // DPSOFTRAST calculates its own mipmaps - mip = dds_miplevels; - break; } if(upload_mippixels != mippixels) Mem_Free(upload_mippixels); @@ -2978,10 +2285,7 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen // after upload we have to set some parameters... switch(vid.renderpath) { - case RENDERPATH_GL11: - case RENDERPATH_GL13: case RENDERPATH_GL20: - case RENDERPATH_GLES1: case RENDERPATH_GLES2: #ifdef GL_TEXTURE_MAX_LEVEL if (dds_miplevels >= 1 && !mipcomplete) @@ -2993,56 +2297,6 @@ rtexture_t *R_LoadTextureDDSFile(rtexturepool_t *rtexturepool, const char *filen GL_SetupTextureParameters(glt->flags, glt->textype->textype, glt->texturetype); qglBindTexture(gltexturetypeenums[glt->texturetype], oldbindtexnum);CHECKGLERROR break; - case RENDERPATH_D3D9: -#ifdef SUPPORTD3D - glt->d3daddressw = 0; - if (glt->flags & TEXF_CLAMP) - { - glt->d3daddressu = D3DTADDRESS_CLAMP; - glt->d3daddressv = D3DTADDRESS_CLAMP; - if (glt->tiledepth > 1) - glt->d3daddressw = D3DTADDRESS_CLAMP; - } - else - { - glt->d3daddressu = D3DTADDRESS_WRAP; - glt->d3daddressv = D3DTADDRESS_WRAP; - if (glt->tiledepth > 1) - glt->d3daddressw = D3DTADDRESS_WRAP; - } - glt->d3dmipmaplodbias = 0; - glt->d3dmaxmiplevel = 0; - glt->d3dmaxmiplevelfilter = 0; - if (glt->flags & TEXF_MIPMAP) - { - glt->d3dminfilter = d3d_filter_mipmin; - glt->d3dmagfilter = d3d_filter_mipmag; - glt->d3dmipfilter = d3d_filter_mipmix; - } - else - { - glt->d3dminfilter = d3d_filter_flatmin; - glt->d3dmagfilter = d3d_filter_flatmag; - glt->d3dmipfilter = d3d_filter_flatmix; - } -#endif - break; - case RENDERPATH_D3D10: - Con_DPrintf("FIXME D3D10 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_D3D11: - Con_DPrintf("FIXME D3D11 %s:%i %s\n", __FILE__, __LINE__, __FUNCTION__); - break; - case RENDERPATH_SOFT: - if (glt->flags & TEXF_FORCELINEAR) - DPSOFTRAST_Texture_Filter(glt->texnum, DPSOFTRAST_TEXTURE_FILTER_LINEAR); - else if (glt->flags & TEXF_FORCENEAREST) - DPSOFTRAST_Texture_Filter(glt->texnum, DPSOFTRAST_TEXTURE_FILTER_NEAREST); - else if (glt->flags & TEXF_MIPMAP) - DPSOFTRAST_Texture_Filter(glt->texnum, dpsoftrast_filter_mipmap); - else - DPSOFTRAST_Texture_Filter(glt->texnum, dpsoftrast_filter_nomipmap); - break; } Mem_Free(dds); @@ -3073,7 +2327,7 @@ void R_UpdateTexture(rtexture_t *rt, const unsigned char *data, int x, int y, in Host_Error("R_UpdateTexture: no data supplied"); if (glt == NULL) Host_Error("R_UpdateTexture: no texture supplied"); - if (!glt->texnum && !glt->d3dtexture) + if (!glt->texnum) { Con_DPrintf("R_UpdateTexture: texture %p \"%s\" in pool %p has not been uploaded yet\n", (void *)glt, glt->identifier, (void *)glt->pool); return; @@ -3136,7 +2390,7 @@ int R_RealGetTexture(rtexture_t *rt) return glt->texnum; } else - return 0; + return r_texture_white->texnum; } void R_ClearTexture (rtexture_t *rt)