[D3D] Some small fixes
Lionel Ulmer
lionel.ulmer at free.fr
Tue Jun 3 08:30:22 CDT 2003
Well, while trying to fix the color keying in Motoracer2, I found these
small bugs.
Anyway, the more I look at this, the more the fact that color keying works
in some applications is a plain miracle :-) (and to do a proper fix will
require some big ugly magic :-/ ).
Changelog:
- small TRACEing fix
- fix bug in texture upload (I wonder how I missed this :-/ )
- improve the D3D1/2 texture mapping modes
--
Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
--- dlls/ddraw_CVS/d3ddevice/mesa.c Tue Jun 3 12:08:08 2003
+++ dlls/ddraw/d3ddevice/mesa.c Tue Jun 3 12:55:26 2003
@@ -1806,7 +1806,7 @@
} break;
case D3DTSS_MAXMIPLEVEL:
- TRACE(" Stage type : D3DTSS_MAXMIPLEVEL => 0 (disabled) \n");
+ TRACE(" Stage type : D3DTSS_MAXMIPLEVEL => %ld\n", dwState);
break;
case D3DTSS_BORDERCOLOR:
--- dlls/ddraw_CVS/mesa.c Tue Jun 3 12:08:08 2003
+++ dlls/ddraw/mesa.c Tue Jun 3 15:18:30 2003
@@ -244,19 +244,31 @@
convert_D3D_blendop_to_GL(lpStateBlock->render_state[D3DRENDERSTATE_DESTBLEND - 1]));
break;
- case D3DRENDERSTATE_TEXTUREMAPBLEND: /* 21 */
+ case D3DRENDERSTATE_TEXTUREMAPBLEND: { /* 21 */
+ IDirect3DDevice7 *d3ddev = ICOM_INTERFACE(This, IDirect3DDevice7);
+
switch ((D3DTEXTUREBLEND) dwRenderState) {
case D3DTBLEND_DECAL:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+ break;
+ case D3DTBLEND_DECALALPHA:
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
break;
case D3DTBLEND_MODULATE:
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ break;
case D3DTBLEND_MODULATEALPHA:
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
+ IDirect3DDevice7_SetTextureStageState(d3ddev, 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
break;
default:
ERR("Unhandled texture environment %ld !\n",dwRenderState);
}
- break;
+ } break;
case D3DRENDERSTATE_CULLMODE: /* 22 */
switch ((D3DCULL) dwRenderState) {
@@ -980,7 +992,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
More information about the wine-patches
mailing list