- proper (tested on Win2K) reference counting for Direct3D object
- fix one case of reference counting on textures
- fix stupid bug in texture upload code
- yet another texture enumeration reordering
diff --git a/dlls/ddraw/d3d_private.h b/dlls/ddraw/d3d_private.h
index 01a81ea..6790158 100644
--- a/dlls/ddraw/d3d_private.h
+++ b/dlls/ddraw/d3d_private.h
@@ -35,12 +35,10 @@
/*****************************************************************************
* Predeclare the interface implementation structures
*/
-typedef struct IDirect3DImpl IDirect3DImpl;
typedef struct IDirect3DLightImpl IDirect3DLightImpl;
typedef struct IDirect3DMaterialImpl IDirect3DMaterialImpl;
typedef struct IDirect3DViewportImpl IDirect3DViewportImpl;
typedef struct IDirect3DExecuteBufferImpl IDirect3DExecuteBufferImpl;
-typedef struct IDirect3DDeviceImpl IDirect3DDeviceImpl;
typedef struct IDirect3DVertexBufferImpl IDirect3DVertexBufferImpl;
#include "ddraw_private.h"
@@ -56,30 +54,6 @@
DWORD texture_stage_state[MAX_TEXTURES][HIGHEST_TEXTURE_STAGE_STATE];
} STATEBLOCK;
-/*****************************************************************************
- * IDirect3D implementation structure.
- * This is common for interfaces 1, 2, 3 and 7.
- */
-struct IDirect3DImpl
-{
- ICOM_VFIELD_MULTI(IDirect3D7);
- ICOM_VFIELD_MULTI(IDirect3D3);
- ICOM_VFIELD_MULTI(IDirect3D2);
- ICOM_VFIELD_MULTI(IDirect3D);
- DWORD ref;
- /* IDirect3D fields */
- IDirectDrawImpl* ddraw;
-
- /* Used as a callback function to create a texture */
- HRESULT (*create_texture)(IDirect3DImpl *d3d, IDirectDrawSurfaceImpl *tex, BOOLEAN at_creation, IDirectDrawSurfaceImpl *main);
-
- /* Used as a callback for Devices to tell to the D3D object it's been created */
- HRESULT (*added_device)(IDirect3DImpl *d3d, IDirect3DDeviceImpl *device);
- HRESULT (*removed_device)(IDirect3DImpl *d3d, IDirect3DDeviceImpl *device);
-
- /* This is needed for delayed texture creation and Z buffer blits */
- IDirect3DDeviceImpl *current_device;
-};
/*****************************************************************************
* IDirect3DLight implementation structure
@@ -89,7 +63,7 @@
ICOM_VFIELD_MULTI(IDirect3DLight);
DWORD ref;
/* IDirect3DLight fields */
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
/* If this light is active for one viewport, put the viewport here */
IDirect3DViewportImpl *active_viewport;
@@ -117,7 +91,7 @@
ICOM_VFIELD_MULTI(IDirect3DMaterial);
DWORD ref;
/* IDirect3DMaterial2 fields */
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
IDirect3DDeviceImpl *active_device;
D3DMATERIAL mat;
@@ -133,7 +107,7 @@
ICOM_VFIELD_MULTI(IDirect3DViewport3);
DWORD ref;
/* IDirect3DViewport fields */
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
/* If this viewport is active for one device, put the device here */
IDirect3DDeviceImpl *active_device;
@@ -167,7 +141,7 @@
ICOM_VFIELD_MULTI(IDirect3DExecuteBuffer);
DWORD ref;
/* IDirect3DExecuteBuffer fields */
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
IDirect3DDeviceImpl* d3ddev;
D3DEXECUTEBUFFERDESC desc;
@@ -217,7 +191,7 @@
ICOM_VFIELD_MULTI(IDirect3DDevice);
DWORD ref;
/* IDirect3DDevice fields */
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
IDirectDrawSurfaceImpl *surface;
IDirect3DViewportImpl *viewport_list;
@@ -270,7 +244,7 @@
ICOM_VFIELD_MULTI(IDirect3DVertexBuffer7);
ICOM_VFIELD_MULTI(IDirect3DVertexBuffer);
DWORD ref;
- IDirect3DImpl *d3d;
+ IDirectDrawImpl *d3d;
D3DVERTEXBUFFERDESC desc;
LPVOID *vertices;
DWORD vertex_buffer_size;
diff --git a/dlls/ddraw/d3ddevice/main.c b/dlls/ddraw/d3ddevice/main.c
index 46c81ae..25b34ba 100644
--- a/dlls/ddraw/d3ddevice/main.c
+++ b/dlls/ddraw/d3ddevice/main.c
@@ -318,15 +318,15 @@
HRESULT WINAPI
Main_IDirect3DDeviceImpl_7_3T_2T_1T_GetDirect3D(LPDIRECT3DDEVICE7 iface,
- LPDIRECT3D7* lplpDirect3D3)
+ LPDIRECT3D7* lplpDirect3D7)
{
ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
- TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3D3);
+ TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3D7);
- *lplpDirect3D3 = ICOM_INTERFACE(This->d3d, IDirect3D7);
+ *lplpDirect3D7 = ICOM_INTERFACE(This->d3d, IDirect3D7);
IDirect3D7_AddRef(ICOM_INTERFACE(This->d3d, IDirect3D7));
- TRACE(" returning interface %p\n", *lplpDirect3D3);
+ TRACE(" returning interface %p\n", *lplpDirect3D7);
return DD_OK;
}
@@ -812,14 +812,13 @@
if (This->current_texture[dwStage] != NULL) {
*lpTexture = ICOM_INTERFACE(This->current_texture[dwStage], IDirectDrawSurface7);
+ IDirectDrawSurface7_AddRef(*lpTexture);
} else {
*lpTexture = NULL;
}
TRACE(" returning interface at %p (for implementation at %p).\n", *lpTexture, This->current_texture[dwStage]);
- /* Note: should this method increase the reference count for this ?? */
-
return DD_OK;
}
@@ -1559,7 +1558,7 @@
TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D3);
ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
&ret_ptr);
- *lplpDirect3D3 = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D3, ret_ptr);
+ *lplpDirect3D3 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D3, ret_ptr);
TRACE(" returning interface %p\n", *lplpDirect3D3);
return ret;
}
@@ -1574,7 +1573,7 @@
TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D2);
ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
&ret_ptr);
- *lplpDirect3D2 = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D2, ret_ptr);
+ *lplpDirect3D2 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D2, ret_ptr);
TRACE(" returning interface %p\n", *lplpDirect3D2);
return ret;
}
@@ -1589,7 +1588,7 @@
TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D);
ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
&ret_ptr);
- *lplpDirect3D = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D, ret_ptr);
+ *lplpDirect3D = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D, ret_ptr);
TRACE(" returning interface %p\n", *lplpDirect3D);
return ret;
}
diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c
index 96cc168..ac071f1 100644
--- a/dlls/ddraw/d3ddevice/mesa.c
+++ b/dlls/ddraw/d3ddevice/mesa.c
@@ -351,7 +351,7 @@
}
/* And warn the D3D object that this device is no longer active... */
- This->d3d->removed_device(This->d3d, This);
+ This->d3d->d3d_removed_device(This->d3d, This);
HeapFree(GetProcessHeap(), 0, This->world_mat);
HeapFree(GetProcessHeap(), 0, This->view_mat);
@@ -415,19 +415,6 @@
pformat->dwSize = sizeof(DDPIXELFORMAT);
pformat->dwFourCC = 0;
-#if 0
- /* See argument about the RGBA format for 'packed' texture formats */
- TRACE("Enumerating GL_RGBA unpacked (32)\n");
- pformat->dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
- pformat->u1.dwRGBBitCount = 32;
- pformat->u2.dwRBitMask = 0xFF000000;
- pformat->u3.dwGBitMask = 0x00FF0000;
- pformat->u4.dwBBitMask = 0x0000FF00;
- pformat->u5.dwRGBAlphaBitMask = 0x000000FF;
- if (cb_1) if (cb_1(&sdesc , context) == 0) return DD_OK;
- if (cb_2) if (cb_2(pformat, context) == 0) return DD_OK;
-#endif
-
TRACE("Enumerating GL_RGBA unpacked (32)\n");
pformat->dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
pformat->u1.dwRGBBitCount = 32;
@@ -438,7 +425,6 @@
if (cb_1) if (cb_1(&sdesc , context) == 0) return DD_OK;
if (cb_2) if (cb_2(pformat, context) == 0) return DD_OK;
-#if 0 /* Enabling this breaks Tomb Raider 3, need to investigate... */
TRACE("Enumerating GL_RGB unpacked (32)\n");
pformat->dwFlags = DDPF_RGB;
pformat->u1.dwRGBBitCount = 32;
@@ -448,7 +434,6 @@
pformat->u5.dwRGBAlphaBitMask = 0x00000000;
if (cb_1) if (cb_1(&sdesc , context) == 0) return DD_OK;
if (cb_2) if (cb_2(pformat, context) == 0) return DD_OK;
-#endif
TRACE("Enumerating GL_RGB unpacked (24)\n");
pformat->dwFlags = DDPF_RGB;
@@ -508,6 +493,17 @@
So basically, forget our OpenGL roots and do not even enumerate our RGBA ones.
*/
+ /* See argument about the RGBA format for 'packed' texture formats */
+ TRACE("Enumerating GL_RGBA unpacked (32)\n");
+ pformat->dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
+ pformat->u1.dwRGBBitCount = 32;
+ pformat->u2.dwRBitMask = 0xFF000000;
+ pformat->u3.dwGBitMask = 0x00FF0000;
+ pformat->u4.dwBBitMask = 0x0000FF00;
+ pformat->u5.dwRGBAlphaBitMask = 0x000000FF;
+ if (cb_1) if (cb_1(&sdesc , context) == 0) return DD_OK;
+ if (cb_2) if (cb_2(pformat, context) == 0) return DD_OK;
+
TRACE("Enumerating GL_RGBA packed GL_UNSIGNED_SHORT_4_4_4_4 (16)\n");
pformat->dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
pformat->u1.dwRGBBitCount = 16;
@@ -555,7 +551,7 @@
HRESULT
-d3ddevice_find(IDirect3DImpl *d3d,
+d3ddevice_find(IDirectDrawImpl *d3d,
LPD3DFINDDEVICESEARCH lpD3DDFS,
LPD3DFINDDEVICERESULT lplpD3DDevice)
{
@@ -3079,7 +3075,7 @@
}
HRESULT
-d3ddevice_create(IDirect3DDeviceImpl **obj, IDirect3DImpl *d3d, IDirectDrawSurfaceImpl *surface)
+d3ddevice_create(IDirect3DDeviceImpl **obj, IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *surface)
{
IDirect3DDeviceImpl *object;
IDirect3DDeviceGLImpl *gl_object;
@@ -3240,7 +3236,7 @@
TRACE(" creating implementation at %p.\n", *obj);
/* And finally warn D3D that this device is now present */
- object->d3d->added_device(object->d3d, object);
+ object->d3d->d3d_added_device(object->d3d, object);
/* FIXME: Should handle other versions than just 7 */
InitDefaultStateBlock(&object->state_block, 7);
diff --git a/dlls/ddraw/d3dexecutebuffer.c b/dlls/ddraw/d3dexecutebuffer.c
index 9ff5e1c..5e389ef 100644
--- a/dlls/ddraw/d3dexecutebuffer.c
+++ b/dlls/ddraw/d3dexecutebuffer.c
@@ -661,7 +661,7 @@
#endif
-HRESULT d3dexecutebuffer_create(IDirect3DExecuteBufferImpl **obj, IDirect3DImpl *d3d, IDirect3DDeviceImpl *d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc)
+HRESULT d3dexecutebuffer_create(IDirect3DExecuteBufferImpl **obj, IDirectDrawImpl *d3d, IDirect3DDeviceImpl *d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc)
{
IDirect3DExecuteBufferImpl* object;
diff --git a/dlls/ddraw/d3dlight.c b/dlls/ddraw/d3dlight.c
index 0e4a9ef..d85a290 100644
--- a/dlls/ddraw/d3dlight.c
+++ b/dlls/ddraw/d3dlight.c
@@ -214,7 +214,7 @@
-HRESULT d3dlight_create(IDirect3DLightImpl **obj, IDirect3DImpl *d3d, GLenum light_num)
+HRESULT d3dlight_create(IDirect3DLightImpl **obj, IDirectDrawImpl *d3d, GLenum light_num)
{
IDirect3DLightImpl *object;
IDirect3DLightGLImpl *gl_object;
diff --git a/dlls/ddraw/d3dmaterial.c b/dlls/ddraw/d3dmaterial.c
index efb175d..30785f6 100644
--- a/dlls/ddraw/d3dmaterial.c
+++ b/dlls/ddraw/d3dmaterial.c
@@ -388,7 +388,7 @@
-HRESULT d3dmaterial_create(IDirect3DMaterialImpl **obj, IDirect3DImpl *d3d)
+HRESULT d3dmaterial_create(IDirect3DMaterialImpl **obj, IDirectDrawImpl *d3d)
{
IDirect3DMaterialImpl *object;
diff --git a/dlls/ddraw/d3dtexture.c b/dlls/ddraw/d3dtexture.c
index 748ee0e..8ad0b77 100644
--- a/dlls/ddraw/d3dtexture.c
+++ b/dlls/ddraw/d3dtexture.c
@@ -650,7 +650,7 @@
#undef XCAST
#endif
-HRESULT d3dtexture_create(IDirect3DImpl *d3d, IDirectDrawSurfaceImpl *surf, BOOLEAN at_creation,
+HRESULT d3dtexture_create(IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *surf, BOOLEAN at_creation,
IDirectDrawSurfaceImpl *main)
{
/* First, initialize the texture vtables... */
diff --git a/dlls/ddraw/d3dvertexbuffer.c b/dlls/ddraw/d3dvertexbuffer.c
index 4da4bb0..d51004b 100644
--- a/dlls/ddraw/d3dvertexbuffer.c
+++ b/dlls/ddraw/d3dvertexbuffer.c
@@ -507,7 +507,7 @@
#undef XCAST
#endif
-HRESULT d3dvertexbuffer_create(IDirect3DVertexBufferImpl **obj, IDirect3DImpl *d3d, LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, DWORD dwFlags)
+HRESULT d3dvertexbuffer_create(IDirect3DVertexBufferImpl **obj, IDirectDrawImpl *d3d, LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, DWORD dwFlags)
{
IDirect3DVertexBufferImpl *object;
static const flag_info flags[] = {
diff --git a/dlls/ddraw/d3dviewport.c b/dlls/ddraw/d3dviewport.c
index 64231d2..2493164 100644
--- a/dlls/ddraw/d3dviewport.c
+++ b/dlls/ddraw/d3dviewport.c
@@ -479,7 +479,7 @@
-HRESULT d3dviewport_create(IDirect3DViewportImpl **obj, IDirect3DImpl *d3d)
+HRESULT d3dviewport_create(IDirect3DViewportImpl **obj, IDirectDrawImpl *d3d)
{
IDirect3DViewportImpl *object;
diff --git a/dlls/ddraw/ddraw/main.c b/dlls/ddraw/ddraw/main.c
index f3c87b0..2ecd87b 100644
--- a/dlls/ddraw/ddraw/main.c
+++ b/dlls/ddraw/ddraw/main.c
@@ -185,28 +185,24 @@
IsEqualGUID( &IID_IDirect3D7 , refiid ) )
{
if (opengl_initialized) {
- IDirect3DImpl *d3d_impl;
HRESULT ret_value;
- ret_value = direct3d_create(&d3d_impl, This);
+ ret_value = direct3d_create(This);
if (FAILED(ret_value)) return ret_value;
if ( IsEqualGUID( &IID_IDirect3D , refiid ) ) {
- *obj = ICOM_INTERFACE(d3d_impl, IDirect3D);
+ *obj = ICOM_INTERFACE(This, IDirect3D);
TRACE(" returning Direct3D interface at %p.\n", *obj);
} else if ( IsEqualGUID( &IID_IDirect3D2 , refiid ) ) {
- *obj = ICOM_INTERFACE(d3d_impl, IDirect3D2);
+ *obj = ICOM_INTERFACE(This, IDirect3D2);
TRACE(" returning Direct3D2 interface at %p.\n", *obj);
} else if ( IsEqualGUID( &IID_IDirect3D3 , refiid ) ) {
- *obj = ICOM_INTERFACE(d3d_impl, IDirect3D3);
+ *obj = ICOM_INTERFACE(This, IDirect3D3);
TRACE(" returning Direct3D3 interface at %p.\n", *obj);
} else {
- *obj = ICOM_INTERFACE(d3d_impl, IDirect3D7);
+ *obj = ICOM_INTERFACE(This, IDirect3D7);
TRACE(" returning Direct3D7 interface at %p.\n", *obj);
}
-
- /* And store the D3D object */
- This->d3d = d3d_impl;
} else {
ERR("Application requests a Direct3D interface but dynamic OpenGL support loading failed !\n");
ERR("(%p)->(%s,%p): no interface\n",This,debugstr_guid(refiid),obj);
@@ -384,8 +380,8 @@
hr = This->create_texture(This, &ddsd, ppSurf, pUnkOuter, mipmap_level);
if (FAILED(hr)) return hr;
- if (This->d3d) This->d3d->create_texture(This->d3d, ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf), TRUE,
- ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf));
+ if (This->d3d_private) This->d3d_create_texture(This, ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf), TRUE,
+ ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf));
/* Create attached mipmaps if required. */
if (more_mipmaps(&ddsd))
@@ -430,8 +426,8 @@
mipmap_impl->mip_main = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf);
mipmap_impl->mipmap_level = mipmap_level;
- if (This->d3d) This->d3d->create_texture(This->d3d, ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, mipmap), TRUE,
- ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf));
+ if (This->d3d_private) This->d3d_create_texture(This, ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, mipmap), TRUE,
+ ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurf));
IDirectDrawSurface7_AddAttachedSurface(prev_mipmap, mipmap);
IDirectDrawSurface7_Release(prev_mipmap);
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 2c52efc..813ab5c 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -58,6 +58,7 @@
typedef struct IDirectDrawPaletteImpl IDirectDrawPaletteImpl;
typedef struct IDirectDrawClipperImpl IDirectDrawClipperImpl;
typedef struct IDirectDrawSurfaceImpl IDirectDrawSurfaceImpl;
+typedef struct IDirect3DDeviceImpl IDirect3DDeviceImpl;
typedef void (*pixel_convert_func)(void *src, void *dst, DWORD width,
DWORD height, LONG pitch,
@@ -73,6 +74,10 @@
ICOM_VFIELD_MULTI(IDirectDraw4);
ICOM_VFIELD_MULTI(IDirectDraw2);
ICOM_VFIELD_MULTI(IDirectDraw);
+ ICOM_VFIELD_MULTI(IDirect3D7);
+ ICOM_VFIELD_MULTI(IDirect3D3);
+ ICOM_VFIELD_MULTI(IDirect3D2);
+ ICOM_VFIELD_MULTI(IDirect3D);
DWORD ref;
@@ -159,9 +164,19 @@
void (*free_memory)(IDirectDrawImpl *This, DWORD mem);
DWORD total_vidmem, available_vidmem;
- /* This is to get the D3D object associated to this DDraw object */
- struct IDirect3DImpl *d3d;
-
+ /* IDirect3D fields */
+ LPVOID d3d_private;
+
+ /* Used as a callback function to create a texture */
+ HRESULT (*d3d_create_texture)(IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *tex, BOOLEAN at_creation, IDirectDrawSurfaceImpl *main);
+
+ /* Used as a callback for Devices to tell to the D3D object it's been created */
+ HRESULT (*d3d_added_device)(IDirectDrawImpl *d3d, IDirect3DDeviceImpl *device);
+ HRESULT (*d3d_removed_device)(IDirectDrawImpl *d3d, IDirect3DDeviceImpl *device);
+
+ /* This is needed for delayed texture creation and Z buffer blits */
+ IDirect3DDeviceImpl *current_device;
+
/* This is for the fake mainWindow */
ATOM winclass;
PAINTSTRUCT ps;
diff --git a/dlls/ddraw/direct3d/main.c b/dlls/ddraw/direct3d/main.c
index d6c8aa8..ed3dedf 100644
--- a/dlls/ddraw/direct3d/main.c
+++ b/dlls/ddraw/direct3d/main.c
@@ -35,96 +35,12 @@
WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
-HRESULT WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3D7 iface,
- REFIID riid,
- LPVOID* obp)
-{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
-
- TRACE("(%p/%p)->(%s,%p)\n", This, iface, debugstr_guid(riid), obp);
-
- /* By default, set the object pointer to NULL */
- *obp = NULL;
-
- if (( IsEqualGUID( &IID_IDirectDraw, riid ) ) ||
- ( IsEqualGUID (&IID_IDirectDraw2, riid ) ) ||
- ( IsEqualGUID (&IID_IDirectDraw4, riid ) ) ||
- ( IsEqualGUID( &IID_IDirectDraw7, riid ) )
- ) {
- HRESULT ret;
- TRACE(" Creating IDirectDrawX interface by calling DirectDraw function.\n");
- ret = IDirectDraw_QueryInterface(ICOM_INTERFACE(This->ddraw,IDirectDraw), riid, obp);
- if (ret == S_OK) {
- IDirectDraw_Release(ICOM_INTERFACE(This->ddraw,IDirectDraw));
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- }
- return ret;
- }
- if ( IsEqualGUID( &IID_IUnknown, riid ) ) {
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- *obp = iface;
- TRACE(" Creating IUnknown interface at %p.\n", *obp);
- return S_OK;
- }
- if ( IsEqualGUID( &IID_IDirect3D, riid ) ) {
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- *obp = ICOM_INTERFACE(This, IDirect3D);
- TRACE(" Creating IDirect3D interface %p\n", *obp);
- return S_OK;
- }
- if ( IsEqualGUID( &IID_IDirect3D2, riid ) ) {
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- *obp = ICOM_INTERFACE(This, IDirect3D2);
- TRACE(" Creating IDirect3D2 interface %p\n", *obp);
- return S_OK;
- }
- if ( IsEqualGUID( &IID_IDirect3D3, riid ) ) {
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- *obp = ICOM_INTERFACE(This, IDirect3D3);
- TRACE(" Creating IDirect3D3 interface %p\n", *obp);
- return S_OK;
- }
- if ( IsEqualGUID( &IID_IDirect3D7, riid ) ) {
- /* This is not 100 % true as we should not be able to QueryInterface a '7' version from another one.
- But well, to factorize the code, why check for application bugs :-) ?
- */
- IDirect3D_AddRef(ICOM_INTERFACE(This,IDirect3D));
- *obp = ICOM_INTERFACE(This, IDirect3D7);
- TRACE(" Creating IDirect3D7 interface %p\n", *obp);
- return S_OK;
- }
- FIXME("(%p): interface for IID %s NOT found!\n", This, debugstr_guid(riid));
- return OLE_E_ENUM_NOMORE;
-}
-
-ULONG WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_AddRef(LPDIRECT3D7 iface)
-{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
- TRACE("(%p/%p)->() incrementing from %lu.\n", This, iface, This->ref);
-
- return ++(This->ref);
-}
-
-ULONG WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_Release(LPDIRECT3D7 iface)
-{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
- TRACE("(%p/%p)->() decrementing from %lu.\n", This, iface, This->ref);
- if (--(This->ref) == 0) {
- IDirectDraw_Release(ICOM_INTERFACE(This->ddraw, IDirectDraw));
- HeapFree(GetProcessHeap(), 0, This);
- return 0;
- }
- return This->ref;
-}
HRESULT WINAPI
Main_IDirect3DImpl_1_Initialize(LPDIRECT3D iface,
REFIID riid)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D, iface);
TRACE("(%p/%p)->(%s) no-op...\n", This, iface, debugstr_guid(riid));
return D3D_OK;
}
@@ -134,7 +50,7 @@
LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback,
LPVOID lpUserArg)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpEnumDevicesCallback, lpUserArg);
return D3D_OK;
}
@@ -144,7 +60,7 @@
LPDIRECT3DLIGHT* lplpDirect3DLight,
IUnknown* pUnkOuter)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpDirect3DLight, pUnkOuter);
return D3D_OK;
}
@@ -154,7 +70,7 @@
LPDIRECT3DMATERIAL3* lplpDirect3DMaterial3,
IUnknown* pUnkOuter)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpDirect3DMaterial3, pUnkOuter);
return D3D_OK;
}
@@ -164,7 +80,7 @@
LPDIRECT3DVIEWPORT3* lplpD3DViewport3,
IUnknown* pUnkOuter)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lplpD3DViewport3, pUnkOuter);
return D3D_OK;
}
@@ -174,7 +90,7 @@
LPD3DFINDDEVICESEARCH lpD3DDFS,
LPD3DFINDDEVICERESULT lpD3DFDR)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DDFS, lpD3DFDR);
return D3D_OK;
}
@@ -185,7 +101,7 @@
LPDIRECTDRAWSURFACE lpDDS,
LPDIRECT3DDEVICE2* lplpD3DDevice2)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D2, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D2, iface);
FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice2);
return D3D_OK;
}
@@ -197,7 +113,7 @@
LPDIRECT3DDEVICE3* lplpD3DDevice3,
LPUNKNOWN lpUnk)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
FIXME("(%p/%p)->(%s,%p,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice3, lpUnk);
return D3D_OK;
}
@@ -208,7 +124,7 @@
LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback,
LPVOID lpContext)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(riidDevice), lpEnumCallback, lpContext);
return D3D_OK;
}
@@ -216,7 +132,7 @@
HRESULT WINAPI
Main_IDirect3DImpl_7_3T_EvictManagedTextures(LPDIRECT3D7 iface)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
FIXME("(%p/%p)->(): stub!\n", This, iface);
return D3D_OK;
}
@@ -226,7 +142,7 @@
LPD3DENUMDEVICESCALLBACK7 lpEnumDevicesCallback,
LPVOID lpUserArg)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpEnumDevicesCallback, lpUserArg);
return D3D_OK;
}
@@ -237,7 +153,7 @@
LPDIRECTDRAWSURFACE7 lpDDS,
LPDIRECT3DDEVICE7* lplpD3DDevice)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
FIXME("(%p/%p)->(%s,%p,%p): stub!\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice);
return D3D_OK;
}
@@ -248,20 +164,31 @@
LPDIRECT3DVERTEXBUFFER7* lplpD3DVertBuf,
DWORD dwFlags)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpD3DVertBufDesc, lplpD3DVertBuf, dwFlags);
return D3D_OK;
}
HRESULT WINAPI
+Thunk_IDirect3DImpl_7_QueryInterface(LPDIRECT3D7 iface,
+ REFIID riid,
+ LPVOID* obp)
+{
+ TRACE("(%p)->(%s,%p) thunking to IDirectDraw7 interface.\n", iface, debugstr_guid(riid), obp);
+ return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirectDraw7, iface),
+ riid,
+ obp);
+}
+
+HRESULT WINAPI
Thunk_IDirect3DImpl_3_QueryInterface(LPDIRECT3D3 iface,
REFIID riid,
LPVOID* obp)
{
- TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp);
- return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface),
- riid,
- obp);
+ TRACE("(%p)->(%s,%p) thunking to IDirectDraw7 interface.\n", iface, debugstr_guid(riid), obp);
+ return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirectDraw7, iface),
+ riid,
+ obp);
}
HRESULT WINAPI
@@ -269,10 +196,10 @@
REFIID riid,
LPVOID* obp)
{
- TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp);
- return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface),
- riid,
- obp);
+ TRACE("(%p)->(%s,%p) thunking to IDirectDraw7 interface.\n", iface, debugstr_guid(riid), obp);
+ return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirectDraw7, iface),
+ riid,
+ obp);
}
HRESULT WINAPI
@@ -280,52 +207,66 @@
REFIID riid,
LPVOID* obp)
{
- TRACE("(%p)->(%s,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riid), obp);
- return IDirect3D7_QueryInterface(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface),
- riid,
- obp);
+ TRACE("(%p)->(%s,%p) thunking to IDirectDraw7 interface.\n", iface, debugstr_guid(riid), obp);
+ return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirectDraw7, iface),
+ riid,
+ obp);
+}
+
+ULONG WINAPI
+Thunk_IDirect3DImpl_7_AddRef(LPDIRECT3D7 iface)
+{
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_3_AddRef(LPDIRECT3D3 iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_2_AddRef(LPDIRECT3D2 iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_1_AddRef(LPDIRECT3D iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_AddRef(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirectDraw7, iface));
+}
+
+ULONG WINAPI
+Thunk_IDirect3DImpl_7_Release(LPDIRECT3D7 iface)
+{
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_3_Release(LPDIRECT3D3 iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_2_Release(LPDIRECT3D2 iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirectDraw7, iface));
}
ULONG WINAPI
Thunk_IDirect3DImpl_1_Release(LPDIRECT3D iface)
{
- TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_Release(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D7, iface));
+ TRACE("(%p)->() thunking to IDirectDraw7 interface.\n", iface);
+ return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirectDraw7, iface));
}
HRESULT WINAPI
@@ -335,7 +276,7 @@
LPVOID lpContext)
{
TRACE("(%p)->(%s,%p,%p) thunking to IDirect3D7 interface.\n", iface, debugstr_guid(riidDevice), lpEnumCallback, lpContext);
- return IDirect3D7_EnumZBufferFormats(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface),
+ return IDirect3D7_EnumZBufferFormats(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirect3D7, iface),
riidDevice,
lpEnumCallback,
lpContext);
@@ -345,7 +286,7 @@
Thunk_IDirect3DImpl_3_EvictManagedTextures(LPDIRECT3D3 iface)
{
TRACE("(%p)->() thunking to IDirect3D7 interface.\n", iface);
- return IDirect3D7_EvictManagedTextures(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface));
+ return IDirect3D7_EvictManagedTextures(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirect3D7, iface));
}
HRESULT WINAPI
@@ -354,7 +295,7 @@
LPVOID lpUserArg)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpEnumDevicesCallback, lpUserArg);
- return IDirect3D3_EnumDevices(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface),
+ return IDirect3D3_EnumDevices(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirect3D3, iface),
lpEnumDevicesCallback,
lpUserArg);
}
@@ -365,7 +306,7 @@
IUnknown* pUnkOuter)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DLight, pUnkOuter);
- return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface),
+ return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirect3D3, iface),
lplpDirect3DLight,
pUnkOuter);
}
@@ -376,7 +317,7 @@
IUnknown* pUnkOuter)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DLight, pUnkOuter);
- return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface),
+ return IDirect3D3_CreateLight(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirect3D3, iface),
lplpDirect3DLight,
pUnkOuter);
}
@@ -390,7 +331,7 @@
LPDIRECT3DMATERIAL3 ret_val;
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DMaterial, pUnkOuter);
- ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface),
+ ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirect3D3, iface),
&ret_val,
pUnkOuter);
@@ -407,7 +348,7 @@
IUnknown* pUnkOuter)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpD3DViewport, pUnkOuter);
- return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface),
+ return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirect3D3, iface),
(LPDIRECT3DVIEWPORT3 *) lplpD3DViewport /* No need to cast here */,
pUnkOuter);
}
@@ -421,7 +362,7 @@
LPDIRECT3DMATERIAL3 ret_val;
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpDirect3DMaterial2, pUnkOuter);
- ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface),
+ ret = IDirect3D3_CreateMaterial(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirect3D3, iface),
&ret_val,
pUnkOuter);
@@ -438,7 +379,7 @@
IUnknown* pUnkOuter)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lplpD3DViewport2, pUnkOuter);
- return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface),
+ return IDirect3D3_CreateViewport(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirect3D3, iface),
(LPDIRECT3DVIEWPORT3 *) lplpD3DViewport2 /* No need to cast here */,
pUnkOuter);
}
@@ -459,7 +400,7 @@
/* dwFlags is not used in the D3D7 interface, use the vertex buffer description instead */
if (dwFlags & D3DDP_DONOTCLIP) lpD3DVertBufDesc->dwCaps |= D3DVBCAPS_DONOTCLIP;
- ret = IDirect3D7_CreateVertexBuffer(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D3, IDirect3D7, iface),
+ ret = IDirect3D7_CreateVertexBuffer(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D3, IDirect3D7, iface),
lpD3DVertBufDesc,
&ret_val,
dwFlags);
@@ -477,7 +418,7 @@
LPD3DFINDDEVICERESULT lplpD3DDevice)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpD3DDFS, lplpD3DDevice);
- return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D, IDirect3D3, iface),
+ return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D, IDirect3D3, iface),
lpD3DDFS,
lplpD3DDevice);
}
@@ -488,7 +429,7 @@
LPD3DFINDDEVICERESULT lpD3DFDR)
{
TRACE("(%p)->(%p,%p) thunking to IDirect3D3 interface.\n", iface, lpD3DDFS, lpD3DFDR);
- return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D2, IDirect3D3, iface),
+ return IDirect3D3_FindDevice(COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D2, IDirect3D3, iface),
lpD3DDFS,
lpD3DFDR);
}
diff --git a/dlls/ddraw/direct3d/main.h b/dlls/ddraw/direct3d/main.h
index 15ed6e6..49e44c4 100644
--- a/dlls/ddraw/direct3d/main.h
+++ b/dlls/ddraw/direct3d/main.h
@@ -19,17 +19,6 @@
/* This is defined here so as to be able to put them in 'drivers' */
HRESULT WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3D7 iface,
- REFIID riid,
- LPVOID* obp);
-
-ULONG WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_AddRef(LPDIRECT3D7 iface);
-
-ULONG WINAPI
-Main_IDirect3DImpl_7_3T_2T_1T_Release(LPDIRECT3D7 iface);
-
-HRESULT WINAPI
Main_IDirect3DImpl_7_EnumDevices(LPDIRECT3D7 iface,
LPD3DENUMDEVICESCALLBACK7 lpEnumDevicesCallback,
LPVOID lpUserArg);
@@ -130,6 +119,11 @@
LPD3DFINDDEVICERESULT lplpD3DDevice);
HRESULT WINAPI
+Thunk_IDirect3DImpl_7_QueryInterface(LPDIRECT3D7 iface,
+ REFIID riid,
+ LPVOID* obp);
+
+HRESULT WINAPI
Thunk_IDirect3DImpl_3_QueryInterface(LPDIRECT3D3 iface,
REFIID riid,
LPVOID* obp);
@@ -145,6 +139,9 @@
LPVOID* obp);
ULONG WINAPI
+Thunk_IDirect3DImpl_7_AddRef(LPDIRECT3D7 iface);
+
+ULONG WINAPI
Thunk_IDirect3DImpl_3_AddRef(LPDIRECT3D3 iface);
ULONG WINAPI
@@ -154,6 +151,9 @@
Thunk_IDirect3DImpl_1_AddRef(LPDIRECT3D iface);
ULONG WINAPI
+Thunk_IDirect3DImpl_7_Release(LPDIRECT3D7 iface);
+
+ULONG WINAPI
Thunk_IDirect3DImpl_3_Release(LPDIRECT3D3 iface);
ULONG WINAPI
diff --git a/dlls/ddraw/direct3d/mesa.c b/dlls/ddraw/direct3d/mesa.c
index 0f84342..d6eb9e8 100644
--- a/dlls/ddraw/direct3d/mesa.c
+++ b/dlls/ddraw/direct3d/mesa.c
@@ -47,7 +47,7 @@
LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback,
LPVOID lpUserArg)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lpEnumDevicesCallback, lpUserArg);
/* Call functions defined in d3ddevices.c */
@@ -62,7 +62,7 @@
LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback,
LPVOID lpUserArg)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lpEnumDevicesCallback, lpUserArg);
/* Call functions defined in d3ddevices.c */
@@ -77,7 +77,7 @@
LPDIRECT3DLIGHT* lplpDirect3DLight,
IUnknown* pUnkOuter)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
IDirect3DGLImpl *glThis = (IDirect3DGLImpl *) This;
int fl;
IDirect3DLightImpl *d3dlimpl;
@@ -106,7 +106,7 @@
{
IDirect3DMaterialImpl *D3Dmat_impl;
HRESULT ret_value;
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lplpDirect3DMaterial3, pUnkOuter);
ret_value = d3dmaterial_create(&D3Dmat_impl, This);
@@ -123,7 +123,7 @@
{
IDirect3DViewportImpl *D3Dvp_impl;
HRESULT ret_value;
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lplpD3DViewport3, pUnkOuter);
ret_value = d3dviewport_create(&D3Dvp_impl, This);
@@ -134,7 +134,7 @@
}
static HRESULT
-create_device_helper(IDirect3DImpl *This,
+create_device_helper(IDirectDrawImpl *This,
REFCLSID iid,
IDirectDrawSurfaceImpl *lpDDS,
void **obj,
@@ -186,7 +186,7 @@
LPDIRECTDRAWSURFACE lpDDS,
LPDIRECT3DDEVICE2* lplpD3DDevice2)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D2, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D2, iface);
IDirectDrawSurfaceImpl *ddsurfaceimpl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface3, lpDDS);
TRACE("(%p/%p)->(%s,%p,%p)\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice2);
return create_device_helper(This, rclsid, ddsurfaceimpl, (void **) lplpD3DDevice2, 2);
@@ -199,7 +199,7 @@
LPDIRECT3DDEVICE3* lplpD3DDevice3,
LPUNKNOWN lpUnk)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
IDirectDrawSurfaceImpl *ddsurfaceimpl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, lpDDS);
TRACE("(%p/%p)->(%s,%p,%p)\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice3);
return create_device_helper(This, rclsid, ddsurfaceimpl, (void **) lplpD3DDevice3, 3);
@@ -210,7 +210,7 @@
LPD3DFINDDEVICESEARCH lpD3DDFS,
LPD3DFINDDEVICERESULT lpD3DFDR)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D3, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D3, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lpD3DDFS, lpD3DFDR);
return d3ddevice_find(This, lpD3DDFS, lpD3DFDR);
}
@@ -221,7 +221,7 @@
LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback,
LPVOID lpContext)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
DDPIXELFORMAT pformat;
TRACE("(%p/%p)->(%s,%p,%p)\n", This, iface, debugstr_guid(riidDevice), lpEnumCallback, lpContext);
@@ -246,7 +246,7 @@
LPD3DENUMDEVICESCALLBACK7 lpEnumDevicesCallback,
LPVOID lpUserArg)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
TRACE("(%p/%p)->(%p,%p)\n", This, iface, lpEnumDevicesCallback, lpUserArg);
if (d3ddevice_enumerate7(lpEnumDevicesCallback, lpUserArg) != D3DENUMRET_OK)
@@ -261,7 +261,7 @@
LPDIRECTDRAWSURFACE7 lpDDS,
LPDIRECT3DDEVICE7* lplpD3DDevice)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
IDirectDrawSurfaceImpl *ddsurfaceimpl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, lpDDS);
TRACE("(%p/%p)->(%s,%p,%p)\n", This, iface, debugstr_guid(rclsid), lpDDS, lplpD3DDevice);
return create_device_helper(This, rclsid, ddsurfaceimpl, (void **) lplpD3DDevice, 7);
@@ -273,7 +273,7 @@
LPDIRECT3DVERTEXBUFFER7* lplpD3DVertBuf,
DWORD dwFlags)
{
- ICOM_THIS_FROM(IDirect3DImpl, IDirect3D7, iface);
+ ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
IDirect3DVertexBufferImpl *vbimpl;
HRESULT res;
@@ -286,7 +286,7 @@
return res;
}
-static void light_released(IDirect3DImpl *This, GLenum light_num)
+static void light_released(IDirectDrawImpl *This, GLenum light_num)
{
IDirect3DGLImpl *glThis = (IDirect3DGLImpl *) This;
glThis->free_lights |= (light_num - GL_LIGHT0);
@@ -301,9 +301,9 @@
ICOM_VTABLE(IDirect3D7) VTABLE_IDirect3D7 =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- XCAST(QueryInterface) Main_IDirect3DImpl_7_3T_2T_1T_QueryInterface,
- XCAST(AddRef) Main_IDirect3DImpl_7_3T_2T_1T_AddRef,
- XCAST(Release) Main_IDirect3DImpl_7_3T_2T_1T_Release,
+ XCAST(QueryInterface) Thunk_IDirect3DImpl_7_QueryInterface,
+ XCAST(AddRef) Thunk_IDirect3DImpl_7_AddRef,
+ XCAST(Release) Thunk_IDirect3DImpl_7_Release,
XCAST(EnumDevices) GL_IDirect3DImpl_7_EnumDevices,
XCAST(CreateDevice) GL_IDirect3DImpl_7_CreateDevice,
XCAST(CreateVertexBuffer) GL_IDirect3DImpl_7_3T_CreateVertexBuffer,
@@ -393,13 +393,13 @@
#undef XCAST
#endif
-static HRESULT d3d_add_device(IDirect3DImpl *This, IDirect3DDeviceImpl *device)
+static HRESULT d3d_add_device(IDirectDrawImpl *This, IDirect3DDeviceImpl *device)
{
if (This->current_device == NULL) {
/* Create delayed textures now that we have an OpenGL context...
For that, go through all surface attached to our DDraw object and create
OpenGL textures for all textures.. */
- IDirectDrawSurfaceImpl *surf = This->ddraw->surfaces;
+ IDirectDrawSurfaceImpl *surf = This->surfaces;
while (surf != NULL) {
if (surf->surface_desc.ddsCaps.dwCaps & DDSCAPS_TEXTURE) {
@@ -415,38 +415,34 @@
return DD_OK;
}
-static HRESULT d3d_remove_device(IDirect3DImpl *This, IDirect3DDeviceImpl *device)
+static HRESULT d3d_remove_device(IDirectDrawImpl *This, IDirect3DDeviceImpl *device)
{
This->current_device = NULL;
return DD_OK;
}
-HRESULT direct3d_create(IDirect3DImpl **obj, IDirectDrawImpl *ddraw)
+HRESULT direct3d_create(IDirectDrawImpl *This)
{
- IDirect3DImpl *object;
IDirect3DGLImpl *globject;
- object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DGLImpl));
- if (object == NULL) return DDERR_OUTOFMEMORY;
+ globject = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DGLImpl));
+ if (globject == NULL) return DDERR_OUTOFMEMORY;
- object->ref = 1;
- object->ddraw = ddraw;
- object->create_texture = d3dtexture_create;
- object->added_device = d3d_add_device;
- object->removed_device = d3d_remove_device;
+ This->d3d_create_texture = d3dtexture_create;
+ This->d3d_added_device = d3d_add_device;
+ This->d3d_removed_device = d3d_remove_device;
- ICOM_INIT_INTERFACE(object, IDirect3D, VTABLE_IDirect3D);
- ICOM_INIT_INTERFACE(object, IDirect3D2, VTABLE_IDirect3D2);
- ICOM_INIT_INTERFACE(object, IDirect3D3, VTABLE_IDirect3D3);
- ICOM_INIT_INTERFACE(object, IDirect3D7, VTABLE_IDirect3D7);
+ ICOM_INIT_INTERFACE(This, IDirect3D, VTABLE_IDirect3D);
+ ICOM_INIT_INTERFACE(This, IDirect3D2, VTABLE_IDirect3D2);
+ ICOM_INIT_INTERFACE(This, IDirect3D3, VTABLE_IDirect3D3);
+ ICOM_INIT_INTERFACE(This, IDirect3D7, VTABLE_IDirect3D7);
- globject = (IDirect3DGLImpl *) object;
globject->free_lights = (0x01 << MAX_LIGHTS) - 1; /* There are, in total, 8 lights in OpenGL */
globject->light_released = light_released;
- *obj = object;
+ This->d3d_private = globject;
- TRACE(" creating implementation at %p.\n", *obj);
+ TRACE(" creating Mesa private storage at %p.\n", globject);
return D3D_OK;
}
diff --git a/dlls/ddraw/dsurface/fakezbuffer.c b/dlls/ddraw/dsurface/fakezbuffer.c
index 63d4b60..d101acc 100644
--- a/dlls/ddraw/dsurface/fakezbuffer.c
+++ b/dlls/ddraw/dsurface/fakezbuffer.c
@@ -132,8 +132,8 @@
}
/* We only support the BLT with DEPTH_FILL for now */
- if ((dwFlags & DDBLT_DEPTHFILL) && (This->ddraw_owner->d3d != NULL)) {
- if (This->ddraw_owner->d3d->current_device != NULL) {
+ if ((dwFlags & DDBLT_DEPTHFILL) && (This->ddraw_owner->d3d_private != NULL)) {
+ if (This->ddraw_owner->current_device != NULL) {
D3DRECT rect;
if (rdst) {
rect.u1.x1 = rdst->left;
@@ -141,12 +141,12 @@
rect.u3.x2 = rdst->right;
rect.u4.y2 = rdst->bottom;
}
- This->ddraw_owner->d3d->current_device->clear(This->ddraw_owner->d3d->current_device,
- (rdst == NULL ? 0 : 1), &rect,
- D3DCLEAR_ZBUFFER,
- 0x00000000,
- ((double) lpbltfx->u5.dwFillDepth) / 4294967295.0,
- 0x00000000);
+ This->ddraw_owner->current_device->clear(This->ddraw_owner->current_device,
+ (rdst == NULL ? 0 : 1), &rect,
+ D3DCLEAR_ZBUFFER,
+ 0x00000000,
+ ((double) lpbltfx->u5.dwFillDepth) / 4294967295.0,
+ 0x00000000);
return DD_OK;
}
}
diff --git a/dlls/ddraw/dsurface/main.c b/dlls/ddraw/dsurface/main.c
index 4f78f30..9ae9ba1 100644
--- a/dlls/ddraw/dsurface/main.c
+++ b/dlls/ddraw/dsurface/main.c
@@ -189,7 +189,7 @@
IDirect3DDeviceImpl *d3ddevimpl;
HRESULT ret_value;
- ret_value = d3ddevice_create(&d3ddevimpl, This->ddraw_owner->d3d, This);
+ ret_value = d3ddevice_create(&d3ddevimpl, This->ddraw_owner, This);
if (FAILED(ret_value)) return ret_value;
*ppObj = ICOM_INTERFACE(d3ddevimpl, IDirect3DDevice);
@@ -207,12 +207,12 @@
/* In case the texture surface was created before the D3D creation */
if (This->tex_private == NULL) {
- if (This->ddraw_owner->d3d == NULL) {
+ if (This->ddraw_owner->d3d_private == NULL) {
ERR("Texture created with no D3D object yet.. Not supported !\n");
return E_NOINTERFACE;
}
- ret_value = This->ddraw_owner->d3d->create_texture(This->ddraw_owner->d3d, This, FALSE, This->mip_main);
+ ret_value = This->ddraw_owner->d3d_create_texture(This->ddraw_owner, This, FALSE, This->mip_main);
if (FAILED(ret_value)) return ret_value;
}
if (IsEqualGUID( &IID_IDirect3DTexture, riid )) {
diff --git a/dlls/ddraw/mesa.c b/dlls/ddraw/mesa.c
index a18d2ef..b2e6bce 100644
--- a/dlls/ddraw/mesa.c
+++ b/dlls/ddraw/mesa.c
@@ -773,7 +773,7 @@
(src_pf->u3.dwGBitMask == 0x0000FF00) &&
(src_pf->u4.dwBBitMask == 0x000000FF) &&
(src_pf->u5.dwRGBAlphaBitMask == 0x00000000)) {
- if (need_alpha_ck) {
+ if (need_alpha_ck == TRUE) {
convert_type = CONVERT_RGB32_888;
current_format = GL_RGBA;
internal_format = GL_RGBA;
@@ -889,7 +889,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
@@ -909,7 +909,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
@@ -929,7 +929,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
@@ -968,7 +968,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
@@ -988,7 +988,7 @@
DWORD i;
WORD *src = (WORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(WORD));
dst = (WORD *) *temp_buffer;
@@ -1017,7 +1017,7 @@
BYTE *src = (BYTE *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top));
DWORD *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(DWORD));
dst = (DWORD *) *temp_buffer;
@@ -1038,7 +1038,7 @@
DWORD i;
DWORD *src = (DWORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(DWORD));
dst = (DWORD *) *temp_buffer;
@@ -1057,7 +1057,7 @@
DWORD i;
DWORD *src = (DWORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(DWORD));
dst = (DWORD *) *temp_buffer;
@@ -1077,7 +1077,7 @@
DWORD i;
DWORD *src = (DWORD *) (((BYTE *) src_d->lpSurface) + (bpp * rect->left) + (src_d->u1.lPitch * rect->top)), *dst;
- if (*temp_buffer != NULL)
+ if (*temp_buffer == NULL)
*temp_buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
current_tex_width * current_tex_height * sizeof(DWORD));
dst = (DWORD *) *temp_buffer;
diff --git a/dlls/ddraw/mesa_private.h b/dlls/ddraw/mesa_private.h
index db57bc9..a7094de 100644
--- a/dlls/ddraw/mesa_private.h
+++ b/dlls/ddraw/mesa_private.h
@@ -45,11 +45,11 @@
SURFACE_MEMORY_DIRTY
} SURFACE_STATE;
+/* This structure is used for the 'd3d_private' field of the IDirectDraw structure */
typedef struct IDirect3DGLImpl
{
- struct IDirect3DImpl parent;
DWORD free_lights;
- void (*light_released)(IDirect3DImpl *, GLenum light_num);
+ void (*light_released)(IDirectDrawImpl *, GLenum light_num);
} IDirect3DGLImpl;
typedef struct IDirect3DLightGLImpl
@@ -124,19 +124,19 @@
} IDirect3DVertexBufferGLImpl;
/* All non-static functions 'exported' by various sub-objects */
-extern HRESULT direct3d_create(IDirect3DImpl **obj, IDirectDrawImpl *ddraw);
-extern HRESULT d3dtexture_create(IDirect3DImpl *d3d, IDirectDrawSurfaceImpl *surf, BOOLEAN at_creation, IDirectDrawSurfaceImpl *main_surf);
-extern HRESULT d3dlight_create(IDirect3DLightImpl **obj, IDirect3DImpl *d3d, GLenum light_num);
-extern HRESULT d3dexecutebuffer_create(IDirect3DExecuteBufferImpl **obj, IDirect3DImpl *d3d, IDirect3DDeviceImpl *d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc);
-extern HRESULT d3dmaterial_create(IDirect3DMaterialImpl **obj, IDirect3DImpl *d3d);
-extern HRESULT d3dviewport_create(IDirect3DViewportImpl **obj, IDirect3DImpl *d3d);
-extern HRESULT d3dvertexbuffer_create(IDirect3DVertexBufferImpl **obj, IDirect3DImpl *d3d, LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, DWORD dwFlags);
-extern HRESULT d3ddevice_create(IDirect3DDeviceImpl **obj, IDirect3DImpl *d3d, IDirectDrawSurfaceImpl *surface);
+extern HRESULT direct3d_create(IDirectDrawImpl *This);
+extern HRESULT d3dtexture_create(IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *surf, BOOLEAN at_creation, IDirectDrawSurfaceImpl *main_surf);
+extern HRESULT d3dlight_create(IDirect3DLightImpl **obj, IDirectDrawImpl *d3d, GLenum light_num);
+extern HRESULT d3dexecutebuffer_create(IDirect3DExecuteBufferImpl **obj, IDirectDrawImpl *d3d, IDirect3DDeviceImpl *d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc);
+extern HRESULT d3dmaterial_create(IDirect3DMaterialImpl **obj, IDirectDrawImpl *d3d);
+extern HRESULT d3dviewport_create(IDirect3DViewportImpl **obj, IDirectDrawImpl *d3d);
+extern HRESULT d3dvertexbuffer_create(IDirect3DVertexBufferImpl **obj, IDirectDrawImpl *d3d, LPD3DVERTEXBUFFERDESC lpD3DVertBufDesc, DWORD dwFlags);
+extern HRESULT d3ddevice_create(IDirect3DDeviceImpl **obj, IDirectDrawImpl *d3d, IDirectDrawSurfaceImpl *surface);
/* Used for Direct3D to request the device to enumerate itself */
extern HRESULT d3ddevice_enumerate(LPD3DENUMDEVICESCALLBACK cb, LPVOID context, DWORD version) ;
extern HRESULT d3ddevice_enumerate7(LPD3DENUMDEVICESCALLBACK7 cb, LPVOID context) ;
-extern HRESULT d3ddevice_find(IDirect3DImpl *d3d, LPD3DFINDDEVICESEARCH lpD3DDFS, LPD3DFINDDEVICERESULT lplpD3DDevice);
+extern HRESULT d3ddevice_find(IDirectDrawImpl *d3d, LPD3DFINDDEVICESEARCH lpD3DDFS, LPD3DFINDDEVICERESULT lplpD3DDevice);
/* Used to upload the texture */
extern HRESULT gltex_upload_texture(IDirectDrawSurfaceImpl *This) ;