Henri Verbeet : wined3d: Add a separate function for wined3d object initialization.

Alexandre Julliard julliard at winehq.org
Mon Apr 5 11:22:58 CDT 2010


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Sun Apr  4 19:51:37 2010 +0200

wined3d: Add a separate function for wined3d object initialization.

---

 dlls/wined3d/directx.c         |   24 ++++++++++++++++++++++--
 dlls/wined3d/wined3d_main.c    |   40 ++++++++++++++++++++--------------------
 dlls/wined3d/wined3d_private.h |    4 +---
 3 files changed, 43 insertions(+), 25 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index bddb40e..9a2034b 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -5020,7 +5020,7 @@ static void fillGLAttribFuncs(const struct wined3d_gl_info *gl_info)
     }
 }
 
-BOOL InitAdapters(IWineD3DImpl *This)
+static BOOL InitAdapters(IWineD3DImpl *This)
 {
     static HMODULE mod_gl;
     BOOL ret;
@@ -5318,7 +5318,7 @@ nogl_adapter:
  * IWineD3D VTbl follows
  **********************************************************/
 
-const IWineD3DVtbl IWineD3D_Vtbl =
+static const struct IWineD3DVtbl IWineD3D_Vtbl =
 {
     /* IUnknown */
     IWineD3DImpl_QueryInterface,
@@ -5348,3 +5348,23 @@ const struct wined3d_parent_ops wined3d_null_parent_ops =
 {
     wined3d_null_wined3d_object_destroyed,
 };
+
+HRESULT wined3d_init(IWineD3DImpl *wined3d, UINT version, IUnknown *parent)
+{
+    wined3d->lpVtbl = &IWineD3D_Vtbl;
+    wined3d->dxVersion = version;
+    wined3d->ref = 1;
+    wined3d->parent = parent;
+
+    if (!InitAdapters(wined3d))
+    {
+        WARN("Failed to initialize adapters.\n");
+        if (version > 7)
+        {
+            MESSAGE("Direct3D%u is not available without OpenGL.\n", version);
+            return E_FAIL;
+        }
+    }
+
+    return WINED3D_OK;
+}
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index e226749..2a96698 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -75,27 +75,27 @@ wined3d_settings_t wined3d_settings =
     FALSE           /* Disable multisampling for now due to Nvidia driver bugs which happens for some users */
 };
 
-IWineD3D* WINAPI WineDirect3DCreate(UINT dxVersion, IUnknown *parent) {
-    IWineD3DImpl* object;
+IWineD3D * WINAPI WineDirect3DCreate(UINT version, IUnknown *parent)
+{
+    IWineD3DImpl *object;
+    HRESULT hr;
 
-    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DImpl));
-    object->lpVtbl = &IWineD3D_Vtbl;
-    object->dxVersion = dxVersion;
-    object->ref = 1;
-    object->parent = parent;
+    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+    if (!object)
+    {
+        ERR("Failed to allocate wined3d object memory.\n");
+        return NULL;
+    }
 
-    if (!InitAdapters(object))
+    hr = wined3d_init(object, version, parent);
+    if (FAILED(hr))
     {
-        WARN("Failed to initialize direct3d adapters, Direct3D will not be available\n");
-        if (dxVersion > 7)
-        {
-            ERR("Direct3D%d is not available without opengl\n", dxVersion);
-            HeapFree(GetProcessHeap(), 0, object);
-            return NULL;
-        }
+        WARN("Failed to initialize wined3d object, hr %#x.\n", hr);
+        HeapFree(GetProcessHeap(), 0, object);
+        return NULL;
     }
 
-    TRACE("Created WineD3D object @ %p for d3d%d support\n", object, dxVersion);
+    TRACE("Created wined3d object %p for d3d%d support.\n", object, version);
 
     return (IWineD3D *)object;
 }
@@ -120,7 +120,7 @@ static void CDECL wined3d_do_nothing(void)
 {
 }
 
-static BOOL wined3d_init(HINSTANCE hInstDLL)
+static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
 {
     DWORD wined3d_context_tls_idx;
     HMODULE mod;
@@ -333,7 +333,7 @@ static BOOL wined3d_init(HINSTANCE hInstDLL)
     return TRUE;
 }
 
-static BOOL wined3d_destroy(HINSTANCE hInstDLL)
+static BOOL wined3d_dll_destroy(HINSTANCE hInstDLL)
 {
     DWORD wined3d_context_tls_idx = context_get_tls_idx();
     unsigned int i;
@@ -473,10 +473,10 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
     switch (fdwReason)
     {
         case DLL_PROCESS_ATTACH:
-            return wined3d_init(hInstDLL);
+            return wined3d_dll_init(hInstDLL);
 
         case DLL_PROCESS_DETACH:
-            return wined3d_destroy(hInstDLL);
+            return wined3d_dll_destroy(hInstDLL);
 
         case DLL_THREAD_DETACH:
         {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 3ab732b..038d784 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1567,11 +1567,9 @@ typedef struct IWineD3DImpl
     struct wined3d_adapter adapters[1];
 } IWineD3DImpl;
 
-extern const IWineD3DVtbl IWineD3D_Vtbl DECLSPEC_HIDDEN;
-
+HRESULT wined3d_init(IWineD3DImpl *wined3d, UINT version, IUnknown *parent) DECLSPEC_HIDDEN;
 BOOL wined3d_register_window(HWND window, struct IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
 void wined3d_unregister_window(HWND window) DECLSPEC_HIDDEN;
-BOOL InitAdapters(IWineD3DImpl *This) DECLSPEC_HIDDEN;
 
 /* A helper function that dumps a resource list */
 void dumpResources(struct list *list) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list