From 50fbe7330e03d8db4641579580def55ff85a9325 Mon Sep 17 00:00:00 2001 From: Lionel Ulmer Date: Tue, 5 Aug 2003 19:18:19 +0000 Subject: [PATCH] Support the mimap lod bias extension. --- dlls/ddraw/d3ddevice/mesa.c | 17 +++++++++++++++-- dlls/ddraw/gl_api.h | 1 + dlls/ddraw/gl_private.h | 5 ++++- dlls/ddraw/mesa.c | 6 ++++++ dlls/ddraw/mesa_private.h | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c index 8d6ecbe1a9d..af33045168c 100644 --- a/dlls/ddraw/d3ddevice/mesa.c +++ b/dlls/ddraw/d3ddevice/mesa.c @@ -1953,11 +1953,12 @@ GL_IDirect3DDeviceImpl_7_3T_SetTextureStageState(LPDIRECT3DDEVICE7 iface, D3DVALUE value = *((D3DVALUE *) &dwState); BOOLEAN handled = TRUE; - if (value != 0.0) + if ((value != 0.0) && (GL_extensions.mipmap_lodbias == FALSE)) handled = FALSE; if (handled) { TRACE(" Stage type : D3DTSS_MIPMAPLODBIAS => %f\n", value); + glTexEnvf(GL_TEXTURE_FILTER_CONTROL_WINE, GL_TEXTURE_LOD_BIAS_WINE, value); } else { FIXME(" Unhandled stage type : D3DTSS_MIPMAPLODBIAS => %f\n", value); } @@ -3770,7 +3771,11 @@ static void fill_opengl_primcaps(D3DPRIMCAPS *pc) pc->dwMiscCaps = D3DPMISCCAPS_CONFORMANT | D3DPMISCCAPS_CULLCCW | D3DPMISCCAPS_CULLCW | D3DPMISCCAPS_LINEPATTERNREP | D3DPMISCCAPS_MASKPLANES | D3DPMISCCAPS_MASKZ; pc->dwRasterCaps = D3DPRASTERCAPS_DITHER | D3DPRASTERCAPS_FOGRANGE | D3DPRASTERCAPS_FOGTABLE | - D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZTEST | D3DPRASTERCAPS_SUBPIXEL; + D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZTEST | D3DPRASTERCAPS_SUBPIXEL | + D3DPRASTERCAPS_ZFOG; + if (GL_extensions.mipmap_lodbias == TRUE) { + pc->dwRasterCaps |= D3DPRASTERCAPS_MIPMAPLODBIAS; + } pc->dwZCmpCaps = D3DPCMPCAPS_ALWAYS | D3DPCMPCAPS_EQUAL | D3DPCMPCAPS_GREATER | D3DPCMPCAPS_GREATEREQUAL | D3DPCMPCAPS_LESS | D3DPCMPCAPS_LESSEQUAL | D3DPCMPCAPS_NEVER | D3DPCMPCAPS_NOTEQUAL; pc->dwSrcBlendCaps = D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_DESTCOLOR | D3DPBLENDCAPS_INVDESTCOLOR | @@ -3938,6 +3943,14 @@ d3ddevice_init_at_startup(void *gl_handle) TRACE(" - mirrored repeat\n"); GL_extensions.mirrored_repeat = TRUE; } + + /* Texture LOD Bias : + - GL_EXT_texture_lod_bias + */ + if (strstr(glExtensions, "GL_EXT_texture_lod_bias")) { + TRACE(" - texture lod bias\n"); + GL_extensions.mipmap_lodbias = TRUE; + } /* Fill the D3D capabilities according to what GL tells us... */ fill_caps(); diff --git a/dlls/ddraw/gl_api.h b/dlls/ddraw/gl_api.h index 71086d6d4e7..9e95fd01734 100644 --- a/dlls/ddraw/gl_api.h +++ b/dlls/ddraw/gl_api.h @@ -91,6 +91,7 @@ GL_API_FUNCTION(glStencilMask) GL_API_FUNCTION(glStencilOp) GL_API_FUNCTION(glTexCoord2f) GL_API_FUNCTION(glTexCoord2fv) +GL_API_FUNCTION(glTexEnvf) GL_API_FUNCTION(glTexEnvfv) GL_API_FUNCTION(glTexEnvi) GL_API_FUNCTION(glTexImage2D) diff --git a/dlls/ddraw/gl_private.h b/dlls/ddraw/gl_private.h index 4948fec1437..f8b4df364a1 100644 --- a/dlls/ddraw/gl_private.h +++ b/dlls/ddraw/gl_private.h @@ -54,7 +54,9 @@ Note: this is perfectly 'legal' as the three variants of the enum have exactly the same value */ -#define GL_MIRRORED_REPEAT_WINE 0x8370 +#define GL_MIRRORED_REPEAT_WINE 0x8370 +#define GL_TEXTURE_FILTER_CONTROL_WINE 0x8500 +#define GL_TEXTURE_LOD_BIAS_WINE 0x8501 #ifndef GLPRIVATE_NO_REDEFINE @@ -123,6 +125,7 @@ #define glStencilOp pglStencilOp #define glTexCoord2f pglTexCoord2f #define glTexCoord2fv pglTexCoord2fv +#define glTexEnvf pglTexEnvf #define glTexEnvfv pglTexEnvfv #define glTexEnvi pglTexEnvi #define glTexImage2D pglTexImage2D diff --git a/dlls/ddraw/mesa.c b/dlls/ddraw/mesa.c index 15205e9baad..e144e928c20 100644 --- a/dlls/ddraw/mesa.c +++ b/dlls/ddraw/mesa.c @@ -400,6 +400,12 @@ void set_render_state(IDirect3DDeviceImpl* This, glThis->blending = dwRenderState; break; + case D3DRENDERSTATE_MIPMAPLODBIAS: /* 46 */ + IDirect3DDevice7_SetTextureStageState(ICOM_INTERFACE(This, IDirect3DDevice7), + 0, D3DTSS_MIPMAPLODBIAS, + dwRenderState); + break; + case D3DRENDERSTATE_ZBIAS: /* 47 */ /* This is a tad bit hacky.. But well, no idea how to do it better in OpenGL :-/ */ if (dwRenderState == 0) { diff --git a/dlls/ddraw/mesa_private.h b/dlls/ddraw/mesa_private.h index ffe15794f65..f0dde08e18a 100644 --- a/dlls/ddraw/mesa_private.h +++ b/dlls/ddraw/mesa_private.h @@ -162,6 +162,7 @@ typedef struct { typedef struct { /* Mirrored Repeat */ BOOLEAN mirrored_repeat; + BOOLEAN mipmap_lodbias; } GL_EXTENSIONS_LIST; extern GL_EXTENSIONS_LIST GL_extensions; -- 2.11.4.GIT