Henri Verbeet : ddraw: Introduce a separate function for texture creation.

Alexandre Julliard julliard at winehq.org
Wed Apr 20 11:05:16 CDT 2011


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Apr 19 20:05:50 2011 +0200

ddraw: Introduce a separate function for texture creation.

---

 dlls/ddraw/ddraw.c         |   42 ++----------------------------------------
 dlls/ddraw/ddraw_private.h |    1 +
 dlls/ddraw/surface.c       |   28 ++++++++++++++++++++++++++++
 3 files changed, 31 insertions(+), 40 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index cf9c4c3..c2ea683 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3395,48 +3395,10 @@ static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD,
     object->ifaceToRelease = (IUnknown *)&ddraw->IDirectDraw7_iface;
 
     /* Create a WineD3DTexture if a texture was requested */
-    if(desc2.ddsCaps.dwCaps & DDSCAPS_TEXTURE)
+    if (desc2.ddsCaps.dwCaps & DDSCAPS_TEXTURE)
     {
-        enum wined3d_format_id Format;
-        UINT levels;
-        WINED3DPOOL Pool = WINED3DPOOL_DEFAULT;
-
         ddraw->tex_root = object;
-
-        if(desc2.ddsCaps.dwCaps & DDSCAPS_MIPMAP)
-        {
-            /* a mipmap is created, create enough levels */
-            levels = desc2.u2.dwMipMapCount;
-        }
-        else
-        {
-            /* No mipmap is created, create one level */
-            levels = 1;
-        }
-
-        /* DDSCAPS_SYSTEMMEMORY textures are in WINED3DPOOL_SYSTEMMEM */
-        if(DDSD->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)
-        {
-            Pool = WINED3DPOOL_SYSTEMMEM;
-        }
-        /* Should I forward the MANAGED cap to the managed pool ? */
-
-        /* Get the format. It's set already by CreateNewSurface */
-        Format = PixelFormat_DD2WineD3D(&object->surface_desc.u4.ddpfPixelFormat);
-
-        /* The surfaces are already created, the callback only
-         * passes the IWineD3DSurface to WineD3D
-         */
-        if(desc2.ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP)
-        {
-            hr = IWineD3DDevice_CreateCubeTexture(ddraw->wineD3DDevice, DDSD->dwWidth, levels, 0,
-                    Format, Pool, object, &ddraw_null_wined3d_parent_ops, &object->wined3d_texture);
-        }
-        else
-        {
-            hr = IWineD3DDevice_CreateTexture(ddraw->wineD3DDevice, DDSD->dwWidth, DDSD->dwHeight,
-                    levels, 0, Format, Pool, object, &ddraw_null_wined3d_parent_ops, &object->wined3d_texture);
-        }
+        ddraw_surface_create_texture(object);
         ddraw->tex_root = NULL;
     }
 
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 5cc09dd..4c5d4cb 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -219,6 +219,7 @@ struct IDirectDrawSurfaceImpl
     DWORD                   Handle;
 };
 
+HRESULT ddraw_surface_create_texture(IDirectDrawSurfaceImpl *surface) DECLSPEC_HIDDEN;
 void ddraw_surface_destroy(IDirectDrawSurfaceImpl *surface) DECLSPEC_HIDDEN;
 HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddraw,
         DDSURFACEDESC2 *desc, UINT mip_level, WINED3DSURFTYPE surface_type) DECLSPEC_HIDDEN;
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index c256819..40fd797 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -3490,6 +3490,34 @@ static const struct IDirect3DTextureVtbl d3d_texture1_vtbl =
     d3d_texture1_Unload,
 };
 
+HRESULT ddraw_surface_create_texture(IDirectDrawSurfaceImpl *surface)
+{
+    const DDSURFACEDESC2 *desc = &surface->surface_desc;
+    enum wined3d_format_id format;
+    WINED3DPOOL pool;
+    UINT levels;
+
+    if (desc->ddsCaps.dwCaps & DDSCAPS_MIPMAP)
+        levels = desc->u2.dwMipMapCount;
+    else
+        levels = 1;
+
+    /* DDSCAPS_SYSTEMMEMORY textures are in WINED3DPOOL_SYSTEMMEM.
+     * Should I forward the MANAGED cap to the managed pool? */
+    if (desc->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY)
+        pool = WINED3DPOOL_SYSTEMMEM;
+    else
+        pool = WINED3DPOOL_DEFAULT;
+
+    format = PixelFormat_DD2WineD3D(&surface->surface_desc.u4.ddpfPixelFormat);
+    if (desc->ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP)
+        return IWineD3DDevice_CreateCubeTexture(surface->ddraw->wineD3DDevice, desc->dwWidth,
+                levels, 0, format, pool, surface, &ddraw_null_wined3d_parent_ops, &surface->wined3d_texture);
+    else
+        return IWineD3DDevice_CreateTexture(surface->ddraw->wineD3DDevice, desc->dwWidth, desc->dwHeight,
+                levels, 0, format, pool, surface, &ddraw_null_wined3d_parent_ops, &surface->wined3d_texture);
+}
+
 HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddraw,
         DDSURFACEDESC2 *desc, UINT mip_level, WINED3DSURFTYPE surface_type)
 {




More information about the wine-cvs mailing list