[DDRAW] fix 2D in D3D device (resent)
Christian Costa
titan.costa at wanadoo.fr
Tue Oct 11 16:29:35 CDT 2005
Hi,
This time w/o the small spaces clean-up.
Changelog:
Disable depth test when there is no Z buffer attached.
Initialise texture states at creation instead of when tex name is
generated.
Christian Costa titan.costa at wanadoo.fr
-------------- next part --------------
Index: dlls/ddraw/device_opengl.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/device_opengl.c,v
retrieving revision 1.9
diff -u -r1.9 device_opengl.c
--- dlls/ddraw/device_opengl.c 25 Sep 2005 15:18:18 -0000 1.9
+++ dlls/ddraw/device_opengl.c 5 Oct 2005 20:51:45 -0000
@@ -1325,6 +1325,7 @@
IDirect3DDeviceGLImpl* glThis = (IDirect3DDeviceGLImpl*) This;
int num_active_stages = 0;
int num_tex_index = GET_TEXCOUNT_FROM_FVF(d3dvtVertexType);
+ BOOL reenable_depth_test = FALSE;
/* I put the trace before the various locks... So as to better understand where locks occur :-) */
if (TRACE_ON(ddraw)) {
@@ -1349,9 +1350,12 @@
hr = IDirectDrawSurface7_GetAttachedSurface(ICOM_INTERFACE(This->surface, IDirectDrawSurface7),
(DDSCAPS2 *) &zbuf_caps, &zbuf);
- if (!FAILED(hr)) {
+ if (SUCCEEDED(hr)) {
This->current_zbuffer = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, zbuf);
IDirectDrawSurface7_Release(zbuf);
+ } else if (glThis->depth_test) {
+ glDisable(GL_DEPTH_TEST);
+ reenable_depth_test = TRUE;
}
}
if (This->current_zbuffer != NULL) {
@@ -1615,6 +1619,9 @@
/* Whatever the case, disable the color material stuff */
glDisable(GL_COLOR_MATERIAL);
+ if (reenable_depth_test)
+ glEnable(GL_DEPTH_TEST);
+
LEAVE_GL();
TRACE("End\n");
Index: dlls/ddraw/texture.c
===================================================================
RCS file: /home/wine/wine/dlls/ddraw/texture.c,v
retrieving revision 1.4
diff -u -r1.4 texture.c
--- dlls/ddraw/texture.c 3 Aug 2005 21:25:11 -0000 1.4
+++ dlls/ddraw/texture.c 5 Oct 2005 20:51:49 -0000
@@ -903,12 +903,14 @@
private->tex_name = 0;
if (surf->mipmap_level == 0) {
private->main = NULL;
+ private->__global_dirty_flag = SURFACE_MEMORY_DIRTY;
private->global_dirty_flag = &(private->__global_dirty_flag);
} else {
private->main = main;
private->global_dirty_flag = &(((IDirect3DTextureGLImpl *) (private->main->tex_private))->__global_dirty_flag);
}
private->initial_upload_done = FALSE;
+ private->dirty_flag = SURFACE_MEMORY_DIRTY;
}
return D3D_OK;
@@ -925,15 +927,11 @@
glGenTextures(1, &(private->tex_name));
if (private->tex_name == 0) ERR("Error at creation of OpenGL texture ID !\n");
TRACE(" GL texture id is : %d.\n", private->tex_name);
- private->__global_dirty_flag = SURFACE_MEMORY_DIRTY;
} else {
private->tex_name = gltex_get_tex_name(private->main);
TRACE(" GL texture id reusing id %d from surface %p (private at %p)).\n", private->tex_name, private->main, private->main->tex_private);
}
LEAVE_GL();
-
- /* And set the dirty flag accordingly */
- private->dirty_flag = SURFACE_MEMORY_DIRTY;
}
return ((IDirect3DTextureGLImpl *) (surf->tex_private))->tex_name;
}
More information about the wine-patches
mailing list