Ričardas Barkauskas : ddraw: Pass an object instead of iface to helper function CreateSurface.

Alexandre Julliard julliard at winehq.org
Mon Jun 6 15:19:11 CDT 2011


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

Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date:   Sat Jun  4 15:33:23 2011 +0300

ddraw: Pass an object instead of iface to helper function CreateSurface.

---

 dlls/ddraw/ddraw.c |   46 +++++++++++++++++++++++++++-------------------
 1 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 9c32723..8b39147 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3045,7 +3045,7 @@ static HRESULT ddraw_create_gdi_swapchain(IDirectDrawImpl *ddraw, IDirectDrawSur
  *
  *****************************************************************************/
 static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD,
-        IDirectDrawSurface7 **Surf, IUnknown *UnkOuter)
+        IDirectDrawSurfaceImpl **Surf, IUnknown *UnkOuter)
 {
     IDirectDrawSurfaceImpl *object = NULL;
     HRESULT hr;
@@ -3310,7 +3310,7 @@ static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD,
     }
     object->is_complex_root = TRUE;
 
-    *Surf = (IDirectDrawSurface7 *)object;
+    *Surf = object;
 
     /* Create Additional surfaces if necessary
      * This applies to Primary surfaces which have a back buffer count
@@ -3434,6 +3434,8 @@ static HRESULT WINAPI ddraw7_CreateSurface(IDirectDraw7 *iface, DDSURFACEDESC2 *
         IDirectDrawSurface7 **surface, IUnknown *outer_unknown)
 {
     IDirectDrawImpl *This = impl_from_IDirectDraw7(iface);
+    IDirectDrawSurfaceImpl *impl;
+    HRESULT hr;
 
     TRACE("iface %p, surface_desc %p, surface %p, outer_unknown %p.\n",
             iface, surface_desc, surface, outer_unknown);
@@ -3456,7 +3458,16 @@ static HRESULT WINAPI ddraw7_CreateSurface(IDirectDraw7 *iface, DDSURFACEDESC2 *
         return DDERR_INVALIDCAPS;
     }
 
-    return CreateSurface(This, surface_desc, surface, outer_unknown);
+    hr = CreateSurface(This, surface_desc, &impl, outer_unknown);
+    if (FAILED(hr))
+    {
+        *surface = NULL;
+        return hr;
+    }
+
+    *surface = (IDirectDrawSurface7 *)impl;
+
+    return hr;
 }
 
 static HRESULT WINAPI ddraw4_CreateSurface(IDirectDraw4 *iface,
@@ -3487,16 +3498,19 @@ static HRESULT WINAPI ddraw4_CreateSurface(IDirectDraw4 *iface,
         return DDERR_INVALIDCAPS;
     }
 
-    hr = CreateSurface(This, surface_desc, (IDirectDrawSurface7 **)surface, outer_unknown);
-    impl = (IDirectDrawSurfaceImpl *)*surface;
-    if (SUCCEEDED(hr) && impl)
+    hr = CreateSurface(This, surface_desc, &impl, outer_unknown);
+    if (FAILED(hr))
     {
-        ddraw_set_surface_version(impl, 4);
-        IDirectDraw7_Release(&This->IDirectDraw7_iface);
-        IDirectDraw4_AddRef(iface);
-        impl->ifaceToRelease = (IUnknown *)iface;
+        *surface = NULL;
+        return hr;
     }
 
+    *surface = (IDirectDrawSurface4 *)impl;
+    ddraw_set_surface_version(impl, 4);
+    IDirectDraw7_Release(&This->IDirectDraw7_iface);
+    IDirectDraw4_AddRef(iface);
+    impl->ifaceToRelease = (IUnknown *)iface;
+
     return hr;
 }
 
@@ -3504,7 +3518,6 @@ static HRESULT WINAPI ddraw3_CreateSurface(IDirectDraw3 *iface, DDSURFACEDESC *s
         IDirectDrawSurface **surface, IUnknown *outer_unknown)
 {
     IDirectDrawImpl *This = impl_from_IDirectDraw3(iface);
-    IDirectDrawSurface7 *surface7;
     IDirectDrawSurfaceImpl *impl;
     HRESULT hr;
 
@@ -3529,14 +3542,13 @@ static HRESULT WINAPI ddraw3_CreateSurface(IDirectDraw3 *iface, DDSURFACEDESC *s
         return DDERR_INVALIDCAPS;
     }
 
-    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &surface7, outer_unknown);
+    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &impl, outer_unknown);
     if (FAILED(hr))
     {
         *surface = NULL;
         return hr;
     }
 
-    impl = (IDirectDrawSurfaceImpl *)surface7;
     *surface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_iface;
     ddraw_set_surface_version(impl, 3);
     IDirectDraw7_Release(&This->IDirectDraw7_iface);
@@ -3550,7 +3562,6 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface,
         DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
 {
     IDirectDrawImpl *This = impl_from_IDirectDraw2(iface);
-    IDirectDrawSurface7 *surface7;
     IDirectDrawSurfaceImpl *impl;
     HRESULT hr;
 
@@ -3575,14 +3586,13 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface,
         return DDERR_INVALIDCAPS;
     }
 
-    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &surface7, outer_unknown);
+    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &impl, outer_unknown);
     if (FAILED(hr))
     {
         *surface = NULL;
         return hr;
     }
 
-    impl = (IDirectDrawSurfaceImpl *)surface7;
     *surface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_iface;
     ddraw_set_surface_version(impl, 2);
     IDirectDraw7_Release(&This->IDirectDraw7_iface);
@@ -3595,7 +3605,6 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface,
         DDSURFACEDESC *surface_desc, IDirectDrawSurface **surface, IUnknown *outer_unknown)
 {
     IDirectDrawImpl *This = impl_from_IDirectDraw(iface);
-    IDirectDrawSurface7 *surface7;
     IDirectDrawSurfaceImpl *impl;
     HRESULT hr;
 
@@ -3611,14 +3620,13 @@ static HRESULT WINAPI ddraw1_CreateSurface(IDirectDraw *iface,
     /* Remove front buffer flag, this causes failure in v7, and its added to normal
      * primaries anyway. */
     surface_desc->ddsCaps.dwCaps &= ~DDSCAPS_FRONTBUFFER;
-    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &surface7, outer_unknown);
+    hr = CreateSurface(This, (DDSURFACEDESC2 *)surface_desc, &impl, outer_unknown);
     if (FAILED(hr))
     {
         *surface = NULL;
         return hr;
     }
 
-    impl = (IDirectDrawSurfaceImpl *)surface7;
     *surface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_iface;
     ddraw_set_surface_version(impl, 1);
     IDirectDraw7_Release(&This->IDirectDraw7_iface);




More information about the wine-cvs mailing list