Henri Verbeet : ddraw: Update DefaultSurfaceType if we had to fallback to a wined3d object without 3D support .

Alexandre Julliard julliard at winehq.org
Wed Jan 16 13:47:42 CST 2013


Module: wine
Branch: master
Commit: 56b256cb774efb3842cc15e945f878b63da5288e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=56b256cb774efb3842cc15e945f878b63da5288e

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Jan 16 08:51:48 2013 +0100

ddraw: Update DefaultSurfaceType if we had to fallback to a wined3d object without 3D support.

---

 dlls/ddraw/ddraw.c |   10 ++++++++--
 dlls/ddraw/main.c  |   10 ++++++++--
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index a04de34..32f9c5a 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -5243,6 +5243,7 @@ static const struct wined3d_device_parent_ops ddraw_wined3d_device_parent_ops =
 
 HRESULT ddraw_init(struct ddraw *ddraw, enum wined3d_device_type device_type)
 {
+    DWORD flags;
     HRESULT hr;
 
     ddraw->IDirectDraw7_iface.lpVtbl = &ddraw7_vtbl;
@@ -5257,15 +5258,20 @@ HRESULT ddraw_init(struct ddraw *ddraw, enum wined3d_device_type device_type)
     ddraw->numIfaces = 1;
     ddraw->ref7 = 1;
 
-    if (!(ddraw->wined3d = wined3d_create(7, WINED3D_LEGACY_DEPTH_BIAS)))
+    flags = WINED3D_LEGACY_DEPTH_BIAS;
+    if (DefaultSurfaceType != WINED3D_SURFACE_TYPE_OPENGL)
+        flags |= WINED3D_NO3D;
+
+    if (!(ddraw->wined3d = wined3d_create(7, flags)))
     {
-        if (!(ddraw->wined3d = wined3d_create(7, WINED3D_LEGACY_DEPTH_BIAS | WINED3D_NO3D)))
+        if ((flags & WINED3D_NO3D) || !(ddraw->wined3d = wined3d_create(7, flags | WINED3D_NO3D)))
         {
             WARN("Failed to create a wined3d object.\n");
             return E_FAIL;
         }
 
         WARN("Created a wined3d object without 3D support.\n");
+        DefaultSurfaceType = WINED3D_SURFACE_TYPE_GDI;
     }
 
     hr = wined3d_device_create(ddraw->wined3d, WINED3DADAPTER_DEFAULT, device_type,
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index e79b471..819dc7f 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -371,6 +371,7 @@ HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA callback, void *context)
 HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA callback, void *context, DWORD flags)
 {
     struct wined3d *wined3d;
+    DWORD wined3d_flags;
 
     TRACE("callback %p, context %p, flags %#x.\n", callback, context, flags);
 
@@ -382,16 +383,21 @@ HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA callback, void *contex
     if (flags)
         FIXME("flags 0x%08x not handled\n", flags);
 
+    wined3d_flags = WINED3D_LEGACY_DEPTH_BIAS;
+    if (DefaultSurfaceType != WINED3D_SURFACE_TYPE_OPENGL)
+        wined3d_flags |= WINED3D_NO3D;
+
     TRACE("Enumerating ddraw interfaces\n");
-    if (!(wined3d = wined3d_create(7, WINED3D_LEGACY_DEPTH_BIAS)))
+    if (!(wined3d = wined3d_create(7, wined3d_flags)))
     {
-        if (!(wined3d = wined3d_create(7, WINED3D_LEGACY_DEPTH_BIAS | WINED3D_NO3D)))
+        if ((wined3d_flags & WINED3D_NO3D) || !(wined3d = wined3d_create(7, wined3d_flags | WINED3D_NO3D)))
         {
             WARN("Failed to create a wined3d object.\n");
             return E_FAIL;
         }
 
         WARN("Created a wined3d object without 3D support.\n");
+        DefaultSurfaceType = WINED3D_SURFACE_TYPE_GDI;
     }
 
     __TRY




More information about the wine-cvs mailing list