Refactored d3d9 a bit
[reactos.git] / reactos / dll / directx / d3d9 / d3d9_impl.c
index b15d196..4e66516 100644 (file)
@@ -5,21 +5,31 @@
  * PURPOSE:         IDirect3D9 implementation
  * PROGRAMERS:      Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se>
  */
-#include "d3d9_private.h"
 
+#include "d3d9_common.h"
+#include <d3d9.h>
+#include "d3d9_helpers.h"
 #include <debug.h>
 
 /* IDirect3D9: IUnknown implementation */
-static HRESULT WINAPI IDirect3D9Impl_QueryInterface(LPDIRECT3D9 iface, REFIID riid, LPVOID* ppobj)
+static HRESULT WINAPI IDirect3D9Impl_QueryInterface(LPDIRECT3D9 iface, REFIID riid, LPVOID* ppvObject)
 {
-    UNIMPLEMENTED
+    LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
+
+    if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3D9))
+    {
+        IUnknown_AddRef(iface);
+        *ppvObject = &This->lpVtbl;
+        return S_OK;
+    }
 
+    *ppvObject = NULL;
     return E_NOINTERFACE;
 }
 
 static ULONG WINAPI IDirect3D9Impl_AddRef(LPDIRECT3D9 iface)
 {
-    LPDIRECTD3D9_INT This = (LPDIRECTD3D9_INT)iface;
+    LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
     ULONG ref = InterlockedIncrement(&This->dwRefCnt);
 
     return ref;
@@ -27,7 +37,7 @@ static ULONG WINAPI IDirect3D9Impl_AddRef(LPDIRECT3D9 iface)
 
 static ULONG WINAPI IDirect3D9Impl_Release(LPDIRECT3D9 iface)
 {
-    LPDIRECTD3D9_INT This = (LPDIRECTD3D9_INT)iface;
+    LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
     ULONG ref = InterlockedDecrement(&This->dwRefCnt);
 
     if (ref == 0)
@@ -35,7 +45,7 @@ static ULONG WINAPI IDirect3D9Impl_Release(LPDIRECT3D9 iface)
         EnterCriticalSection(&This->d3d9_cs);
         /* TODO: Free resources here */
         LeaveCriticalSection(&This->d3d9_cs);
-        HeapFree(GetProcessHeap(), 0, This);
+        AlignedFree(This);
     }
 
     return ref;
@@ -146,7 +156,7 @@ static HMONITOR WINAPI IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9 iface, UINT
 static HRESULT WINAPI IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType,
                                                   HWND hFocusWindow, DWORD BehaviourFlags,
                                                   D3DPRESENT_PARAMETERS* pPresentationParameters,
-                                                  IDirect3DDevice9** ppReturnedDeviceInterface)
+                                                  struct IDirect3DDevice9** ppReturnedDeviceInterface)
 {
     UNIMPLEMENTED