From 022d372709f2dfce78f44e9ce1447081901ec20d Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Sat, 27 Mar 1999 16:56:13 +0000 Subject: [PATCH] Adapted to the interface/implementation separation. Now uses ICOM_THIS to access the implementation structures. Replaced 'this' with 'This' for ICOM_THIS. Direct access to the virtual table has been eliminated too. --- graphics/d3dcommon.c | 2 +- graphics/d3ddevices.c | 558 ++++---- graphics/d3dexecutebuffer.c | 174 +-- graphics/d3dlight.c | 158 +-- graphics/d3dmaterial.c | 159 +-- graphics/d3dtexture.c | 182 +-- graphics/d3dviewport.c | 207 +-- graphics/ddraw.c | 2397 ++++++++++++++++++----------------- 8 files changed, 2049 insertions(+), 1788 deletions(-) diff --git a/graphics/d3dcommon.c b/graphics/d3dcommon.c index 007b53e29ab..5a31652b799 100644 --- a/graphics/d3dcommon.c +++ b/graphics/d3dcommon.c @@ -124,7 +124,7 @@ void set_render_state(D3DRENDERSTATETYPE dwRenderStateType, switch (dwRenderStateType) { case D3DRENDERSTATE_TEXTUREHANDLE: { /* 1 */ - LPDIRECT3DTEXTURE2 tex = (LPDIRECT3DTEXTURE2) dwRenderState; + IDirect3DTexture2Impl* tex = (IDirect3DTexture2Impl*) dwRenderState; if (tex == NULL) { glBindTexture(GL_TEXTURE_2D, 0); diff --git a/graphics/d3ddevices.c b/graphics/d3ddevices.c index 4626a179d3d..8ab7d53475c 100644 --- a/graphics/d3ddevices.c +++ b/graphics/d3ddevices.c @@ -39,28 +39,28 @@ static GUID IID_D3DDEVICE_OpenGL = { }; -static IDirect3DDevice2_VTable OpenGL_vtable; -static IDirect3DDevice_VTable OpenGL_vtable_dx3; +static ICOM_VTABLE(IDirect3DDevice2) OpenGL_vtable; +static ICOM_VTABLE(IDirect3DDevice) OpenGL_vtable_dx3; /******************************************************************************* * OpenGL static functions */ -static void set_context(LPDIRECT3DDEVICE2 this) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; +static void set_context(IDirect3DDevice2Impl* This) { + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; OSMesaMakeCurrent(odev->ctx, odev->buffer, GL_UNSIGNED_BYTE, - this->surface->s.surface_desc.dwWidth, - this->surface->s.surface_desc.dwHeight); + This->surface->s.surface_desc.dwWidth, + This->surface->s.surface_desc.dwHeight); } -static void set_context_dx3(LPDIRECT3DDEVICE this) { - OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) this; +static void set_context_dx3(IDirect3DDeviceImpl* This) { + OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) This; OSMesaMakeCurrent(odev->ctx, odev->buffer, GL_UNSIGNED_BYTE, - this->surface->s.surface_desc.dwWidth, - this->surface->s.surface_desc.dwHeight); + This->surface->s.surface_desc.dwWidth, + This->surface->s.surface_desc.dwHeight); } static void fill_opengl_primcaps(D3DPRIMCAPS *pc) @@ -132,7 +132,7 @@ int d3d_OpenGL(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) { return cb((void*)&IID_D3DDEVICE2_OpenGL,"WINE Direct3D using OpenGL","direct3d",&d1,&d2,context); } -int is_OpenGL(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE2 *device, LPDIRECT3D2 d3d) +int is_OpenGL(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDevice2Impl** device, IDirect3D2Impl* d3d) { if (/* Default device */ (rguid == NULL) || @@ -193,48 +193,52 @@ int is_OpenGL(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE2 *de * Common IDirect3DDevice2 */ -static HRESULT WINAPI IDirect3DDevice2_QueryInterface(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_QueryInterface(LPDIRECT3DDEVICE2 iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DDevice2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DDevice2_AddRef(LPDIRECT3DDEVICE2 this) +static ULONG WINAPI IDirect3DDevice2Impl_AddRef(LPDIRECT3DDEVICE2 iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DDevice2Impl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DDevice2_Release(LPDIRECT3DDEVICE2 this) +static ULONG WINAPI IDirect3DDevice2Impl_Release(LPDIRECT3DDEVICE2 iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } /*** IDirect3DDevice2 methods ***/ -static HRESULT WINAPI IDirect3DDevice2_GetCaps(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetCaps(LPDIRECT3DDEVICE2 iface, LPD3DDEVICEDESC lpdescsoft, LPD3DDEVICEDESC lpdeschard) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpdescsoft, lpdeschard); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lpdescsoft, lpdeschard); fill_opengl_caps(lpdescsoft, lpdeschard); @@ -243,51 +247,57 @@ static HRESULT WINAPI IDirect3DDevice2_GetCaps(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_SwapTextureHandles(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SwapTextureHandles(LPDIRECT3DDEVICE2 iface, LPDIRECT3DTEXTURE2 lptex1, LPDIRECT3DTEXTURE2 lptex2) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lptex1, lptex2); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lptex1, lptex2); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_GetStats(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetStats(LPDIRECT3DDEVICE2 iface, LPD3DSTATS lpstats) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpstats); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpstats); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_AddViewport(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_AddViewport(LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DDevice2Impl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + FIXME(ddraw, "(%p)->(%p): stub\n", This, ilpvp); /* Adds this viewport to the viewport list */ - lpvp->next = this->viewport_list; - this->viewport_list = lpvp; + ilpvp->next = This->viewport_list; + This->viewport_list = ilpvp; return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_DeleteViewport(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_DeleteViewport(LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp) { - LPDIRECT3DVIEWPORT2 cur, prev; - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DDevice2Impl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + IDirect3DViewport2Impl *cur, *prev; + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpvp); /* Finds this viewport in the list */ prev = NULL; - cur = this->viewport_list; - while ((cur != NULL) && (cur != lpvp)) { + cur = This->viewport_list; + while ((cur != NULL) && (cur != ilpvp)) { prev = cur; cur = cur->next; } @@ -296,7 +306,7 @@ static HRESULT WINAPI IDirect3DDevice2_DeleteViewport(LPDIRECT3DDEVICE2 this, /* And remove it */ if (prev == NULL) - this->viewport_list = cur->next; + This->viewport_list = cur->next; else prev->next = cur->next; @@ -305,28 +315,31 @@ static HRESULT WINAPI IDirect3DDevice2_DeleteViewport(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_NextViewport(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_NextViewport(LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp, LPDIRECT3DVIEWPORT2* lplpvp, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", this, lpvp, lpvp, dwFlags); + ICOM_THIS(IDirect3DDevice2Impl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp; + FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", This, lpvp, lpvp, dwFlags); switch (dwFlags) { case D3DNEXT_NEXT: - *lplpvp = lpvp->next; + *ilplpvp = ilpvp->next; break; case D3DNEXT_HEAD: - *lplpvp = this->viewport_list; + *ilplpvp = This->viewport_list; break; case D3DNEXT_TAIL: - lpvp = this->viewport_list; - while (lpvp->next != NULL) - lpvp = lpvp->next; + ilpvp = This->viewport_list; + while (ilpvp->next != NULL) + ilpvp = ilpvp->next; - *lplpvp = lpvp; + *ilplpvp = ilpvp; break; default: @@ -428,22 +441,24 @@ static HRESULT enum_texture_format_OpenGL(LPD3DENUMTEXTUREFORMATSCALLBACK cb, return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_EnumTextureFormats(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_EnumTextureFormats(LPDIRECT3DDEVICE2 iface, LPD3DENUMTEXTUREFORMATSCALLBACK cb, LPVOID context) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, cb, context); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, cb, context); return enum_texture_format_OpenGL(cb, context); } -static HRESULT WINAPI IDirect3DDevice2_BeginScene(LPDIRECT3DDEVICE2 this) +static HRESULT WINAPI IDirect3DDevice2Impl_BeginScene(LPDIRECT3DDEVICE2 iface) { - /* OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; */ + ICOM_THIS(IDirect3DDevice2Impl,iface); + /* OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; */ - FIXME(ddraw, "(%p)->(): stub\n", this); + FIXME(ddraw, "(%p)->(): stub\n", This); /* Here, we should get the DDraw surface and 'copy it' to the OpenGL surface.... */ @@ -453,20 +468,21 @@ static HRESULT WINAPI IDirect3DDevice2_BeginScene(LPDIRECT3DDEVICE2 this) -static HRESULT WINAPI IDirect3DDevice2_EndScene(LPDIRECT3DDEVICE2 this) +static HRESULT WINAPI IDirect3DDevice2Impl_EndScene(LPDIRECT3DDEVICE2 iface) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; - LPDIRECTDRAWSURFACE3 surf = (LPDIRECTDRAWSURFACE3) this->surface; + ICOM_THIS(IDirect3DDevice2Impl,iface); + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; + LPDIRECTDRAWSURFACE3 surf = (LPDIRECTDRAWSURFACE3) This->surface; DDSURFACEDESC sdesc; int x,y; unsigned char *src; unsigned short *dest; - FIXME(ddraw, "(%p)->(): stub\n", this); + FIXME(ddraw, "(%p)->(): stub\n", This); /* Here we copy back the OpenGL scene to the the DDraw surface */ /* First, lock the surface */ - surf->lpvtbl->fnLock(surf,NULL,&sdesc,DDLOCK_WRITEONLY,0); + IDirectDrawSurface3_Lock(surf,NULL,&sdesc,DDLOCK_WRITEONLY,0); /* The copy the OpenGL buffer to this surface */ @@ -493,18 +509,19 @@ static HRESULT WINAPI IDirect3DDevice2_EndScene(LPDIRECT3DDEVICE2 this) } /* Unlock the surface */ - surf->lpvtbl->fnUnlock(surf,sdesc.y.lpSurface); + IDirectDrawSurface3_Unlock(surf,sdesc.y.lpSurface); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_GetDirect3D(LPDIRECT3DDEVICE2 this, LPDIRECT3D2 *lpd3d2) +static HRESULT WINAPI IDirect3DDevice2Impl_GetDirect3D(LPDIRECT3DDEVICE2 iface, LPDIRECT3D2 *lpd3d2) { - TRACE(ddraw, "(%p)->(%p): stub\n", this, lpd3d2); + ICOM_THIS(IDirect3DDevice2Impl,iface); + TRACE(ddraw, "(%p)->(%p): stub\n", This, lpd3d2); - *lpd3d2 = this->d3d; + *lpd3d2 = (LPDIRECT3D2)This->d3d; return DD_OK; } @@ -512,112 +529,122 @@ static HRESULT WINAPI IDirect3DDevice2_GetDirect3D(LPDIRECT3DDEVICE2 this, LPDIR /*** DrawPrimitive API ***/ -static HRESULT WINAPI IDirect3DDevice2_SetCurrentViewport(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetCurrentViewport(LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DDevice2Impl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + FIXME(ddraw, "(%p)->(%p): stub\n", This, ilpvp); /* Should check if the viewport was added or not */ /* Set this viewport as the current viewport */ - this->current_viewport = lpvp; + This->current_viewport = ilpvp; /* Activate this viewport */ - lpvp->device.active_device2 = this; - lpvp->activate(lpvp); + ilpvp->device.active_device2 = This; + ilpvp->activate(ilpvp); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_GetCurrentViewport(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetCurrentViewport(LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 *lplpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lplpvp); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lplpvp); /* Returns the current viewport */ - *lplpvp = this->current_viewport; + *lplpvp = (LPDIRECT3DVIEWPORT2)This->current_viewport; return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_SetRenderTarget(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetRenderTarget(LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%08lx): stub\n", this, lpdds, dwFlags); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%08lx): stub\n", This, lpdds, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_GetRenderTarget(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetRenderTarget(LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE *lplpdds) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lplpdds); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lplpdds); /* Returns the current rendering target (the surface on wich we render) */ - *lplpdds = this->surface; + *lplpdds = (LPDIRECTDRAWSURFACE)This->surface; return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_Begin(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_Begin(LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%d,%d,%08lx): stub\n", this, d3dp, d3dv, dwFlags); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%d,%08lx): stub\n", This, d3dp, d3dv, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_BeginIndexed(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_BeginIndexed(LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, LPVOID lpvert, DWORD numvert, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%d,%d,%p,%ld,%08lx): stub\n", this, d3dp, d3dv, lpvert, numvert, dwFlags); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvert, numvert, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_Vertex(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_Vertex(LPDIRECT3DDEVICE2 iface, LPVOID lpvert) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvert); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpvert); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_Index(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_Index(LPDIRECT3DDEVICE2 iface, WORD index) { - FIXME(ddraw, "(%p)->(%d): stub\n", this, index); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d): stub\n", This, index); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_End(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_End(LPDIRECT3DDEVICE2 iface, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%08lx): stub\n", this, dwFlags); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%08lx): stub\n", This, dwFlags); return DD_OK; } @@ -625,24 +652,26 @@ static HRESULT WINAPI IDirect3DDevice2_End(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_GetRenderState(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetRenderState(LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE d3drs, LPDWORD lprstate) { - FIXME(ddraw, "(%p)->(%d,%p): stub\n", this, d3drs, lprstate); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%p): stub\n", This, d3drs, lprstate); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_SetRenderState(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetRenderState(LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; + ICOM_THIS(IDirect3DDevice2Impl,iface); + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; - TRACE(ddraw, "(%p)->(%d,%ld)\n", this, dwRenderStateType, dwRenderState); + TRACE(ddraw, "(%p)->(%d,%ld)\n", This, dwRenderStateType, dwRenderState); /* Call the render state functions */ set_render_state(dwRenderStateType, dwRenderState, &(odev->rs)); @@ -652,26 +681,28 @@ static HRESULT WINAPI IDirect3DDevice2_SetRenderState(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_GetLightState(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetLightState(LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE d3dls, LPDWORD lplstate) { - FIXME(ddraw, "(%p)->(%d,%p): stub\n", this, d3dls, lplstate); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%p): stub\n", This, d3dls, lplstate); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_SetLightState(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetLightState(LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) { - FIXME(ddraw, "(%p)->(%d,%08lx): stub\n", this, dwLightStateType, dwLightState); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%08lx): stub\n", This, dwLightStateType, dwLightState); switch (dwLightStateType) { case D3DLIGHTSTATE_MATERIAL: { /* 1 */ - LPDIRECT3DMATERIAL2 mat = (LPDIRECT3DMATERIAL2) dwLightState; + IDirect3DMaterial2Impl* mat = (IDirect3DMaterial2Impl*) dwLightState; if (mat != NULL) { mat->activate(mat); @@ -715,13 +746,14 @@ static HRESULT WINAPI IDirect3DDevice2_SetLightState(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_SetTransform(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetTransform(LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; + ICOM_THIS(IDirect3DDevice2Impl,iface); + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; - FIXME(ddraw, "(%p)->(%d,%p): stub\n", this, d3dts, lpmatrix); + FIXME(ddraw, "(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix); /* Using a trial and failure approach, I found that the order of Direct3D transformations that works best is : @@ -784,22 +816,24 @@ static HRESULT WINAPI IDirect3DDevice2_SetTransform(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_GetTransform(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetTransform(LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix) { - FIXME(ddraw, "(%p)->(%d,%p): stub\n", this, d3dts, lpmatrix); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_MultiplyTransform(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_MultiplyTransform(LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix) { - FIXME(ddraw, "(%p)->(%d,%p): stub\n", this, d3dts, lpmatrix); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix); return DD_OK; } @@ -840,7 +874,7 @@ static HRESULT WINAPI IDirect3DDevice2_MultiplyTransform(LPDIRECT3DDEVICE2 this, glMatrixMode(GL_PROJECTION); \ glLoadIdentity(); \ \ - if (this->current_viewport == NULL) { \ + if (This->current_viewport == NULL) { \ ERR(ddraw, "No current viewport !\n"); \ /* Using standard values */ \ height = 640.0; \ @@ -848,16 +882,16 @@ static HRESULT WINAPI IDirect3DDevice2_MultiplyTransform(LPDIRECT3DDEVICE2 this, minZ = -10.0; \ maxZ = 10.0; \ } else { \ - if (this->current_viewport->use_vp2) { \ - height = (GLdouble) this->current_viewport->viewport.vp2.dwHeight; \ - width = (GLdouble) this->current_viewport->viewport.vp2.dwWidth; \ - minZ = (GLdouble) this->current_viewport->viewport.vp2.dvMinZ; \ - maxZ = (GLdouble) this->current_viewport->viewport.vp2.dvMaxZ; \ + if (This->current_viewport->use_vp2) { \ + height = (GLdouble) This->current_viewport->viewport.vp2.dwHeight; \ + width = (GLdouble) This->current_viewport->viewport.vp2.dwWidth; \ + minZ = (GLdouble) This->current_viewport->viewport.vp2.dvMinZ; \ + maxZ = (GLdouble) This->current_viewport->viewport.vp2.dvMaxZ; \ } else { \ - height = (GLdouble) this->current_viewport->viewport.vp1.dwHeight; \ - width = (GLdouble) this->current_viewport->viewport.vp1.dwWidth; \ - minZ = (GLdouble) this->current_viewport->viewport.vp1.dvMinZ; \ - maxZ = (GLdouble) this->current_viewport->viewport.vp1.dvMaxZ; \ + height = (GLdouble) This->current_viewport->viewport.vp1.dwHeight; \ + width = (GLdouble) This->current_viewport->viewport.vp1.dwWidth; \ + minZ = (GLdouble) This->current_viewport->viewport.vp1.dvMinZ; \ + maxZ = (GLdouble) This->current_viewport->viewport.vp1.dvMaxZ; \ } \ } \ \ @@ -965,17 +999,18 @@ static HRESULT WINAPI IDirect3DDevice2_MultiplyTransform(LPDIRECT3DDEVICE2 this, TRACE(ddraw, "End\n"); -static HRESULT WINAPI IDirect3DDevice2_DrawPrimitive(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_DrawPrimitive(LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, LPVOID lpvertex, DWORD vertcount, DWORD dwFlags) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; + ICOM_THIS(IDirect3DDevice2Impl,iface); + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; int vx_index; - TRACE(ddraw, "(%p)->(%d,%d,%p,%ld,%08lx): stub\n", this, d3dp, d3dv, lpvertex, vertcount, dwFlags); + TRACE(ddraw, "(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, dwFlags); DRAW_PRIMITIVE(vertcount, vx_index); @@ -984,7 +1019,7 @@ static HRESULT WINAPI IDirect3DDevice2_DrawPrimitive(LPDIRECT3DDEVICE2 this, -static HRESULT WINAPI IDirect3DDevice2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, LPVOID lpvertex, @@ -993,10 +1028,11 @@ static HRESULT WINAPI IDirect3DDevice2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 th DWORD indexcount, DWORD dwFlags) { - OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) this; + ICOM_THIS(IDirect3DDevice2Impl,iface); + OpenGL_IDirect3DDevice2 *odev = (OpenGL_IDirect3DDevice2 *) This; int vx_index; - TRACE(ddraw, "(%p)->(%d,%d,%p,%ld,%p,%ld,%08lx): stub\n", this, d3dp, d3dv, lpvertex, vertcount, lpindexes, indexcount, dwFlags); + TRACE(ddraw, "(%p)->(%d,%d,%p,%ld,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, lpindexes, indexcount, dwFlags); DRAW_PRIMITIVE(indexcount, lpindexes[vx_index]); @@ -1005,20 +1041,22 @@ static HRESULT WINAPI IDirect3DDevice2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 th -static HRESULT WINAPI IDirect3DDevice2_SetClipStatus(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_SetClipStatus(LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpcs); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpcs); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice2_GetClipStatus(LPDIRECT3DDEVICE2 this, +static HRESULT WINAPI IDirect3DDevice2Impl_GetClipStatus(LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpcs); + ICOM_THIS(IDirect3DDevice2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpcs); return DD_OK; } @@ -1033,48 +1071,48 @@ static HRESULT WINAPI IDirect3DDevice2_GetClipStatus(LPDIRECT3DDEVICE2 this, * OpenGL-specific VTable */ -static IDirect3DDevice2_VTable OpenGL_vtable = { - IDirect3DDevice2_QueryInterface, - IDirect3DDevice2_AddRef, - IDirect3DDevice2_Release, +static ICOM_VTABLE(IDirect3DDevice2) OpenGL_vtable = { + IDirect3DDevice2Impl_QueryInterface, + IDirect3DDevice2Impl_AddRef, + IDirect3DDevice2Impl_Release, /*** IDirect3DDevice2 methods ***/ - IDirect3DDevice2_GetCaps, - IDirect3DDevice2_SwapTextureHandles, - IDirect3DDevice2_GetStats, - IDirect3DDevice2_AddViewport, - IDirect3DDevice2_DeleteViewport, - IDirect3DDevice2_NextViewport, - IDirect3DDevice2_EnumTextureFormats, - IDirect3DDevice2_BeginScene, - IDirect3DDevice2_EndScene, - IDirect3DDevice2_GetDirect3D, + IDirect3DDevice2Impl_GetCaps, + IDirect3DDevice2Impl_SwapTextureHandles, + IDirect3DDevice2Impl_GetStats, + IDirect3DDevice2Impl_AddViewport, + IDirect3DDevice2Impl_DeleteViewport, + IDirect3DDevice2Impl_NextViewport, + IDirect3DDevice2Impl_EnumTextureFormats, + IDirect3DDevice2Impl_BeginScene, + IDirect3DDevice2Impl_EndScene, + IDirect3DDevice2Impl_GetDirect3D, /*** DrawPrimitive API ***/ - IDirect3DDevice2_SetCurrentViewport, - IDirect3DDevice2_GetCurrentViewport, + IDirect3DDevice2Impl_SetCurrentViewport, + IDirect3DDevice2Impl_GetCurrentViewport, - IDirect3DDevice2_SetRenderTarget, - IDirect3DDevice2_GetRenderTarget, + IDirect3DDevice2Impl_SetRenderTarget, + IDirect3DDevice2Impl_GetRenderTarget, - IDirect3DDevice2_Begin, - IDirect3DDevice2_BeginIndexed, - IDirect3DDevice2_Vertex, - IDirect3DDevice2_Index, - IDirect3DDevice2_End, + IDirect3DDevice2Impl_Begin, + IDirect3DDevice2Impl_BeginIndexed, + IDirect3DDevice2Impl_Vertex, + IDirect3DDevice2Impl_Index, + IDirect3DDevice2Impl_End, - IDirect3DDevice2_GetRenderState, - IDirect3DDevice2_SetRenderState, - IDirect3DDevice2_GetLightState, - IDirect3DDevice2_SetLightState, - IDirect3DDevice2_SetTransform, - IDirect3DDevice2_GetTransform, - IDirect3DDevice2_MultiplyTransform, + IDirect3DDevice2Impl_GetRenderState, + IDirect3DDevice2Impl_SetRenderState, + IDirect3DDevice2Impl_GetLightState, + IDirect3DDevice2Impl_SetLightState, + IDirect3DDevice2Impl_SetTransform, + IDirect3DDevice2Impl_GetTransform, + IDirect3DDevice2Impl_MultiplyTransform, - IDirect3DDevice2_DrawPrimitive, - IDirect3DDevice2_DrawIndexedPrimitive, + IDirect3DDevice2Impl_DrawPrimitive, + IDirect3DDevice2Impl_DrawIndexedPrimitive, - IDirect3DDevice2_SetClipStatus, - IDirect3DDevice2_GetClipStatus, + IDirect3DDevice2Impl_SetClipStatus, + IDirect3DDevice2Impl_GetClipStatus, }; /******************************************************************************* @@ -1097,7 +1135,7 @@ float id_mat[16] = { 0.0, 0.0, 0.0, 1.0 }; -int is_OpenGL_dx3(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE *device) +int is_OpenGL_dx3(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDeviceImpl** device) { if (!memcmp(&IID_D3DDEVICE_OpenGL,rguid,sizeof(IID_D3DDEVICE_OpenGL))) { OpenGL_IDirect3DDevice *odev; @@ -1145,57 +1183,62 @@ int is_OpenGL_dx3(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE /******************************************************************************* * Direct3DDevice */ -static HRESULT WINAPI IDirect3DDevice_QueryInterface(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_QueryInterface(LPDIRECT3DDEVICE iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DDeviceImpl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DDevice_AddRef(LPDIRECT3DDEVICE this) +static ULONG WINAPI IDirect3DDeviceImpl_AddRef(LPDIRECT3DDEVICE iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DDevice_Release(LPDIRECT3DDEVICE this) +static ULONG WINAPI IDirect3DDeviceImpl_Release(LPDIRECT3DDEVICE iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DDeviceImpl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static HRESULT WINAPI IDirect3DDevice_Initialize(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_Initialize(LPDIRECT3DDEVICE iface, LPDIRECT3D lpd3d, LPGUID lpGUID, LPD3DDEVICEDESC lpd3ddvdesc) { - TRACE(ddraw, "(%p)->(%p,%p,%p): stub\n", this, lpd3d,lpGUID, lpd3ddvdesc); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p,%p): stub\n", This, lpd3d,lpGUID, lpd3ddvdesc); return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI IDirect3DDevice_GetCaps(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_GetCaps(LPDIRECT3DDEVICE iface, LPD3DDEVICEDESC lpD3DHWDevDesc, LPD3DDEVICEDESC lpD3DSWDevDesc) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DHWDevDesc, lpD3DSWDevDesc); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpD3DHWDevDesc, lpD3DSWDevDesc); fill_opengl_caps(lpD3DHWDevDesc, lpD3DSWDevDesc); @@ -1203,76 +1246,84 @@ static HRESULT WINAPI IDirect3DDevice_GetCaps(LPDIRECT3DDEVICE this, } -static HRESULT WINAPI IDirect3DDevice_SwapTextureHandles(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_SwapTextureHandles(LPDIRECT3DDEVICE iface, LPDIRECT3DTEXTURE lpD3DTex1, LPDIRECT3DTEXTURE lpD3DTex2) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DTex1, lpD3DTex2); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpD3DTex1, lpD3DTex2); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_CreateExecuteBuffer(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_CreateExecuteBuffer(LPDIRECT3DDEVICE iface, LPD3DEXECUTEBUFFERDESC lpDesc, LPDIRECT3DEXECUTEBUFFER *lplpDirect3DExecuteBuffer, IUnknown *pUnkOuter) { - TRACE(ddraw, "(%p)->(%p,%p,%p)\n", this, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p,%p)\n", This, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter); - *lplpDirect3DExecuteBuffer = d3dexecutebuffer_create(this, lpDesc); + *lplpDirect3DExecuteBuffer = d3dexecutebuffer_create(This, lpDesc); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_GetStats(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_GetStats(LPDIRECT3DDEVICE iface, LPD3DSTATS lpD3DStats) { - TRACE(ddraw, "(%p)->(%p): stub\n", this, lpD3DStats); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p): stub\n", This, lpD3DStats); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_Execute(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_Execute(LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer, LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags) { - TRACE(ddraw, "(%p)->(%p,%p,%08ld): stub\n", this, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p,%08ld): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags); /* Put this as the default context */ /* Execute... */ - lpDirect3DExecuteBuffer->execute(lpDirect3DExecuteBuffer, this, lpDirect3DViewport); + ((IDirect3DExecuteBufferImpl*)lpDirect3DExecuteBuffer)->execute(lpDirect3DExecuteBuffer, iface, lpDirect3DViewport); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_AddViewport(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_AddViewport(LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DDeviceImpl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + FIXME(ddraw, "(%p)->(%p): stub\n", This, ilpvp); /* Adds this viewport to the viewport list */ - lpvp->next = this->viewport_list; - this->viewport_list = lpvp; + ilpvp->next = This->viewport_list; + This->viewport_list = ilpvp; return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_DeleteViewport(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_DeleteViewport(LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp) { - LPDIRECT3DVIEWPORT cur, prev; - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DDeviceImpl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + IDirect3DViewport2Impl *cur, *prev; + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpvp); /* Finds this viewport in the list */ prev = NULL; - cur = this->viewport_list; - while ((cur != NULL) && (cur != lpvp)) { + cur = This->viewport_list; + while ((cur != NULL) && (cur != ilpvp)) { prev = cur; cur = cur->next; } @@ -1281,7 +1332,7 @@ static HRESULT WINAPI IDirect3DDevice_DeleteViewport(LPDIRECT3DDEVICE this, /* And remove it */ if (prev == NULL) - this->viewport_list = cur->next; + This->viewport_list = cur->next; else prev->next = cur->next; @@ -1290,28 +1341,31 @@ static HRESULT WINAPI IDirect3DDevice_DeleteViewport(LPDIRECT3DDEVICE this, -static HRESULT WINAPI IDirect3DDevice_NextViewport(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_NextViewport(LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp, LPDIRECT3DVIEWPORT* lplpvp, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", this, lpvp, lpvp, dwFlags); + ICOM_THIS(IDirect3DDeviceImpl,iface); + IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; + IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp; + FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", This, ilpvp, ilplpvp, dwFlags); switch (dwFlags) { case D3DNEXT_NEXT: - *lplpvp = lpvp->next; + *ilplpvp = ilpvp->next; break; case D3DNEXT_HEAD: - *lplpvp = this->viewport_list; + *ilplpvp = This->viewport_list; break; case D3DNEXT_TAIL: - lpvp = this->viewport_list; - while (lpvp->next != NULL) - lpvp = lpvp->next; + ilpvp = This->viewport_list; + while (ilpvp->next != NULL) + ilpvp = ilpvp->next; - *lplpvp = lpvp; + *ilplpvp = ilpvp; break; default: @@ -1321,43 +1375,47 @@ static HRESULT WINAPI IDirect3DDevice_NextViewport(LPDIRECT3DDEVICE this, return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_Pick(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_Pick(LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer, LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags, LPD3DRECT lpRect) { - TRACE(ddraw, "(%p)->(%p,%p,%08lx,%p): stub\n", this, lpDirect3DExecuteBuffer, lpDirect3DViewport, + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p,%08lx,%p): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_GetPickRecords(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_GetPickRecords(LPDIRECT3DDEVICE iface, LPDWORD lpCount, LPD3DPICKRECORD lpD3DPickRec) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpCount, lpD3DPickRec); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpCount, lpD3DPickRec); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_EnumTextureFormats(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_EnumTextureFormats(LPDIRECT3DDEVICE iface, LPD3DENUMTEXTUREFORMATSCALLBACK lpd3dEnumTextureProc, LPVOID lpArg) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpd3dEnumTextureProc, lpArg); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpd3dEnumTextureProc, lpArg); return enum_texture_format_OpenGL(lpd3dEnumTextureProc, lpArg); } -static HRESULT WINAPI IDirect3DDevice_CreateMatrix(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_CreateMatrix(LPDIRECT3DDEVICE iface, LPD3DMATRIXHANDLE lpD3DMatHandle) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpD3DMatHandle); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpD3DMatHandle); *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(D3DMATRIX)); @@ -1365,11 +1423,12 @@ static HRESULT WINAPI IDirect3DDevice_CreateMatrix(LPDIRECT3DDEVICE this, } -static HRESULT WINAPI IDirect3DDevice_SetMatrix(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_SetMatrix(LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle, const LPD3DMATRIX lpD3DMatrix) { - TRACE(ddraw, "(%p)->(%08lx,%p)\n", this, d3dMatHandle, lpD3DMatrix); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%08lx,%p)\n", This, d3dMatHandle, lpD3DMatrix); dump_mat(lpD3DMatrix); @@ -1379,11 +1438,12 @@ static HRESULT WINAPI IDirect3DDevice_SetMatrix(LPDIRECT3DDEVICE this, } -static HRESULT WINAPI IDirect3DDevice_GetMatrix(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_GetMatrix(LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE D3DMatHandle, LPD3DMATRIX lpD3DMatrix) { - TRACE(ddraw, "(%p)->(%08lx,%p)\n", this, D3DMatHandle, lpD3DMatrix); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%08lx,%p)\n", This, D3DMatHandle, lpD3DMatrix); *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle); @@ -1391,10 +1451,11 @@ static HRESULT WINAPI IDirect3DDevice_GetMatrix(LPDIRECT3DDEVICE this, } -static HRESULT WINAPI IDirect3DDevice_DeleteMatrix(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_DeleteMatrix(LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle) { - TRACE(ddraw, "(%p)->(%08lx)\n", this, d3dMatHandle); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%08lx)\n", This, d3dMatHandle); HeapFree(GetProcessHeap(),0, (void *) d3dMatHandle); @@ -1402,14 +1463,15 @@ static HRESULT WINAPI IDirect3DDevice_DeleteMatrix(LPDIRECT3DDEVICE this, } -static HRESULT WINAPI IDirect3DDevice_BeginScene(LPDIRECT3DDEVICE this) +static HRESULT WINAPI IDirect3DDeviceImpl_BeginScene(LPDIRECT3DDEVICE iface) { - /* OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) this; */ + ICOM_THIS(IDirect3DDeviceImpl,iface); + /* OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) This; */ - FIXME(ddraw, "(%p)->(): stub\n", this); + FIXME(ddraw, "(%p)->(): stub\n", This); /* We get the pointer to the surface (should be done on flip) */ - /* odev->zb->pbuf = this->surface->s.surface_desc.y.lpSurface; */ + /* odev->zb->pbuf = This->surface->s.surface_desc.y.lpSurface; */ return DD_OK; } @@ -1417,20 +1479,21 @@ static HRESULT WINAPI IDirect3DDevice_BeginScene(LPDIRECT3DDEVICE this) /* This is for the moment copy-pasted from IDirect3DDevice2... Will make a common function ... */ -static HRESULT WINAPI IDirect3DDevice_EndScene(LPDIRECT3DDEVICE this) +static HRESULT WINAPI IDirect3DDeviceImpl_EndScene(LPDIRECT3DDEVICE iface) { - OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) this; - LPDIRECTDRAWSURFACE3 surf = (LPDIRECTDRAWSURFACE3) this->surface; + ICOM_THIS(IDirect3DDeviceImpl,iface); + OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) This; + LPDIRECTDRAWSURFACE3 surf = (LPDIRECTDRAWSURFACE3) This->surface; DDSURFACEDESC sdesc; int x,y; unsigned char *src; unsigned short *dest; - FIXME(ddraw, "(%p)->(): stub\n", this); + FIXME(ddraw, "(%p)->(): stub\n", This); /* Here we copy back the OpenGL scene to the the DDraw surface */ /* First, lock the surface */ - surf->lpvtbl->fnLock(surf,NULL,&sdesc,DDLOCK_WRITEONLY,0); + IDirectDrawSurface3_Lock(surf,NULL,&sdesc,DDLOCK_WRITEONLY,0); /* The copy the OpenGL buffer to this surface */ @@ -1458,16 +1521,17 @@ static HRESULT WINAPI IDirect3DDevice_EndScene(LPDIRECT3DDEVICE this) } /* Unlock the surface */ - surf->lpvtbl->fnUnlock(surf,sdesc.y.lpSurface); + IDirectDrawSurface3_Unlock(surf,sdesc.y.lpSurface); return DD_OK; } -static HRESULT WINAPI IDirect3DDevice_GetDirect3D(LPDIRECT3DDEVICE this, +static HRESULT WINAPI IDirect3DDeviceImpl_GetDirect3D(LPDIRECT3DDEVICE iface, LPDIRECT3D *lpDirect3D) { - TRACE(ddraw, "(%p)->(%p): stub\n", this, lpDirect3D); + ICOM_THIS(IDirect3DDeviceImpl,iface); + TRACE(ddraw, "(%p)->(%p): stub\n", This, lpDirect3D); return DD_OK; } @@ -1477,29 +1541,29 @@ static HRESULT WINAPI IDirect3DDevice_GetDirect3D(LPDIRECT3DDEVICE this, /******************************************************************************* * Direct3DDevice VTable */ -static IDirect3DDevice_VTable OpenGL_vtable_dx3 = { - IDirect3DDevice_QueryInterface, - IDirect3DDevice_AddRef, - IDirect3DDevice_Release, - IDirect3DDevice_Initialize, - IDirect3DDevice_GetCaps, - IDirect3DDevice_SwapTextureHandles, - IDirect3DDevice_CreateExecuteBuffer, - IDirect3DDevice_GetStats, - IDirect3DDevice_Execute, - IDirect3DDevice_AddViewport, - IDirect3DDevice_DeleteViewport, - IDirect3DDevice_NextViewport, - IDirect3DDevice_Pick, - IDirect3DDevice_GetPickRecords, - IDirect3DDevice_EnumTextureFormats, - IDirect3DDevice_CreateMatrix, - IDirect3DDevice_SetMatrix, - IDirect3DDevice_GetMatrix, - IDirect3DDevice_DeleteMatrix, - IDirect3DDevice_BeginScene, - IDirect3DDevice_EndScene, - IDirect3DDevice_GetDirect3D, +static ICOM_VTABLE(IDirect3DDevice) OpenGL_vtable_dx3 = { + IDirect3DDeviceImpl_QueryInterface, + IDirect3DDeviceImpl_AddRef, + IDirect3DDeviceImpl_Release, + IDirect3DDeviceImpl_Initialize, + IDirect3DDeviceImpl_GetCaps, + IDirect3DDeviceImpl_SwapTextureHandles, + IDirect3DDeviceImpl_CreateExecuteBuffer, + IDirect3DDeviceImpl_GetStats, + IDirect3DDeviceImpl_Execute, + IDirect3DDeviceImpl_AddViewport, + IDirect3DDeviceImpl_DeleteViewport, + IDirect3DDeviceImpl_NextViewport, + IDirect3DDeviceImpl_Pick, + IDirect3DDeviceImpl_GetPickRecords, + IDirect3DDeviceImpl_EnumTextureFormats, + IDirect3DDeviceImpl_CreateMatrix, + IDirect3DDeviceImpl_SetMatrix, + IDirect3DDeviceImpl_GetMatrix, + IDirect3DDeviceImpl_DeleteMatrix, + IDirect3DDeviceImpl_BeginScene, + IDirect3DDeviceImpl_EndScene, + IDirect3DDeviceImpl_GetDirect3D, }; #else /* HAVE_MESAGL */ @@ -1508,7 +1572,7 @@ int d3d_OpenGL(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) { return 0; } -int is_OpenGL(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE2 *device, LPDIRECT3D2 d3d) +int is_OpenGL(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDevice2Impl** device, IDirect3D2Impl* d3d) { return 0; } @@ -1517,7 +1581,7 @@ int d3d_OpenGL_dx3(LPD3DENUMDEVICESCALLBACK cb, LPVOID context) { return 0; } -int is_OpenGL_dx3(REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE *device) +int is_OpenGL_dx3(REFCLSID rguid, IDirectDrawSurfaceImpl* surface, IDirect3DDeviceImpl** device) { return 0; } diff --git a/graphics/d3dexecutebuffer.c b/graphics/d3dexecutebuffer.c index 0b3d21e24a7..4539ec18d38 100644 --- a/graphics/d3dexecutebuffer.c +++ b/graphics/d3dexecutebuffer.c @@ -46,7 +46,7 @@ typedef struct { D3DVALUE v; } OGL_LVertex; -static IDirect3DExecuteBuffer_VTable executebuffer_vtable; +static ICOM_VTABLE(IDirect3DExecuteBuffer) executebuffer_vtable; /******************************************************************************* * ExecuteBuffer static functions @@ -169,18 +169,20 @@ void _dump_executedata(LPD3DEXECUTEDATA lpData) { static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, LPDIRECT3DDEVICE dev, LPDIRECT3DVIEWPORT vp) { - /* DWORD bs = lpBuff->desc.dwBufferSize; */ - DWORD vs = lpBuff->data.dwVertexOffset; - /* DWORD vc = lpBuff->data.dwVertexCount; */ - DWORD is = lpBuff->data.dwInstructionOffset; - /* DWORD il = lpBuff->data.dwInstructionLength; */ + IDirect3DExecuteBufferImpl* ilpBuff=(IDirect3DExecuteBufferImpl*)lpBuff; + IDirect3DViewport2Impl* ivp=(IDirect3DViewport2Impl*)vp; + /* DWORD bs = ilpBuff->desc.dwBufferSize; */ + DWORD vs = ilpBuff->data.dwVertexOffset; + /* DWORD vc = ilpBuff->data.dwVertexCount; */ + DWORD is = ilpBuff->data.dwInstructionOffset; + /* DWORD il = ilpBuff->data.dwInstructionLength; */ - void *instr = lpBuff->desc.lpData + is; + void *instr = ilpBuff->desc.lpData + is; OpenGL_IDirect3DDevice *odev = (OpenGL_IDirect3DDevice *) dev; TRACE(ddraw, "ExecuteData : \n"); if (TRACE_ON(ddraw)) - _dump_executedata(&(lpBuff->data)); + _dump_executedata(&(ilpBuff->data)); while (1) { LPD3DINSTRUCTION current = (LPD3DINSTRUCTION) instr; @@ -213,13 +215,13 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, 0.0, 0.0, 1.0, 1.0 }; - OGL_Vertex *vx = (OGL_Vertex *) lpBuff->vertex_data; - OGL_LVertex *l_vx = (OGL_LVertex *) lpBuff->vertex_data; - D3DTLVERTEX *tl_vx = (D3DTLVERTEX *) lpBuff->vertex_data; + OGL_Vertex *vx = (OGL_Vertex *) ilpBuff->vertex_data; + OGL_LVertex *l_vx = (OGL_LVertex *) ilpBuff->vertex_data; + D3DTLVERTEX *tl_vx = (D3DTLVERTEX *) ilpBuff->vertex_data; TRACE(ddraw, "TRIANGLE (%d)\n", count); - switch (lpBuff->vertex_type) { + switch (ilpBuff->vertex_type) { case D3DVT_VERTEX: /* This time, there is lighting */ glEnable(GL_LIGHTING); @@ -271,7 +273,7 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, glMatrixMode(GL_PROJECTION); glLoadIdentity(); - if (vp == NULL) { + if (ivp == NULL) { ERR(ddraw, "No current viewport !\n"); /* Using standard values */ height = 640.0; @@ -279,10 +281,10 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, minZ = -10.0; maxZ = 10.0; } else { - height = (GLdouble) vp->viewport.vp1.dwHeight; - width = (GLdouble) vp->viewport.vp1.dwWidth; - minZ = (GLdouble) vp->viewport.vp1.dvMinZ; - maxZ = (GLdouble) vp->viewport.vp1.dvMaxZ; + height = (GLdouble) ivp->viewport.vp1.dwHeight; + width = (GLdouble) ivp->viewport.vp1.dwWidth; + minZ = (GLdouble) ivp->viewport.vp1.dvMinZ; + maxZ = (GLdouble) ivp->viewport.vp1.dvMaxZ; if (minZ == maxZ) { /* I do not know why, but many Dx 3.0 games have minZ = maxZ = 0.0 */ @@ -299,7 +301,7 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, break; } - switch (lpBuff->vertex_type) { + switch (ilpBuff->vertex_type) { case D3DVT_VERTEX: TRIANGLE_LOOP(DO_VERTEX); break; @@ -397,7 +399,7 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, /* Handle the state transform */ switch (ci->t.dlstLightStateType) { case D3DLIGHTSTATE_MATERIAL: { - LPDIRECT3DMATERIAL mat = (LPDIRECT3DMATERIAL) ci->v.dwArg[0]; + IDirect3DMaterial2Impl* mat = (IDirect3DMaterial2Impl*) ci->v.dwArg[0]; TRACE(ddraw, " MATERIAL\n"); if (mat != NULL) { @@ -522,14 +524,14 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, /* Enough for the moment */ if (ci->dwFlags == D3DPROCESSVERTICES_TRANSFORMLIGHT) { int nb; - D3DVERTEX *src = ((LPD3DVERTEX) (lpBuff->desc.lpData + vs)) + ci->wStart; - OGL_Vertex *dst = ((OGL_Vertex *) (lpBuff->vertex_data)) + ci->wDest; + D3DVERTEX *src = ((LPD3DVERTEX) (ilpBuff->desc.lpData + vs)) + ci->wStart; + OGL_Vertex *dst = ((OGL_Vertex *) (ilpBuff->vertex_data)) + ci->wDest; D3DMATRIX *mat = odev->world_mat; TRACE(ddraw, " World Matrix : (%p)\n", mat); dump_mat(mat); - lpBuff->vertex_type = D3DVT_VERTEX; + ilpBuff->vertex_type = D3DVT_VERTEX; for (nb = 0; nb < ci->dwCount; nb++) { /* For the moment, no normal transformation... */ @@ -551,14 +553,14 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, } } else if (ci->dwFlags == D3DPROCESSVERTICES_TRANSFORM) { int nb; - D3DLVERTEX *src = ((LPD3DLVERTEX) (lpBuff->desc.lpData + vs)) + ci->wStart; - OGL_LVertex *dst = ((OGL_LVertex *) (lpBuff->vertex_data)) + ci->wDest; + D3DLVERTEX *src = ((LPD3DLVERTEX) (ilpBuff->desc.lpData + vs)) + ci->wStart; + OGL_LVertex *dst = ((OGL_LVertex *) (ilpBuff->vertex_data)) + ci->wDest; D3DMATRIX *mat = odev->world_mat; TRACE(ddraw, " World Matrix : (%p)\n", mat); dump_mat(mat); - lpBuff->vertex_type = D3DVT_LVERTEX; + ilpBuff->vertex_type = D3DVT_LVERTEX; for (nb = 0; nb < ci->dwCount; nb++) { dst->c = src->c.color; @@ -576,10 +578,10 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, dst++; } } else if (ci->dwFlags == D3DPROCESSVERTICES_COPY) { - D3DTLVERTEX *src = ((LPD3DTLVERTEX) (lpBuff->desc.lpData + vs)) + ci->wStart; - D3DTLVERTEX *dst = ((LPD3DTLVERTEX) (lpBuff->vertex_data)) + ci->wDest; + D3DTLVERTEX *src = ((LPD3DTLVERTEX) (ilpBuff->desc.lpData + vs)) + ci->wStart; + D3DTLVERTEX *dst = ((LPD3DTLVERTEX) (ilpBuff->vertex_data)) + ci->wDest; - lpBuff->vertex_type = D3DVT_TLVERTEX; + ilpBuff->vertex_type = D3DVT_TLVERTEX; memcpy(dst, src, ci->dwCount * sizeof(D3DTLVERTEX)); } else { @@ -611,7 +613,7 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, for (i = 0; i < count; i++) { LPD3DBRANCH ci = (LPD3DBRANCH) instr; - if ((lpBuff->data.dsStatus.dwStatus & ci->dwMask) == ci->dwValue) { + if ((ilpBuff->data.dsStatus.dwStatus & ci->dwMask) == ci->dwValue) { if (!ci->bNegate) { TRACE(ddraw," Should branch to %ld\n", ci->dwOffset); } @@ -638,7 +640,7 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, for (i = 0; i < count; i++) { LPD3DSTATUS ci = (LPD3DSTATUS) instr; - lpBuff->data.dsStatus = *ci; + ilpBuff->data.dsStatus = *ci; instr += size; } @@ -658,11 +660,11 @@ static void execute(LPDIRECT3DEXECUTEBUFFER lpBuff, /******************************************************************************* * ExecuteBuffer Creation functions */ -LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(LPDIRECT3DDEVICE d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc) +LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(IDirect3DDeviceImpl* d3ddev, LPD3DEXECUTEBUFFERDESC lpDesc) { - LPDIRECT3DEXECUTEBUFFER eb; + IDirect3DExecuteBufferImpl* eb; - eb = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DExecuteBuffer)); + eb = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DExecuteBufferImpl)); eb->ref = 1; eb->lpvtbl = &executebuffer_vtable; eb->d3ddev = d3ddev; @@ -693,97 +695,104 @@ LPDIRECT3DEXECUTEBUFFER d3dexecutebuffer_create(LPDIRECT3DDEVICE d3ddev, LPD3DEX eb->execute = execute; - return eb; + return (LPDIRECT3DEXECUTEBUFFER)eb; } /******************************************************************************* - * IDirect3DLight methods + * IDirect3ExecuteBuffer methods */ -static HRESULT WINAPI IDirect3DExecuteBuffer_QueryInterface(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_QueryInterface(LPDIRECT3DEXECUTEBUFFER iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DExecuteBuffer_AddRef(LPDIRECT3DEXECUTEBUFFER this) +static ULONG WINAPI IDirect3DExecuteBufferImpl_AddRef(LPDIRECT3DEXECUTEBUFFER iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DExecuteBuffer_Release(LPDIRECT3DEXECUTEBUFFER this) +static ULONG WINAPI IDirect3DExecuteBufferImpl_Release(LPDIRECT3DEXECUTEBUFFER iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - if ((this->desc.lpData != NULL) && this->need_free) - HeapFree(GetProcessHeap(),0,this->desc.lpData); + if (!--(This->ref)) { + if ((This->desc.lpData != NULL) && This->need_free) + HeapFree(GetProcessHeap(),0,This->desc.lpData); - if (this->vertex_data != NULL) - HeapFree(GetProcessHeap(),0,this->vertex_data); + if (This->vertex_data != NULL) + HeapFree(GetProcessHeap(),0,This->vertex_data); - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static HRESULT WINAPI IDirect3DExecuteBuffer_Initialize(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Initialize(LPDIRECT3DEXECUTEBUFFER iface, LPDIRECT3DDEVICE lpDirect3DDevice, LPD3DEXECUTEBUFFERDESC lpDesc) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpDirect3DDevice, lpDesc); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lpDirect3DDevice, lpDesc); return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_Lock(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Lock(LPDIRECT3DEXECUTEBUFFER iface, LPD3DEXECUTEBUFFERDESC lpDesc) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpDesc); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpDesc); /* Copies the buffer description */ - *lpDesc = this->desc; + *lpDesc = This->desc; return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_Unlock(LPDIRECT3DEXECUTEBUFFER this) +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Unlock(LPDIRECT3DEXECUTEBUFFER iface) { - TRACE(ddraw, "(%p)->()\n", this); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->()\n", This); return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_SetExecuteData(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_SetExecuteData(LPDIRECT3DEXECUTEBUFFER iface, LPD3DEXECUTEDATA lpData) { + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); DWORD nbvert; - TRACE(ddraw, "(%p)->(%p)\n", this, lpData); + TRACE(ddraw, "(%p)->(%p)\n", This, lpData); - this->data = *lpData; + This->data = *lpData; /* Get the number of vertices in the execute buffer */ - nbvert = this->data.dwVertexCount; + nbvert = This->data.dwVertexCount; /* Prepares the transformed vertex buffer */ - if (this->vertex_data != NULL) - HeapFree(GetProcessHeap(), 0, this->vertex_data); - this->vertex_data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,nbvert * sizeof(OGL_Vertex)); + if (This->vertex_data != NULL) + HeapFree(GetProcessHeap(), 0, This->vertex_data); + This->vertex_data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,nbvert * sizeof(OGL_Vertex)); if (TRACE_ON(ddraw)) { @@ -793,31 +802,34 @@ static HRESULT WINAPI IDirect3DExecuteBuffer_SetExecuteData(LPDIRECT3DEXECUTEBUF return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_GetExecuteData(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_GetExecuteData(LPDIRECT3DEXECUTEBUFFER iface, LPD3DEXECUTEDATA lpData) { - TRACE(ddraw, "(%p)->(%p): stub\n", this, lpData); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->(%p): stub\n", This, lpData); - *lpData = this->data; + *lpData = This->data; return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_Validate(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Validate(LPDIRECT3DEXECUTEBUFFER iface, LPDWORD lpdwOffset, LPD3DVALIDATECALLBACK lpFunc, LPVOID lpUserArg, DWORD dwReserved) { - TRACE(ddraw, "(%p)->(%p,%p,%p,%lu)\n", this, lpdwOffset, lpFunc, lpUserArg, dwReserved); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p,%p,%lu)\n", This, lpdwOffset, lpFunc, lpUserArg, dwReserved); return DD_OK; } -static HRESULT WINAPI IDirect3DExecuteBuffer_Optimize(LPDIRECT3DEXECUTEBUFFER this, +static HRESULT WINAPI IDirect3DExecuteBufferImpl_Optimize(LPDIRECT3DEXECUTEBUFFER iface, DWORD dwReserved) { - TRACE(ddraw, "(%p)->(%lu)\n", this, dwReserved); + ICOM_THIS(IDirect3DExecuteBufferImpl,iface); + TRACE(ddraw, "(%p)->(%lu)\n", This, dwReserved); return DD_OK; } @@ -826,19 +838,19 @@ static HRESULT WINAPI IDirect3DExecuteBuffer_Optimize(LPDIRECT3DEXECUTEBUFFER th /******************************************************************************* * IDirect3DLight VTable */ -static IDirect3DExecuteBuffer_VTable executebuffer_vtable = { +static ICOM_VTABLE(IDirect3DExecuteBuffer) executebuffer_vtable = { /*** IUnknown methods ***/ - IDirect3DExecuteBuffer_QueryInterface, - IDirect3DExecuteBuffer_AddRef, - IDirect3DExecuteBuffer_Release, + IDirect3DExecuteBufferImpl_QueryInterface, + IDirect3DExecuteBufferImpl_AddRef, + IDirect3DExecuteBufferImpl_Release, /*** IDirect3DExecuteBuffer methods ***/ - IDirect3DExecuteBuffer_Initialize, - IDirect3DExecuteBuffer_Lock, - IDirect3DExecuteBuffer_Unlock, - IDirect3DExecuteBuffer_SetExecuteData, - IDirect3DExecuteBuffer_GetExecuteData, - IDirect3DExecuteBuffer_Validate, - IDirect3DExecuteBuffer_Optimize + IDirect3DExecuteBufferImpl_Initialize, + IDirect3DExecuteBufferImpl_Lock, + IDirect3DExecuteBufferImpl_Unlock, + IDirect3DExecuteBufferImpl_SetExecuteData, + IDirect3DExecuteBufferImpl_GetExecuteData, + IDirect3DExecuteBufferImpl_Validate, + IDirect3DExecuteBufferImpl_Optimize }; #endif /* HAVE_MESAGL */ diff --git a/graphics/d3dlight.c b/graphics/d3dlight.c index 7b19e252154..ae9b3a07fcc 100644 --- a/graphics/d3dlight.c +++ b/graphics/d3dlight.c @@ -17,7 +17,7 @@ #ifdef HAVE_MESAGL -static IDirect3DLight_VTable light_vtable; +static ICOM_VTABLE(IDirect3DLight) light_vtable; enum { D3D_1, @@ -31,8 +31,8 @@ static const float zero_value[] = { 0.0, 0.0, 0.0, 0.0 }; -static void update(LPDIRECT3DLIGHT this) { - switch (this->light.dltType) { +static void update(IDirect3DLightImpl* This) { + switch (This->light.dltType) { case D3DLIGHT_POINT: /* 1 */ TRACE(ddraw, "Activating POINT\n"); break; @@ -46,24 +46,24 @@ static void update(LPDIRECT3DLIGHT this) { TRACE(ddraw, "Activating DIRECTIONAL\n"); TRACE(ddraw, " direction : %f %f %f\n", - this->light.dvDirection.x.x, - this->light.dvDirection.y.y, - this->light.dvDirection.z.z); - _dump_colorvalue(" color ", this->light.dcvColor); + This->light.dvDirection.x.x, + This->light.dvDirection.y.y, + This->light.dvDirection.z.z); + _dump_colorvalue(" color ", This->light.dcvColor); - glLightfv(this->light_num, + glLightfv(This->light_num, GL_AMBIENT, (float *) zero_value); - glLightfv(this->light_num, + glLightfv(This->light_num, GL_DIFFUSE, - (float *) &(this->light.dcvColor)); + (float *) &(This->light.dcvColor)); - direction[0] = -this->light.dvDirection.x.x; - direction[1] = -this->light.dvDirection.y.y; - direction[2] = -this->light.dvDirection.z.z; + direction[0] = -This->light.dvDirection.x.x; + direction[1] = -This->light.dvDirection.y.y; + direction[2] = -This->light.dvDirection.z.z; direction[3] = 0.0; /* This is a directional light */ - glLightfv(this->light_num, + glLightfv(This->light_num, GL_POSITION, (float *) direction); } break; @@ -78,14 +78,14 @@ static void update(LPDIRECT3DLIGHT this) { } } -static void activate(LPDIRECT3DLIGHT this) { - update(this); +static void activate(IDirect3DLightImpl* This) { + update(This); /* If was not active, activate it */ - if (this->is_active == 0) { - glEnable(this->light_num); + if (This->is_active == 0) { + glEnable(This->light_num); - this->is_active = 1; + This->is_active = 1; } return ; @@ -94,80 +94,83 @@ static void activate(LPDIRECT3DLIGHT this) { /******************************************************************************* * Light Creation functions */ -LPDIRECT3DLIGHT d3dlight_create(LPDIRECT3D2 d3d) +LPDIRECT3DLIGHT d3dlight_create(IDirect3D2Impl* d3d2) { - LPDIRECT3DLIGHT mat; + IDirect3DLightImpl* light; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DLight)); - mat->ref = 1; - mat->lpvtbl = &light_vtable; - mat->d3d.d3d2 = d3d; - mat->type = D3D_2; + light = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DLightImpl)); + light->ref = 1; + light->lpvtbl = &light_vtable; + light->d3d.d3d2 = d3d2; + light->type = D3D_2; - mat->next = NULL; - mat->prev = NULL; - mat->activate = activate; - mat->is_active = 0; + light->next = NULL; + light->prev = NULL; + light->activate = activate; + light->is_active = 0; - return mat; + return (LPDIRECT3DLIGHT)light; } -LPDIRECT3DLIGHT d3dlight_create_dx3(LPDIRECT3D d3d) +LPDIRECT3DLIGHT d3dlight_create_dx3(IDirect3DImpl* d3d1) { - LPDIRECT3DLIGHT mat; + IDirect3DLightImpl* light; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DLight)); - mat->ref = 1; - mat->lpvtbl = &light_vtable; + light = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DLightImpl)); + light->ref = 1; + light->lpvtbl = &light_vtable; - mat->d3d.d3d = d3d; - mat->type = D3D_1; + light->d3d.d3d1 = d3d1; + light->type = D3D_1; - mat->next = NULL; - mat->prev = NULL; - mat->activate = activate; - mat->is_active = 0; + light->next = NULL; + light->prev = NULL; + light->activate = activate; + light->is_active = 0; - return mat; + return (LPDIRECT3DLIGHT)light; } /******************************************************************************* * IDirect3DLight methods */ -static HRESULT WINAPI IDirect3DLight_QueryInterface(LPDIRECT3DLIGHT this, +static HRESULT WINAPI IDirect3DLightImpl_QueryInterface(LPDIRECT3DLIGHT iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DLightImpl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DLight_AddRef(LPDIRECT3DLIGHT this) +static ULONG WINAPI IDirect3DLightImpl_AddRef(LPDIRECT3DLIGHT iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DLightImpl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DLight_Release(LPDIRECT3DLIGHT this) +static ULONG WINAPI IDirect3DLightImpl_Release(LPDIRECT3DLIGHT iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DLightImpl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } /*** IDirect3DLight methods ***/ @@ -176,54 +179,57 @@ static void dump_light(LPD3DLIGHT light) fprintf(stderr, " dwSize : %ld\n", light->dwSize); } -static HRESULT WINAPI IDirect3DLight_GetLight(LPDIRECT3DLIGHT this, +static HRESULT WINAPI IDirect3DLightImpl_GetLight(LPDIRECT3DLIGHT iface, LPD3DLIGHT lpLight) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpLight); + ICOM_THIS(IDirect3DLightImpl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpLight); if (TRACE_ON(ddraw)) dump_light(lpLight); /* Copies the light structure */ - switch (this->type) { + switch (This->type) { case D3D_1: - *((LPD3DLIGHT)lpLight) = *((LPD3DLIGHT) &(this->light)); + *((LPD3DLIGHT)lpLight) = *((LPD3DLIGHT) &(This->light)); break; case D3D_2: - *((LPD3DLIGHT2)lpLight) = *((LPD3DLIGHT2) &(this->light)); + *((LPD3DLIGHT2)lpLight) = *((LPD3DLIGHT2) &(This->light)); break; } return DD_OK; } -static HRESULT WINAPI IDirect3DLight_SetLight(LPDIRECT3DLIGHT this, +static HRESULT WINAPI IDirect3DLightImpl_SetLight(LPDIRECT3DLIGHT iface, LPD3DLIGHT lpLight) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpLight); + ICOM_THIS(IDirect3DLightImpl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpLight); if (TRACE_ON(ddraw)) dump_light(lpLight); /* Stores the light */ - switch (this->type) { + switch (This->type) { case D3D_1: - *((LPD3DLIGHT) &(this->light)) = *((LPD3DLIGHT)lpLight); + *((LPD3DLIGHT) &(This->light)) = *((LPD3DLIGHT)lpLight); break; case D3D_2: - *((LPD3DLIGHT2) &(this->light)) = *((LPD3DLIGHT2)lpLight); + *((LPD3DLIGHT2) &(This->light)) = *((LPD3DLIGHT2)lpLight); break; } - if (this->is_active) - update(this); + if (This->is_active) + update(This); return DD_OK; } -static HRESULT WINAPI IDirect3DLight_Initialize(LPDIRECT3DLIGHT this, +static HRESULT WINAPI IDirect3DLightImpl_Initialize(LPDIRECT3DLIGHT iface, LPDIRECT3D lpDirect3D) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpDirect3D); + ICOM_THIS(IDirect3DLightImpl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpDirect3D); return DDERR_ALREADYINITIALIZED; } @@ -232,26 +238,26 @@ static HRESULT WINAPI IDirect3DLight_Initialize(LPDIRECT3DLIGHT this, /******************************************************************************* * IDirect3DLight VTable */ -static IDirect3DLight_VTable light_vtable = { +static ICOM_VTABLE(IDirect3DLight) light_vtable = { /*** IUnknown methods ***/ - IDirect3DLight_QueryInterface, - IDirect3DLight_AddRef, - IDirect3DLight_Release, + IDirect3DLightImpl_QueryInterface, + IDirect3DLightImpl_AddRef, + IDirect3DLightImpl_Release, /*** IDirect3DLight methods ***/ - IDirect3DLight_Initialize, - IDirect3DLight_SetLight, - IDirect3DLight_GetLight + IDirect3DLightImpl_Initialize, + IDirect3DLightImpl_SetLight, + IDirect3DLightImpl_GetLight }; #else /* HAVE_MESAGL */ /* These function should never be called if MesaGL is not present */ -LPDIRECT3DLIGHT d3dlight_create_dx3(LPDIRECT3D d3d) { +LPDIRECT3DLIGHT d3dlight_create_dx3(IDirect3DImpl* d3d1) { ERR(ddraw, "Should not be called...\n"); return NULL; } -LPDIRECT3DLIGHT d3dlight_create(LPDIRECT3D2 d3d) { +LPDIRECT3DLIGHT d3dlight_create(IDirect3D2Impl* d3d2) { ERR(ddraw, "Should not be called...\n"); return NULL; } diff --git a/graphics/d3dmaterial.c b/graphics/d3dmaterial.c index 50f9b2ac223..b25f4b6b886 100644 --- a/graphics/d3dmaterial.c +++ b/graphics/d3dmaterial.c @@ -16,43 +16,43 @@ #ifdef HAVE_MESAGL -static IDirect3DMaterial2_VTable material2_vtable; -static IDirect3DMaterial_VTable material_vtable; +static ICOM_VTABLE(IDirect3DMaterial2) material2_vtable; +static ICOM_VTABLE(IDirect3DMaterial) material_vtable; /******************************************************************************* * Matrial2 static functions */ -static void activate(LPDIRECT3DMATERIAL2 this) { - TRACE(ddraw, "Activating material %p\n", this); +static void activate(IDirect3DMaterial2Impl* This) { + TRACE(ddraw, "Activating material %p\n", This); /* First, set the rendering context */ - if (this->use_d3d2) - this->device.active_device2->set_context(this->device.active_device2); + if (This->use_d3d2) + This->device.active_device2->set_context(This->device.active_device2); else - this->device.active_device1->set_context(this->device.active_device1); + This->device.active_device1->set_context(This->device.active_device1); /* Set the current Material */ - _dump_colorvalue("Diffuse", this->mat.a.diffuse); + _dump_colorvalue("Diffuse", This->mat.a.diffuse); glMaterialfv(GL_FRONT, GL_DIFFUSE, - (float *) &(this->mat.a.diffuse)); - _dump_colorvalue("Ambient", this->mat.b.ambient); + (float *) &(This->mat.a.diffuse)); + _dump_colorvalue("Ambient", This->mat.b.ambient); glMaterialfv(GL_FRONT, GL_AMBIENT, - (float *) &(this->mat.b.ambient)); - _dump_colorvalue("Specular", this->mat.c.specular); + (float *) &(This->mat.b.ambient)); + _dump_colorvalue("Specular", This->mat.c.specular); glMaterialfv(GL_FRONT, GL_SPECULAR, - (float *) &(this->mat.c.specular)); - _dump_colorvalue("Emissive", this->mat.d.emissive); + (float *) &(This->mat.c.specular)); + _dump_colorvalue("Emissive", This->mat.d.emissive); glMaterialfv(GL_FRONT, GL_EMISSION, - (float *) &(this->mat.d.emissive)); + (float *) &(This->mat.d.emissive)); - TRACE(ddraw, "Size : %ld\n", this->mat.dwSize); - TRACE(ddraw, "Power : %f\n", this->mat.e.power); + TRACE(ddraw, "Size : %ld\n", This->mat.dwSize); + TRACE(ddraw, "Power : %f\n", This->mat.e.power); - TRACE(ddraw, "Texture handle : %08lx\n", (DWORD)this->mat.hTexture); + TRACE(ddraw, "Texture handle : %08lx\n", (DWORD)This->mat.hTexture); return ; } @@ -60,32 +60,32 @@ static void activate(LPDIRECT3DMATERIAL2 this) { /******************************************************************************* * Matrial2 Creation functions */ -LPDIRECT3DMATERIAL2 d3dmaterial2_create(LPDIRECT3D2 d3d) +LPDIRECT3DMATERIAL2 d3dmaterial2_create(IDirect3D2Impl* d3d2) { - LPDIRECT3DMATERIAL2 mat; + IDirect3DMaterial2Impl* mat; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DMaterial2)); + mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DMaterial2Impl)); mat->ref = 1; mat->lpvtbl = &material2_vtable; mat->use_d3d2 = 1; - mat->d3d.d3d2 = d3d; + mat->d3d.d3d2 = d3d2; mat->activate = activate; - return mat; + return (LPDIRECT3DMATERIAL2)mat; } -LPDIRECT3DMATERIAL d3dmaterial_create(LPDIRECT3D d3d) +LPDIRECT3DMATERIAL d3dmaterial_create(IDirect3DImpl* d3d1) { - LPDIRECT3DMATERIAL2 mat; + IDirect3DMaterial2Impl* mat; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DMaterial2)); + mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DMaterial2Impl)); mat->ref = 1; - mat->lpvtbl = (LPDIRECT3DMATERIAL2_VTABLE) &material_vtable; + mat->lpvtbl = (ICOM_VTABLE(IDirect3DMaterial2)*)&material_vtable; mat->use_d3d2 = 0; - mat->d3d.d3d1 = d3d; + mat->d3d.d3d1 = d3d1; mat->activate = activate; @@ -96,39 +96,42 @@ LPDIRECT3DMATERIAL d3dmaterial_create(LPDIRECT3D d3d) * IDirect3DMaterial2 methods */ -static HRESULT WINAPI IDirect3DMaterial2_QueryInterface(LPDIRECT3DMATERIAL2 this, +static HRESULT WINAPI IDirect3DMaterial2Impl_QueryInterface(LPDIRECT3DMATERIAL2 iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DMaterial2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DMaterial2_AddRef(LPDIRECT3DMATERIAL2 this) +static ULONG WINAPI IDirect3DMaterial2Impl_AddRef(LPDIRECT3DMATERIAL2 iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DMaterial2_Release(LPDIRECT3DMATERIAL2 this) +static ULONG WINAPI IDirect3DMaterial2Impl_Release(LPDIRECT3DMATERIAL2 iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } /*** IDirect3DMaterial2 methods ***/ @@ -137,68 +140,74 @@ static void dump_material(LPD3DMATERIAL mat) fprintf(stderr, " dwSize : %ld\n", mat->dwSize); } -static HRESULT WINAPI IDirect3DMaterial2_GetMaterial(LPDIRECT3DMATERIAL2 this, +static HRESULT WINAPI IDirect3DMaterial2Impl_GetMaterial(LPDIRECT3DMATERIAL2 iface, LPD3DMATERIAL lpMat) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpMat); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpMat); if (TRACE_ON(ddraw)) dump_material(lpMat); /* Copies the material structure */ - *lpMat = this->mat; + *lpMat = This->mat; return DD_OK; } -static HRESULT WINAPI IDirect3DMaterial2_SetMaterial(LPDIRECT3DMATERIAL2 this, +static HRESULT WINAPI IDirect3DMaterial2Impl_SetMaterial(LPDIRECT3DMATERIAL2 iface, LPD3DMATERIAL lpMat) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpMat); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpMat); if (TRACE_ON(ddraw)) dump_material(lpMat); /* Stores the material */ - this->mat = *lpMat; + This->mat = *lpMat; return DD_OK; } -static HRESULT WINAPI IDirect3DMaterial2_GetHandle(LPDIRECT3DMATERIAL2 this, +static HRESULT WINAPI IDirect3DMaterial2Impl_GetHandle(LPDIRECT3DMATERIAL2 iface, LPDIRECT3DDEVICE2 lpD3DDevice2, LPD3DMATERIALHANDLE lpMatHandle) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice2, lpMatHandle); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lpD3DDevice2, lpMatHandle); - if (this->use_d3d2) - this->device.active_device2 = lpD3DDevice2; + if (This->use_d3d2) + This->device.active_device2 = (IDirect3DDevice2Impl*)lpD3DDevice2; else - this->device.active_device1 = (LPDIRECT3DDEVICE) lpD3DDevice2; + This->device.active_device1 = (IDirect3DDeviceImpl*)lpD3DDevice2; - *lpMatHandle = (DWORD) this; /* lpD3DDevice2->store_material(this); */ + *lpMatHandle = (DWORD) This; /* lpD3DDevice2->store_material(This); */ return DD_OK; } -static HRESULT WINAPI IDirect3DMaterial_Reserve(LPDIRECT3DMATERIAL this) +static HRESULT WINAPI IDirect3DMaterialImpl_Reserve(LPDIRECT3DMATERIAL iface) { - FIXME(ddraw, "(%p)->(): stub\n", this); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + FIXME(ddraw, "(%p)->(): stub\n", This); return DDERR_INVALIDPARAMS; } -static HRESULT WINAPI IDirect3DMaterial_Unreserve(LPDIRECT3DMATERIAL this) +static HRESULT WINAPI IDirect3DMaterialImpl_Unreserve(LPDIRECT3DMATERIAL iface) { - FIXME(ddraw, "(%p)->(): stub\n", this); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + FIXME(ddraw, "(%p)->(): stub\n", This); return DDERR_INVALIDPARAMS; } -static HRESULT WINAPI IDirect3DMaterial_Initialize(LPDIRECT3DMATERIAL this, +static HRESULT WINAPI IDirect3DMaterialImpl_Initialize(LPDIRECT3DMATERIAL iface, LPDIRECT3D lpDirect3D) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpDirect3D); + ICOM_THIS(IDirect3DMaterial2Impl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpDirect3D); return DDERR_ALREADYINITIALIZED; } @@ -207,43 +216,43 @@ static HRESULT WINAPI IDirect3DMaterial_Initialize(LPDIRECT3DMATERIAL this, /******************************************************************************* * IDirect3DMaterial VTable */ -static IDirect3DMaterial_VTable material_vtable = { +static ICOM_VTABLE(IDirect3DMaterial) material_vtable = { /*** IUnknown methods ***/ - IDirect3DMaterial2_QueryInterface, - IDirect3DMaterial2_AddRef, - IDirect3DMaterial2_Release, + IDirect3DMaterial2Impl_QueryInterface, + IDirect3DMaterial2Impl_AddRef, + IDirect3DMaterial2Impl_Release, /*** IDirect3DMaterial methods ***/ - IDirect3DMaterial_Initialize, - IDirect3DMaterial2_SetMaterial, - IDirect3DMaterial2_GetMaterial, - IDirect3DMaterial2_GetHandle, - IDirect3DMaterial_Reserve, - IDirect3DMaterial_Unreserve + IDirect3DMaterialImpl_Initialize, + IDirect3DMaterial2Impl_SetMaterial, + IDirect3DMaterial2Impl_GetMaterial, + IDirect3DMaterial2Impl_GetHandle, + IDirect3DMaterialImpl_Reserve, + IDirect3DMaterialImpl_Unreserve }; /******************************************************************************* * IDirect3DMaterial2 VTable */ -static IDirect3DMaterial2_VTable material2_vtable = { +static ICOM_VTABLE(IDirect3DMaterial2) material2_vtable = { /*** IUnknown methods ***/ - IDirect3DMaterial2_QueryInterface, - IDirect3DMaterial2_AddRef, - IDirect3DMaterial2_Release, + IDirect3DMaterial2Impl_QueryInterface, + IDirect3DMaterial2Impl_AddRef, + IDirect3DMaterial2Impl_Release, /*** IDirect3DMaterial methods ***/ - IDirect3DMaterial2_SetMaterial, - IDirect3DMaterial2_GetMaterial, - IDirect3DMaterial2_GetHandle + IDirect3DMaterial2Impl_SetMaterial, + IDirect3DMaterial2Impl_GetMaterial, + IDirect3DMaterial2Impl_GetHandle }; #else /* HAVE_MESAGL */ -LPDIRECT3DMATERIAL d3dmaterial_create(LPDIRECT3D d3d) { +LPDIRECT3DMATERIAL d3dmaterial_create(IDirect3DImpl* d3d1) { ERR(ddraw, "Should not be called...\n"); return NULL; } -LPDIRECT3DMATERIAL2 d3dmaterial2_create(LPDIRECT3D2 d3d) { +LPDIRECT3DMATERIAL2 d3dmaterial2_create(IDirect3D2Impl* d3d2) { ERR(ddraw, "Should not be called...\n"); return NULL; } diff --git a/graphics/d3dtexture.c b/graphics/d3dtexture.c index ee22e1151d4..2dfeadf91d3 100644 --- a/graphics/d3dtexture.c +++ b/graphics/d3dtexture.c @@ -23,37 +23,37 @@ texture memory) */ #undef TEXTURE_SNOOP -static IDirect3DTexture2_VTable texture2_vtable; -static IDirect3DTexture_VTable texture_vtable; +static ICOM_VTABLE(IDirect3DTexture2) texture2_vtable; +static ICOM_VTABLE(IDirect3DTexture) texture_vtable; /******************************************************************************* * Texture2 Creation functions */ -LPDIRECT3DTEXTURE2 d3dtexture2_create(LPDIRECTDRAWSURFACE4 surf) +LPDIRECT3DTEXTURE2 d3dtexture2_create(IDirectDrawSurface4Impl* surf) { - LPDIRECT3DTEXTURE2 mat; + IDirect3DTexture2Impl* tex; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture2)); - mat->ref = 1; - mat->lpvtbl = &texture2_vtable; - mat->surface = surf; + tex = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture2Impl)); + tex->ref = 1; + tex->lpvtbl = &texture2_vtable; + tex->surface = surf; - return mat; + return (LPDIRECT3DTEXTURE2)tex; } /******************************************************************************* * Texture Creation functions */ -LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE4 surf) +LPDIRECT3DTEXTURE d3dtexture_create(IDirectDrawSurface4Impl* surf) { - LPDIRECT3DTEXTURE mat; + IDirect3DTexture2Impl* tex; - mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture)); - mat->ref = 1; - mat->lpvtbl = (IDirect3DTexture2_VTable*) &texture_vtable; - mat->surface = surf; + tex = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture2Impl)); + tex->ref = 1; + tex->lpvtbl = (ICOM_VTABLE(IDirect3DTexture2)*)&texture_vtable; + tex->surface = surf; - return mat; + return (LPDIRECT3DTEXTURE)tex; } @@ -61,137 +61,149 @@ LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE4 surf) * IDirect3DTexture2 methods */ -static HRESULT WINAPI IDirect3DTexture2_QueryInterface(LPDIRECT3DTEXTURE2 this, +static HRESULT WINAPI IDirect3DTexture2Impl_QueryInterface(LPDIRECT3DTEXTURE2 iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DTexture2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DTexture2_AddRef(LPDIRECT3DTEXTURE2 this) +static ULONG WINAPI IDirect3DTexture2Impl_AddRef(LPDIRECT3DTEXTURE2 iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DTexture2Impl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DTexture2_Release(LPDIRECT3DTEXTURE2 this) +static ULONG WINAPI IDirect3DTexture2Impl_Release(LPDIRECT3DTEXTURE2 iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DTexture2Impl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { + if (!--(This->ref)) { /* Delete texture from OpenGL */ - glDeleteTextures(1, &(this->tex_name)); + glDeleteTextures(1, &(This->tex_name)); /* Release surface */ - this->surface->lpvtbl->fnRelease(this->surface); + IDirectDrawSurface4_Release((IDirectDrawSurface4*)This->surface); - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } /*** IDirect3DTexture methods ***/ -static HRESULT WINAPI IDirect3DTexture_GetHandle(LPDIRECT3DTEXTURE this, +static HRESULT WINAPI IDirect3DTextureImpl_GetHandle(LPDIRECT3DTEXTURE iface, LPDIRECT3DDEVICE lpD3DDevice, LPD3DTEXTUREHANDLE lpHandle) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice, lpHandle); + ICOM_THIS(IDirect3DTexture2Impl,iface); + IDirect3DDeviceImpl* ilpD3DDevice=(IDirect3DDeviceImpl*)lpD3DDevice; + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, ilpD3DDevice, lpHandle); - *lpHandle = (DWORD) this; + *lpHandle = (D3DTEXTUREHANDLE) This; /* Now, bind a new texture */ - lpD3DDevice->set_context(lpD3DDevice); - this->D3Ddevice = (void *) lpD3DDevice; - if (this->tex_name == 0) - glGenTextures(1, &(this->tex_name)); + ilpD3DDevice->set_context(ilpD3DDevice); + This->D3Ddevice = (void *) ilpD3DDevice; + if (This->tex_name == 0) + glGenTextures(1, &(This->tex_name)); - TRACE(ddraw, "OpenGL texture handle is : %d\n", this->tex_name); + TRACE(ddraw, "OpenGL texture handle is : %d\n", This->tex_name); return D3D_OK; } -static HRESULT WINAPI IDirect3DTexture_Initialize(LPDIRECT3DTEXTURE this, +static HRESULT WINAPI IDirect3DTextureImpl_Initialize(LPDIRECT3DTEXTURE iface, LPDIRECT3DDEVICE lpD3DDevice, LPDIRECTDRAWSURFACE lpSurface) { - TRACE(ddraw, "(%p)->(%p,%p)\n", this, lpD3DDevice, lpSurface); + ICOM_THIS(IDirect3DTexture2Impl,iface); + TRACE(ddraw, "(%p)->(%p,%p)\n", This, lpD3DDevice, lpSurface); return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI IDirect3DTexture_Unload(LPDIRECT3DTEXTURE this) +static HRESULT WINAPI IDirect3DTextureImpl_Unload(LPDIRECT3DTEXTURE iface) { - FIXME(ddraw, "(%p)->(): stub\n", this); + ICOM_THIS(IDirect3DTexture2Impl,iface); + FIXME(ddraw, "(%p)->(): stub\n", This); return D3D_OK; } /*** IDirect3DTexture2 methods ***/ -static HRESULT WINAPI IDirect3DTexture2_GetHandle(LPDIRECT3DTEXTURE2 this, +static HRESULT WINAPI IDirect3DTexture2Impl_GetHandle(LPDIRECT3DTEXTURE2 iface, LPDIRECT3DDEVICE2 lpD3DDevice2, LPD3DTEXTUREHANDLE lpHandle) { - TRACE(ddraw, "(%p)->(%p,%p)\n", this, lpD3DDevice2, lpHandle); + ICOM_THIS(IDirect3DTexture2Impl,iface); + IDirect3DDevice2Impl* ilpD3DDevice2=(IDirect3DDevice2Impl*)lpD3DDevice2; + TRACE(ddraw, "(%p)->(%p,%p)\n", This, ilpD3DDevice2, lpHandle); /* For 32 bits OSes, handles = pointers */ - *lpHandle = (DWORD) this; + *lpHandle = (D3DTEXTUREHANDLE) This; /* Now, bind a new texture */ - lpD3DDevice2->set_context(lpD3DDevice2); - this->D3Ddevice = (void *) lpD3DDevice2; - if (this->tex_name == 0) - glGenTextures(1, &(this->tex_name)); + ilpD3DDevice2->set_context(ilpD3DDevice2); + This->D3Ddevice = (void *) ilpD3DDevice2; + if (This->tex_name == 0) + glGenTextures(1, &(This->tex_name)); - TRACE(ddraw, "OpenGL texture handle is : %d\n", this->tex_name); + TRACE(ddraw, "OpenGL texture handle is : %d\n", This->tex_name); return D3D_OK; } /* Common methods */ -static HRESULT WINAPI IDirect3DTexture2_PaletteChanged(LPDIRECT3DTEXTURE2 this, +static HRESULT WINAPI IDirect3DTexture2Impl_PaletteChanged(LPDIRECT3DTEXTURE2 iface, DWORD dwStart, DWORD dwCount) { - FIXME(ddraw, "(%p)->(%8ld,%8ld): stub\n", this, dwStart, dwCount); + ICOM_THIS(IDirect3DTexture2Impl,iface); + FIXME(ddraw, "(%p)->(%8ld,%8ld): stub\n", This, dwStart, dwCount); return D3D_OK; } /* NOTE : if you experience crashes in this function, you must have a buggy version of Mesa. See the file d3dtexture.c for a cure */ -static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, +static HRESULT WINAPI IDirect3DTexture2Impl_Load(LPDIRECT3DTEXTURE2 iface, LPDIRECT3DTEXTURE2 lpD3DTexture2) { + ICOM_THIS(IDirect3DTexture2Impl,iface); + IDirect3DTexture2Impl* ilpD3DTexture2=(IDirect3DTexture2Impl*)lpD3DTexture2; DDSURFACEDESC *src_d, *dst_d; - TRACE(ddraw, "(%p)->(%p)\n", this, lpD3DTexture2); + TRACE(ddraw, "(%p)->(%p)\n", This, ilpD3DTexture2); - TRACE(ddraw, "Copied to surface %p, surface %p\n", this->surface, lpD3DTexture2->surface); + TRACE(ddraw, "Copied to surface %p, surface %p\n", This->surface, ilpD3DTexture2->surface); /* Suppress the ALLOCONLOAD flag */ - this->surface->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_ALLOCONLOAD; + This->surface->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_ALLOCONLOAD; /* Copy one surface on the other */ - dst_d = &(this->surface->s.surface_desc); - src_d = &(lpD3DTexture2->surface->s.surface_desc); + dst_d = &(This->surface->s.surface_desc); + src_d = &(ilpD3DTexture2->surface->s.surface_desc); if ((src_d->dwWidth != dst_d->dwWidth) || (src_d->dwHeight != dst_d->dwHeight)) { /* Should also check for same pixel format, lPitch, ... */ ERR(ddraw, "Error in surface sizes\n"); return D3DERR_TEXTURE_LOAD_FAILED; } else { - /* LPDIRECT3DDEVICE2 d3dd = (LPDIRECT3DDEVICE2) this->D3Ddevice; */ + /* LPDIRECT3DDEVICE2 d3dd = (LPDIRECT3DDEVICE2) This->D3Ddevice; */ /* I should put a macro for the calculus of bpp */ int bpp = (src_d->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8 ? 1 /* 8 bit of palette index */: @@ -206,15 +218,15 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); /* If the GetHandle was not done, get the texture name here */ - if (this->tex_name == 0) - glGenTextures(1, &(this->tex_name)); - glBindTexture(GL_TEXTURE_2D, this->tex_name); + if (This->tex_name == 0) + glGenTextures(1, &(This->tex_name)); + glBindTexture(GL_TEXTURE_2D, This->tex_name); if (src_d->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) { /* **************** Paletted Texture **************** */ - LPDIRECTDRAWPALETTE pal = this->surface->s.palette; + IDirectDrawPaletteImpl* pal = This->surface->s.palette; BYTE table[256][4]; int i; @@ -228,9 +240,9 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, table[i][0] = pal->palents[i].peRed; table[i][1] = pal->palents[i].peGreen; table[i][2] = pal->palents[i].peBlue; - if ((this->surface->s.surface_desc.dwFlags & DDSD_CKSRCBLT) && - (i >= this->surface->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) && - (i <= this->surface->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) + if ((This->surface->s.surface_desc.dwFlags & DDSD_CKSRCBLT) && + (i >= This->surface->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) && + (i <= This->surface->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) table[i][3] = 0x00; else table[i][3] = 0xFF; @@ -242,7 +254,7 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, char buf[32]; int x, y; - sprintf(buf, "%d.pnm", this->tex_name); + sprintf(buf, "%d.pnm", This->tex_name); f = fopen(buf, "wb"); fprintf(f, "P6\n%d %d\n255\n", src_d->dwWidth, src_d->dwHeight); for (y = 0; y < src_d->dwHeight; y++) { @@ -296,7 +308,7 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, char buf[32]; int x, y; - sprintf(buf, "%d.pnm", this->tex_name); + sprintf(buf, "%d.pnm", This->tex_name); f = fopen(buf, "wb"); fprintf(f, "P6\n%d %d\n255\n", src_d->dwWidth, src_d->dwHeight); for (y = 0; y < src_d->dwHeight; y++) { @@ -325,7 +337,7 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, char buf[32]; int x, y; - sprintf(buf, "%d.pnm", this->tex_name); + sprintf(buf, "%d.pnm", This->tex_name); f = fopen(buf, "wb"); fprintf(f, "P6\n%d %d\n255\n", src_d->dwWidth, src_d->dwHeight); for (y = 0; y < src_d->dwHeight; y++) { @@ -395,42 +407,42 @@ static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this, /******************************************************************************* * IDirect3DTexture2 VTable */ -static IDirect3DTexture2_VTable texture2_vtable = { +static ICOM_VTABLE(IDirect3DTexture2) texture2_vtable = { /*** IUnknown methods ***/ - IDirect3DTexture2_QueryInterface, - IDirect3DTexture2_AddRef, - IDirect3DTexture2_Release, + IDirect3DTexture2Impl_QueryInterface, + IDirect3DTexture2Impl_AddRef, + IDirect3DTexture2Impl_Release, /*** IDirect3DTexture methods ***/ - IDirect3DTexture2_GetHandle, - IDirect3DTexture2_PaletteChanged, - IDirect3DTexture2_Load + IDirect3DTexture2Impl_GetHandle, + IDirect3DTexture2Impl_PaletteChanged, + IDirect3DTexture2Impl_Load }; /******************************************************************************* * IDirect3DTexture VTable */ -static IDirect3DTexture_VTable texture_vtable = { +static ICOM_VTABLE(IDirect3DTexture) texture_vtable = { /*** IUnknown methods ***/ - IDirect3DTexture2_QueryInterface, - IDirect3DTexture2_AddRef, - IDirect3DTexture2_Release, + IDirect3DTexture2Impl_QueryInterface, + IDirect3DTexture2Impl_AddRef, + IDirect3DTexture2Impl_Release, /*** IDirect3DTexture methods ***/ - IDirect3DTexture_Initialize, - IDirect3DTexture_GetHandle, - IDirect3DTexture2_PaletteChanged, - IDirect3DTexture2_Load, - IDirect3DTexture_Unload + IDirect3DTextureImpl_Initialize, + IDirect3DTextureImpl_GetHandle, + IDirect3DTexture2Impl_PaletteChanged, + IDirect3DTexture2Impl_Load, + IDirect3DTextureImpl_Unload }; #else /* HAVE_MESAGL */ /* These function should never be called if MesaGL is not present */ -LPDIRECT3DTEXTURE2 d3dtexture2_create(LPDIRECTDRAWSURFACE4 surf) { +LPDIRECT3DTEXTURE2 d3dtexture2_create(IDirectDrawSurface4Impl* surf) { ERR(ddraw, "Should not be called...\n"); return NULL; } -LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE4 surf) { +LPDIRECT3DTEXTURE d3dtexture_create(IDirectDrawSurface4Impl* surf) { ERR(ddraw, "Should not be called...\n"); return NULL; } diff --git a/graphics/d3dviewport.c b/graphics/d3dviewport.c index 393cdd7cd44..b7f1d3c25cd 100644 --- a/graphics/d3dviewport.c +++ b/graphics/d3dviewport.c @@ -17,16 +17,16 @@ #ifdef HAVE_MESAGL -static IDirect3DViewport2_VTable viewport2_vtable; +static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable; /******************************************************************************* * Viewport1/2 static functions */ -static void activate(LPDIRECT3DVIEWPORT2 this) { - LPDIRECT3DLIGHT l; +static void activate(IDirect3DViewport2Impl* This) { + IDirect3DLightImpl* l; /* Activate all the lights associated with this context */ - l = this->lights; + l = This->lights; while (l != NULL) { l->activate(l); @@ -37,14 +37,14 @@ static void activate(LPDIRECT3DVIEWPORT2 this) { /******************************************************************************* * Viewport1/2 Creation functions */ -LPDIRECT3DVIEWPORT2 d3dviewport2_create(LPDIRECT3D2 d3d) +LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2) { - LPDIRECT3DVIEWPORT2 vp; + IDirect3DViewport2Impl* vp; - vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2)); + vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2Impl)); vp->ref = 1; vp->lpvtbl = &viewport2_vtable; - vp->d3d.d3d2 = d3d; + vp->d3d.d3d2 = d3d2; vp->use_d3d2 = 1; vp->device.active_device2 = NULL; @@ -54,17 +54,17 @@ LPDIRECT3DVIEWPORT2 d3dviewport2_create(LPDIRECT3D2 d3d) vp->nextlight = GL_LIGHT0; - return vp; + return (LPDIRECT3DVIEWPORT2)vp; } -LPDIRECT3DVIEWPORT d3dviewport_create(LPDIRECT3D d3d) +LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1) { - LPDIRECT3DVIEWPORT2 vp; + IDirect3DViewport2Impl* vp; - vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2)); + vp = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DViewport2Impl)); vp->ref = 1; vp->lpvtbl = &viewport2_vtable; - vp->d3d.d3d1 = d3d; + vp->d3d.d3d1 = d3d1; vp->use_d3d2 = 0; vp->device.active_device1 = NULL; @@ -81,70 +81,76 @@ LPDIRECT3DVIEWPORT d3dviewport_create(LPDIRECT3D d3d) * IDirect3DViewport2 methods */ -static HRESULT WINAPI IDirect3DViewport2_QueryInterface(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_QueryInterface(LPDIRECT3DVIEWPORT2 iface, REFIID riid, LPVOID* ppvObj) { + ICOM_THIS(IDirect3DViewport2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)riid,xrefiid); - FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj); + FIXME(ddraw, "(%p)->(%s,%p): stub\n", This, xrefiid,ppvObj); return S_OK; } -static ULONG WINAPI IDirect3DViewport2_AddRef(LPDIRECT3DVIEWPORT2 this) +static ULONG WINAPI IDirect3DViewport2Impl_AddRef(LPDIRECT3DVIEWPORT2 iface) { - TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DViewport2Impl,iface); + TRACE(ddraw, "(%p)->()incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3DViewport2_Release(LPDIRECT3DVIEWPORT2 this) +static ULONG WINAPI IDirect3DViewport2Impl_Release(LPDIRECT3DVIEWPORT2 iface) { - FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } /*** IDirect3DViewport methods ***/ -static HRESULT WINAPI IDirect3DViewport2_Initialize(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_Initialize(LPDIRECT3DVIEWPORT2 iface, LPDIRECT3D d3d) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, d3d); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, d3d); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_GetViewport(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport(LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT lpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpvp); - if (this->use_vp2 != 0) + if (This->use_vp2 != 0) return DDERR_INVALIDPARAMS; - *lpvp = this->viewport.vp1; + *lpvp = This->viewport.vp1; return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_SetViewport(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport(LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT lpvp) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpvp); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpvp); - this->use_vp2 = 0; - this->viewport.vp1 = *lpvp; + This->use_vp2 = 0; + This->viewport.vp1 = *lpvp; TRACE(ddraw, "dwSize = %ld dwX = %ld dwY = %ld\n", lpvp->dwSize, lpvp->dwX, lpvp->dwY); @@ -161,76 +167,83 @@ static HRESULT WINAPI IDirect3DViewport2_SetViewport(LPDIRECT3DVIEWPORT2 this, return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_TransformVertices(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_TransformVertices(LPDIRECT3DVIEWPORT2 iface, DWORD dwVertexCount, LPD3DTRANSFORMDATA lpData, DWORD dwFlags, LPDWORD lpOffScreen) { + ICOM_THIS(IDirect3DViewport2Impl,iface); FIXME(ddraw, "(%p)->(%8ld,%p,%08lx,%p): stub\n", - this, dwVertexCount, lpData, dwFlags, lpOffScreen); + This, dwVertexCount, lpData, dwFlags, lpOffScreen); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_LightElements(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_LightElements(LPDIRECT3DVIEWPORT2 iface, DWORD dwElementCount, LPD3DLIGHTDATA lpData) { - FIXME(ddraw, "(%p)->(%8ld,%p): stub\n", this, dwElementCount, lpData); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%8ld,%p): stub\n", This, dwElementCount, lpData); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_SetBackground(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_SetBackground(LPDIRECT3DVIEWPORT2 iface, D3DMATERIALHANDLE hMat) { - FIXME(ddraw, "(%p)->(%08lx): stub\n", this, (DWORD) hMat); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%08lx): stub\n", This, (DWORD) hMat); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_GetBackground(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_GetBackground(LPDIRECT3DVIEWPORT2 iface, LPD3DMATERIALHANDLE lphMat, LPBOOL lpValid) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lphMat, lpValid); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lphMat, lpValid); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_SetBackgroundDepth(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_SetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface, LPDIRECTDRAWSURFACE lpDDSurface) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpDDSurface); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpDDSurface); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_GetBackgroundDepth(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_GetBackgroundDepth(LPDIRECT3DVIEWPORT2 iface, LPDIRECTDRAWSURFACE* lplpDDSurface, LPBOOL lpValid) { - FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lplpDDSurface, lpValid); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p): stub\n", This, lplpDDSurface, lpValid); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_Clear(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_Clear(LPDIRECT3DVIEWPORT2 iface, DWORD dwCount, LPD3DRECT lpRects, DWORD dwFlags) { + ICOM_THIS(IDirect3DViewport2Impl,iface); GLboolean ztest; - FIXME(ddraw, "(%p)->(%8ld,%p,%08lx): stub\n", this, dwCount, lpRects, dwFlags); + FIXME(ddraw, "(%p)->(%8ld,%p,%08lx): stub\n", This, dwCount, lpRects, dwFlags); /* For the moment, ignore the rectangles */ - if (this->device.active_device1 != NULL) { + if (This->device.active_device1 != NULL) { /* Get the rendering context */ - if (this->use_d3d2) - this->device.active_device2->set_context(this->device.active_device2); + if (This->use_d3d2) + This->device.active_device2->set_context(This->device.active_device2); else - this->device.active_device1->set_context(this->device.active_device1); + This->device.active_device1->set_context(This->device.active_device1); } /* Clears the screen */ @@ -242,67 +255,73 @@ static HRESULT WINAPI IDirect3DViewport2_Clear(LPDIRECT3DVIEWPORT2 this, return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_AddLight(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_AddLight(LPDIRECT3DVIEWPORT2 iface, LPDIRECT3DLIGHT lpLight) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpLight); + ICOM_THIS(IDirect3DViewport2Impl,iface); + IDirect3DLightImpl* ilpLight=(IDirect3DLightImpl*)lpLight; + FIXME(ddraw, "(%p)->(%p): stub\n", This, ilpLight); /* Add the light in the 'linked' chain */ - lpLight->next = this->lights; - this->lights = lpLight; + ilpLight->next = This->lights; + This->lights = ilpLight; /* If active, activate the light */ - if (this->device.active_device1 != NULL) { + if (This->device.active_device1 != NULL) { /* Get the rendering context */ - if (this->use_d3d2) - this->device.active_device2->set_context(this->device.active_device2); + if (This->use_d3d2) + This->device.active_device2->set_context(This->device.active_device2); else - this->device.active_device1->set_context(this->device.active_device1); + This->device.active_device1->set_context(This->device.active_device1); /* Activate the light */ - lpLight->light_num = this->nextlight++; - lpLight->activate(lpLight); + ilpLight->light_num = This->nextlight++; + ilpLight->activate(ilpLight); } return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_DeleteLight(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_DeleteLight(LPDIRECT3DVIEWPORT2 iface, LPDIRECT3DLIGHT lpLight) { - FIXME(ddraw, "(%p)->(%p): stub\n", this, lpLight); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p): stub\n", This, lpLight); return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_NextLight(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_NextLight(LPDIRECT3DVIEWPORT2 iface, LPDIRECT3DLIGHT lpLight, LPDIRECT3DLIGHT* lplpLight, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", this, lpLight, lplpLight, dwFlags); + ICOM_THIS(IDirect3DViewport2Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p,%08lx): stub\n", This, lpLight, lplpLight, dwFlags); return DD_OK; } /*** IDirect3DViewport2 methods ***/ -static HRESULT WINAPI IDirect3DViewport2_GetViewport2(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_GetViewport2(LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT2 lpViewport2) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpViewport2); + ICOM_THIS(IDirect3DViewport2Impl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpViewport2); - if (this->use_vp2 != 1) + if (This->use_vp2 != 1) return DDERR_INVALIDPARAMS; - *lpViewport2 = this->viewport.vp2; + *lpViewport2 = This->viewport.vp2; return DD_OK; } -static HRESULT WINAPI IDirect3DViewport2_SetViewport2(LPDIRECT3DVIEWPORT2 this, +static HRESULT WINAPI IDirect3DViewport2Impl_SetViewport2(LPDIRECT3DVIEWPORT2 iface, LPD3DVIEWPORT2 lpViewport2) { - TRACE(ddraw, "(%p)->(%p)\n", this, lpViewport2); + ICOM_THIS(IDirect3DViewport2Impl,iface); + TRACE(ddraw, "(%p)->(%p)\n", This, lpViewport2); TRACE(ddraw, "dwSize = %ld dwX = %ld dwY = %ld\n", lpViewport2->dwSize, lpViewport2->dwX, lpViewport2->dwY); @@ -315,8 +334,8 @@ static HRESULT WINAPI IDirect3DViewport2_SetViewport2(LPDIRECT3DVIEWPORT2 this, TRACE(ddraw, "dvMinZ = %f dvMaxZ = %f\n", lpViewport2->dvMinZ, lpViewport2->dvMaxZ); - this->viewport.vp2 = *lpViewport2; - this->use_vp2 = 1; + This->viewport.vp2 = *lpViewport2; + This->use_vp2 = 1; return DD_OK; } @@ -325,38 +344,38 @@ static HRESULT WINAPI IDirect3DViewport2_SetViewport2(LPDIRECT3DVIEWPORT2 this, /******************************************************************************* * IDirect3DViewport1/2 VTable */ -static IDirect3DViewport2_VTable viewport2_vtable = { +static ICOM_VTABLE(IDirect3DViewport2) viewport2_vtable = { /*** IUnknown methods ***/ - IDirect3DViewport2_QueryInterface, - IDirect3DViewport2_AddRef, - IDirect3DViewport2_Release, + IDirect3DViewport2Impl_QueryInterface, + IDirect3DViewport2Impl_AddRef, + IDirect3DViewport2Impl_Release, /*** IDirect3DViewport methods ***/ - IDirect3DViewport2_Initialize, - IDirect3DViewport2_GetViewport, - IDirect3DViewport2_SetViewport, - IDirect3DViewport2_TransformVertices, - IDirect3DViewport2_LightElements, - IDirect3DViewport2_SetBackground, - IDirect3DViewport2_GetBackground, - IDirect3DViewport2_SetBackgroundDepth, - IDirect3DViewport2_GetBackgroundDepth, - IDirect3DViewport2_Clear, - IDirect3DViewport2_AddLight, - IDirect3DViewport2_DeleteLight, - IDirect3DViewport2_NextLight, + IDirect3DViewport2Impl_Initialize, + IDirect3DViewport2Impl_GetViewport, + IDirect3DViewport2Impl_SetViewport, + IDirect3DViewport2Impl_TransformVertices, + IDirect3DViewport2Impl_LightElements, + IDirect3DViewport2Impl_SetBackground, + IDirect3DViewport2Impl_GetBackground, + IDirect3DViewport2Impl_SetBackgroundDepth, + IDirect3DViewport2Impl_GetBackgroundDepth, + IDirect3DViewport2Impl_Clear, + IDirect3DViewport2Impl_AddLight, + IDirect3DViewport2Impl_DeleteLight, + IDirect3DViewport2Impl_NextLight, /*** IDirect3DViewport2 methods ***/ - IDirect3DViewport2_GetViewport2, - IDirect3DViewport2_SetViewport2 + IDirect3DViewport2Impl_GetViewport2, + IDirect3DViewport2Impl_SetViewport2 }; #else /* HAVE_MESAGL */ -LPDIRECT3DVIEWPORT d3dviewport_create(LPDIRECT3D d3d) { +LPDIRECT3DVIEWPORT d3dviewport_create(IDirect3DImpl* d3d1) { ERR(ddraw, "Should not be called...\n"); return NULL; } -LPDIRECT3DVIEWPORT2 d3dviewport2_create(LPDIRECT3D2 d3d) { +LPDIRECT3DVIEWPORT2 d3dviewport2_create(IDirect3D2Impl* d3d2) { ERR(ddraw, "Should not be called...\n"); return NULL; } diff --git a/graphics/ddraw.c b/graphics/ddraw.c index 0b710b0495a..638ff69735e 100644 --- a/graphics/ddraw.c +++ b/graphics/ddraw.c @@ -64,6 +64,7 @@ typedef int INT32; #include "monitor.h" /* This for all the enumeration and creation of D3D-related objects */ +#include "ddraw_private.h" #include "d3d_private.h" /* define this if you want to play Diablo using XF86DGA. (bug workaround) */ @@ -91,14 +92,14 @@ static GUID XLIB_DirectDraw_GUID = { /* 1574a740-dc61-11d1-8407-f7875a7d1879 */ {0x84, 0x07, 0xf7, 0x87, 0x5a, 0x7d, 0x18, 0x79} }; -static struct IDirectDrawSurface4_VTable dga_dds4vt, xlib_dds4vt; -static struct IDirectDraw_VTable dga_ddvt, xlib_ddvt; -static struct IDirectDraw2_VTable dga_dd2vt, xlib_dd2vt; -static struct IDirectDraw4_VTable dga_dd4vt, xlib_dd4vt; -static struct IDirectDrawClipper_VTable ddclipvt; -static struct IDirectDrawPalette_VTable dga_ddpalvt, xlib_ddpalvt; -static struct IDirect3D_VTable d3dvt; -static struct IDirect3D2_VTable d3d2vt; +static struct ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt, xlib_dds4vt; +static struct ICOM_VTABLE(IDirectDraw) dga_ddvt, xlib_ddvt; +static struct ICOM_VTABLE(IDirectDraw2) dga_dd2vt, xlib_dd2vt; +static struct ICOM_VTABLE(IDirectDraw4) dga_dd4vt, xlib_dd4vt; +static struct ICOM_VTABLE(IDirectDrawClipper) ddclipvt; +static struct ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt, xlib_ddpalvt; +static struct ICOM_VTABLE(IDirect3D) d3dvt; +static struct ICOM_VTABLE(IDirect3D2) d3d2vt; #ifdef HAVE_LIBXXF86VM static XF86VidModeModeInfo *orig_mode = NULL; @@ -512,17 +513,18 @@ static void _dump_pixelformat(LPDDPIXELFORMAT pf) { * DDS and DDS2 use those functions. (Function calls did not change (except * using different DirectDrawSurfaceX version), just added flags and functions) */ -static HRESULT WINAPI IDirectDrawSurface4_Lock( - LPDIRECTDRAWSURFACE4 this,LPRECT lprect,LPDDSURFACEDESC lpddsd,DWORD flags, HANDLE hnd +static HRESULT WINAPI IDirectDrawSurface4Impl_Lock( + LPDIRECTDRAWSURFACE4 iface,LPRECT lprect,LPDDSURFACEDESC lpddsd,DWORD flags, HANDLE hnd ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); TRACE(ddraw, "(%p)->Lock(%p,%p,%08lx,%08lx)\n", - this,lprect,lpddsd,flags,(DWORD)hnd); + This,lprect,lpddsd,flags,(DWORD)hnd); if (flags & ~(DDLOCK_WAIT|DDLOCK_READONLY|DDLOCK_WRITEONLY)) WARN(ddraw, "(%p)->Lock(%p,%p,%08lx,%08lx)\n", - this,lprect,lpddsd,flags,(DWORD)hnd); + This,lprect,lpddsd,flags,(DWORD)hnd); /* First, copy the Surface description */ - *lpddsd = this->s.surface_desc; + *lpddsd = This->s.surface_desc; TRACE(ddraw,"locked surface: height=%ld, width=%ld, pitch=%ld\n", lpddsd->dwHeight,lpddsd->dwWidth,lpddsd->lPitch); @@ -531,101 +533,105 @@ static HRESULT WINAPI IDirectDrawSurface4_Lock( FIXME(ddraw," lprect: %dx%d-%dx%d\n", lprect->top,lprect->left,lprect->bottom,lprect->right ); - lpddsd->y.lpSurface = this->s.surface_desc.y.lpSurface + - (lprect->top*this->s.surface_desc.lPitch) + - (lprect->left*(this->s.surface_desc.ddpfPixelFormat.x.dwRGBBitCount / 8)); + lpddsd->y.lpSurface = This->s.surface_desc.y.lpSurface + + (lprect->top*This->s.surface_desc.lPitch) + + (lprect->left*(This->s.surface_desc.ddpfPixelFormat.x.dwRGBBitCount / 8)); } else { - assert(this->s.surface_desc.y.lpSurface); + assert(This->s.surface_desc.y.lpSurface); } return DD_OK; } -static HRESULT WINAPI DGA_IDirectDrawSurface4_Unlock( - LPDIRECTDRAWSURFACE4 this,LPVOID surface +static HRESULT WINAPI DGA_IDirectDrawSurface4Impl_Unlock( + LPDIRECTDRAWSURFACE4 iface,LPVOID surface ) { - TRACE(ddraw,"(%p)->Unlock(%p)\n",this,surface); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->Unlock(%p)\n",This,surface); return DD_OK; } -static void Xlib_copy_surface_on_screen(LPDIRECTDRAWSURFACE4 this) { - if (this->s.ddraw->d.pixel_convert != NULL) - this->s.ddraw->d.pixel_convert(this->s.surface_desc.y.lpSurface, - this->t.xlib.image->data, - this->s.surface_desc.dwWidth, - this->s.surface_desc.dwHeight, - this->s.surface_desc.lPitch, - this->s.palette); +static void Xlib_copy_surface_on_screen(IDirectDrawSurface4Impl* This) { + if (This->s.ddraw->d.pixel_convert != NULL) + This->s.ddraw->d.pixel_convert(This->s.surface_desc.y.lpSurface, + This->t.xlib.image->data, + This->s.surface_desc.dwWidth, + This->s.surface_desc.dwHeight, + This->s.surface_desc.lPitch, + This->s.palette); #ifdef HAVE_LIBXXSHM - if (this->s.ddraw->e.xlib.xshm_active) + if (This->s.ddraw->e.xlib.xshm_active) TSXShmPutImage(display, - this->s.ddraw->d.drawable, + This->s.ddraw->d.drawable, DefaultGCOfScreen(X11DRV_GetXScreen()), - this->t.xlib.image, + This->t.xlib.image, 0, 0, 0, 0, - this->t.xlib.image->width, - this->t.xlib.image->height, + This->t.xlib.image->width, + This->t.xlib.image->height, False); else #endif TSXPutImage( display, - this->s.ddraw->d.drawable, + This->s.ddraw->d.drawable, DefaultGCOfScreen(X11DRV_GetXScreen()), - this->t.xlib.image, + This->t.xlib.image, 0, 0, 0, 0, - this->t.xlib.image->width, - this->t.xlib.image->height); + This->t.xlib.image->width, + This->t.xlib.image->height); } -static HRESULT WINAPI Xlib_IDirectDrawSurface4_Unlock( - LPDIRECTDRAWSURFACE4 this,LPVOID surface) +static HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_Unlock( + LPDIRECTDRAWSURFACE4 iface,LPVOID surface) { - TRACE(ddraw,"(%p)->Unlock(%p)\n",this,surface); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->Unlock(%p)\n",This,surface); - if (!this->s.ddraw->d.paintable) + if (!This->s.ddraw->d.paintable) return DD_OK; /* Only redraw the screen when unlocking the buffer that is on screen */ - if ((this->t.xlib.image != NULL) && - (this->s.surface_desc.ddsCaps.dwCaps & DDSCAPS_VISIBLE)) { - Xlib_copy_surface_on_screen(this); + if ((This->t.xlib.image != NULL) && + (This->s.surface_desc.ddsCaps.dwCaps & DDSCAPS_VISIBLE)) { + Xlib_copy_surface_on_screen(This); - if (this->s.palette && this->s.palette->cm) - TSXSetWindowColormap(display,this->s.ddraw->d.drawable,this->s.palette->cm); + if (This->s.palette && This->s.palette->cm) + TSXSetWindowColormap(display,This->s.ddraw->d.drawable,This->s.palette->cm); } return DD_OK; } -static HRESULT WINAPI DGA_IDirectDrawSurface4_Flip( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWSURFACE4 flipto,DWORD dwFlags +static HRESULT WINAPI DGA_IDirectDrawSurface4Impl_Flip( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWSURFACE4 flipto,DWORD dwFlags ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + IDirectDrawSurface4Impl* iflipto=(IDirectDrawSurface4Impl*)flipto; #ifdef HAVE_LIBXXF86DGA - TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags); - if (!flipto) { - if (this->s.backbuffer) - flipto = this->s.backbuffer; + TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",This,iflipto,dwFlags); + if (!iflipto) { + if (This->s.backbuffer) + iflipto = This->s.backbuffer; else - flipto = this; + iflipto = This; } - TSXF86DGASetViewPort(display,DefaultScreen(display),0,flipto->t.dga.fb_height); + TSXF86DGASetViewPort(display,DefaultScreen(display),0,iflipto->t.dga.fb_height); - if (flipto->s.palette && flipto->s.palette->cm) { - TSXF86DGAInstallColormap(display,DefaultScreen(display),flipto->s.palette->cm); + if (iflipto->s.palette && iflipto->s.palette->cm) { + TSXF86DGAInstallColormap(display,DefaultScreen(display),iflipto->s.palette->cm); } while (!TSXF86DGAViewPortChanged(display,DefaultScreen(display),2)) { } - if (flipto!=this) { + if (iflipto!=This) { int tmp; LPVOID ptmp; - tmp = this->t.dga.fb_height; - this->t.dga.fb_height = flipto->t.dga.fb_height; - flipto->t.dga.fb_height = tmp; + tmp = This->t.dga.fb_height; + This->t.dga.fb_height = iflipto->t.dga.fb_height; + iflipto->t.dga.fb_height = tmp; - ptmp = this->s.surface_desc.y.lpSurface; - this->s.surface_desc.y.lpSurface = flipto->s.surface_desc.y.lpSurface; - flipto->s.surface_desc.y.lpSurface = ptmp; + ptmp = This->s.surface_desc.y.lpSurface; + This->s.surface_desc.y.lpSurface = iflipto->s.surface_desc.y.lpSurface; + iflipto->s.surface_desc.y.lpSurface = ptmp; } return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ @@ -633,34 +639,36 @@ static HRESULT WINAPI DGA_IDirectDrawSurface4_Flip( #endif /* defined(HAVE_LIBXXF86DGA) */ } -static HRESULT WINAPI Xlib_IDirectDrawSurface4_Flip( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWSURFACE4 flipto,DWORD dwFlags +static HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_Flip( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWSURFACE4 flipto,DWORD dwFlags ) { - TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags); - if (!this->s.ddraw->d.paintable) + ICOM_THIS(IDirectDrawSurface4Impl,iface); + IDirectDrawSurface4Impl* iflipto=(IDirectDrawSurface4Impl*)flipto; + TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",This,iflipto,dwFlags); + if (!This->s.ddraw->d.paintable) return DD_OK; - if (!flipto) { - if (this->s.backbuffer) - flipto = this->s.backbuffer; + if (!iflipto) { + if (This->s.backbuffer) + iflipto = This->s.backbuffer; else - flipto = this; + iflipto = This; } - Xlib_copy_surface_on_screen(this); + Xlib_copy_surface_on_screen(This); - if (flipto->s.palette && flipto->s.palette->cm) { - TSXSetWindowColormap(display,this->s.ddraw->d.drawable,flipto->s.palette->cm); + if (iflipto->s.palette && iflipto->s.palette->cm) { + TSXSetWindowColormap(display,This->s.ddraw->d.drawable,iflipto->s.palette->cm); } - if (flipto!=this) { + if (iflipto!=This) { XImage *tmp; LPVOID *surf; - tmp = this->t.xlib.image; - this->t.xlib.image = flipto->t.xlib.image; - flipto->t.xlib.image = tmp; - surf = this->s.surface_desc.y.lpSurface; - this->s.surface_desc.y.lpSurface = flipto->s.surface_desc.y.lpSurface; - flipto->s.surface_desc.y.lpSurface = surf; + tmp = This->t.xlib.image; + This->t.xlib.image = iflipto->t.xlib.image; + iflipto->t.xlib.image = tmp; + surf = This->s.surface_desc.y.lpSurface; + This->s.surface_desc.y.lpSurface = iflipto->s.surface_desc.y.lpSurface; + iflipto->s.surface_desc.y.lpSurface = surf; } return DD_OK; } @@ -670,91 +678,95 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface4_Flip( * DirectDrawPalette object to a surface. The surface uses this palette for all * subsequent operations. The palette change takes place immediately. */ -static HRESULT WINAPI Xlib_IDirectDrawSurface4_SetPalette( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWPALETTE pal +static HRESULT WINAPI Xlib_IDirectDrawSurface4Impl_SetPalette( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWPALETTE pal ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + IDirectDrawPaletteImpl* ipal=(IDirectDrawPaletteImpl*)pal; int i; - TRACE(ddraw,"(%p)->(%p)\n",this,pal); + TRACE(ddraw,"(%p)->(%p)\n",This,ipal); - if (pal == NULL) { - if( this->s.palette != NULL ) - this->s.palette->lpvtbl->fnRelease( this->s.palette ); - this->s.palette = pal; + if (ipal == NULL) { + if( This->s.palette != NULL ) + IDirectDrawPalette_Release((IDirectDrawPalette*)This->s.palette); + This->s.palette = ipal; return DD_OK; } - if( !(pal->cm) && (this->s.ddraw->d.screen_pixelformat.x.dwRGBBitCount<=8)) + if( !(ipal->cm) && (This->s.ddraw->d.screen_pixelformat.x.dwRGBBitCount<=8)) { - pal->cm = TSXCreateColormap(display,this->s.ddraw->d.drawable, + ipal->cm = TSXCreateColormap(display,This->s.ddraw->d.drawable, DefaultVisualOfScreen(X11DRV_GetXScreen()),AllocAll); if (!Options.managed) - TSXInstallColormap(display,pal->cm); + TSXInstallColormap(display,ipal->cm); for (i=0;i<256;i++) { XColor xc; - xc.red = pal->palents[i].peRed<<8; - xc.blue = pal->palents[i].peBlue<<8; - xc.green = pal->palents[i].peGreen<<8; + xc.red = ipal->palents[i].peRed<<8; + xc.blue = ipal->palents[i].peBlue<<8; + xc.green = ipal->palents[i].peGreen<<8; xc.flags = DoRed|DoBlue|DoGreen; xc.pixel = i; - TSXStoreColor(display,pal->cm,&xc); + TSXStoreColor(display,ipal->cm,&xc); } - TSXInstallColormap(display,pal->cm); + TSXInstallColormap(display,ipal->cm); } /* According to spec, we are only supposed to * AddRef if this is not the same palette. */ - if( this->s.palette != pal ) + if( This->s.palette != ipal ) { - if( pal != NULL ) - pal->lpvtbl->fnAddRef( pal ); - if( this->s.palette != NULL ) - this->s.palette->lpvtbl->fnRelease( this->s.palette ); - this->s.palette = pal; + if( ipal != NULL ) + IDirectDrawPalette_AddRef( (IDirectDrawPalette*)ipal ); + if( This->s.palette != NULL ) + IDirectDrawPalette_Release( (IDirectDrawPalette*)This->s.palette ); + This->s.palette = ipal; /* I think that we need to attach it to all backbuffers...*/ - if( this->s.backbuffer ) { - if( this->s.backbuffer->s.palette ) - this->s.backbuffer->s.palette->lpvtbl->fnRelease( - this->s.backbuffer->s.palette ); - this->s.backbuffer->s.palette = pal; - if( pal ) - pal->lpvtbl->fnAddRef( pal ); + if( This->s.backbuffer ) { + if( This->s.backbuffer->s.palette ) + IDirectDrawPalette_Release( (IDirectDrawPalette*)This->s.backbuffer->s.palette ); + This->s.backbuffer->s.palette = ipal; + if( ipal ) + IDirectDrawPalette_AddRef( (IDirectDrawPalette*)ipal ); } /* Perform the refresh */ - TSXSetWindowColormap(display,this->s.ddraw->d.drawable,this->s.palette->cm); + TSXSetWindowColormap(display,This->s.ddraw->d.drawable,This->s.palette->cm); } return DD_OK; } -static HRESULT WINAPI DGA_IDirectDrawSurface4_SetPalette( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWPALETTE pal +static HRESULT WINAPI DGA_IDirectDrawSurface4Impl_SetPalette( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWPALETTE pal ) { - TRACE(ddraw,"(%p)->(%p)\n",this,pal); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + IDirectDrawPaletteImpl* ipal=(IDirectDrawPaletteImpl*)pal; + TRACE(ddraw,"(%p)->(%p)\n",This,ipal); #ifdef HAVE_LIBXXF86DGA /* According to spec, we are only supposed to * AddRef if this is not the same palette. */ - if( this->s.palette != pal ) + if( This->s.palette != ipal ) { - if( pal != NULL ) - pal->lpvtbl->fnAddRef( pal ); - if( this->s.palette != NULL ) - this->s.palette->lpvtbl->fnRelease( this->s.palette ); - this->s.palette = pal; + if( ipal != NULL ) + IDirectDrawPalette_AddRef( (IDirectDrawPalette*)ipal ); + if( This->s.palette != NULL ) + IDirectDrawPalette_Release( (IDirectDrawPalette*)This->s.palette ); + This->s.palette = ipal; /* I think that we need to attach it to all backbuffers...*/ - if( this->s.backbuffer ) { - if( this->s.backbuffer->s.palette ) - this->s.backbuffer->s.palette->lpvtbl->fnRelease(this->s.backbuffer->s.palette ); - this->s.backbuffer->s.palette = pal; - if( pal ) pal->lpvtbl->fnAddRef( pal ); + if( This->s.backbuffer ) { + if( This->s.backbuffer->s.palette ) + IDirectDrawPalette_Release( (IDirectDrawPalette*)This->s.backbuffer->s.palette ); + This->s.backbuffer->s.palette = ipal; + if ( ipal ) + IDirectDrawPalette_AddRef( (IDirectDrawPalette*)ipal ); } - TSXF86DGAInstallColormap(display,DefaultScreen(display),this->s.palette->cm); + TSXF86DGAInstallColormap(display,DefaultScreen(display),This->s.palette->cm); } return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ @@ -764,19 +776,21 @@ static HRESULT WINAPI DGA_IDirectDrawSurface4_SetPalette( } -static HRESULT WINAPI IDirectDrawSurface4_Blt( - LPDIRECTDRAWSURFACE4 this,LPRECT rdst,LPDIRECTDRAWSURFACE4 src,LPRECT rsrc,DWORD dwFlags,LPDDBLTFX lpbltfx +static HRESULT WINAPI IDirectDrawSurface4Impl_Blt( + LPDIRECTDRAWSURFACE4 iface,LPRECT rdst,LPDIRECTDRAWSURFACE4 src,LPRECT rsrc,DWORD dwFlags,LPDDBLTFX lpbltfx ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + IDirectDrawSurface4Impl* isrc=(IDirectDrawSurface4Impl*)src; RECT xdst,xsrc; DDSURFACEDESC ddesc,sdesc; int i,j; TRACE(ddraw,"(%p)->(%p,%p,%p,%08lx,%p)\n", - this,rdst,src,rsrc,dwFlags,lpbltfx); + This,rdst,isrc,rsrc,dwFlags,lpbltfx); - if (src != NULL) - src ->lpvtbl->fnLock(src, NULL,&sdesc,0,0); - this->lpvtbl->fnLock(this,NULL,&ddesc,0,0); + if (isrc != NULL) + IDirectDrawSurface4_Lock(src, NULL,&sdesc,0,0); + IDirectDrawSurface4_Lock(iface,NULL,&ddesc,0,0); if (TRACE_ON(ddraw)) { if (rdst) TRACE(ddraw," destrect :%dx%d-%dx%d\n",rdst->left,rdst->top,rdst->right,rdst->bottom); @@ -799,7 +813,7 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( if (rsrc) { memcpy(&xsrc,rsrc,sizeof(xsrc)); } else { - if (src) { + if (isrc) { xsrc.top = 0; xsrc.bottom = sdesc.dwHeight; xsrc.left = 0; @@ -849,11 +863,11 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( #endif HAVE_MESAGL } - if (!src) { + if (!isrc) { if (dwFlags) { TRACE(ddraw,"\t(src=NULL):Unsupported flags: "); _dump_DDBLT(dwFlags); } - this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface); + IDirectDrawSurface4_Unlock(iface,ddesc.y.lpSurface); return DD_OK; } @@ -903,8 +917,8 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( tmp = sbuf[(((int) sy) * sdesc.lPitch) + ((int) sx)]; - if ((tmp < src->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || - (tmp > src->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) + if ((tmp < isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || + (tmp > isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) dbuf[(y * ddesc.lPitch) + x] = tmp; } } @@ -940,8 +954,8 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( ((h + xdst.top) * ddesc.lPitch) + xdst.left; for(i=0;is.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || - (tmp > src->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) + if ((tmp < isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || + (tmp > isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) *(pdst + i)=tmp; } } @@ -959,8 +973,8 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( ((h + xdst.top) * ddesc.lPitch) + xdst.left; for(i=0;is.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || - (tmp > src->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) + if ((tmp < isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceLowValue) || + (tmp > isrc->s.surface_desc.ddckCKSrcBlt.dwColorSpaceHighValue)) *(pdst + i)=tmp; } } @@ -985,21 +999,22 @@ static HRESULT WINAPI IDirectDrawSurface4_Blt( FIXME(ddraw,"\tUnsupported flags: ");_dump_DDBLT(dwFlags); } - this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface); - src ->lpvtbl->fnUnlock(src,sdesc.y.lpSurface); + IDirectDrawSurface4_Unlock(iface,ddesc.y.lpSurface); + IDirectDrawSurface4_Unlock(src,sdesc.y.lpSurface); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_BltFast( - LPDIRECTDRAWSURFACE4 this,DWORD dstx,DWORD dsty,LPDIRECTDRAWSURFACE4 src,LPRECT rsrc,DWORD trans +static HRESULT WINAPI IDirectDrawSurface4Impl_BltFast( + LPDIRECTDRAWSURFACE4 iface,DWORD dstx,DWORD dsty,LPDIRECTDRAWSURFACE4 src,LPRECT rsrc,DWORD trans ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); int i,bpp,w,h; DDSURFACEDESC ddesc,sdesc; if (1 || TRACE_ON(ddraw)) { FIXME(ddraw,"(%p)->(%ld,%ld,%p,%p,%08lx)\n", - this,dstx,dsty,src,rsrc,trans + This,dstx,dsty,src,rsrc,trans ); FIXME(ddraw," trans:"); if (FIXME_ON(ddraw)) @@ -1007,9 +1022,9 @@ static HRESULT WINAPI IDirectDrawSurface4_BltFast( FIXME(ddraw," srcrect: %dx%d-%dx%d\n",rsrc->left,rsrc->top,rsrc->right,rsrc->bottom); } /* We need to lock the surfaces, or we won't get refreshes when done. */ - src ->lpvtbl->fnLock(src, NULL,&sdesc,DDLOCK_READONLY, 0); - this->lpvtbl->fnLock(this,NULL,&ddesc,DDLOCK_WRITEONLY,0); - bpp = this->s.surface_desc.ddpfPixelFormat.x.dwRGBBitCount / 8; + IDirectDrawSurface4_Lock(src, NULL,&sdesc,DDLOCK_READONLY, 0); + IDirectDrawSurface4_Lock(iface,NULL,&ddesc,DDLOCK_WRITEONLY,0); + bpp = This->s.surface_desc.ddpfPixelFormat.x.dwRGBBitCount / 8; h=rsrc->bottom-rsrc->top; if (h>ddesc.dwHeight-dsty) h=ddesc.dwHeight-dsty; if (h>sdesc.dwHeight-rsrc->top) h=sdesc.dwHeight-rsrc->top; @@ -1025,36 +1040,39 @@ static HRESULT WINAPI IDirectDrawSurface4_BltFast( w*bpp ); } - this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface); - src ->lpvtbl->fnUnlock(src,sdesc.y.lpSurface); + IDirectDrawSurface4_Unlock(iface,ddesc.y.lpSurface); + IDirectDrawSurface4_Unlock(src,sdesc.y.lpSurface); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_BltBatch( - LPDIRECTDRAWSURFACE4 this,LPDDBLTBATCH ddbltbatch,DWORD x,DWORD y +static HRESULT WINAPI IDirectDrawSurface4Impl_BltBatch( + LPDIRECTDRAWSURFACE4 iface,LPDDBLTBATCH ddbltbatch,DWORD x,DWORD y ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); FIXME(ddraw,"(%p)->BltBatch(%p,%08lx,%08lx),stub!\n", - this,ddbltbatch,x,y + This,ddbltbatch,x,y ); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetCaps( - LPDIRECTDRAWSURFACE4 this,LPDDSCAPS caps +static HRESULT WINAPI IDirectDrawSurface4Impl_GetCaps( + LPDIRECTDRAWSURFACE4 iface,LPDDSCAPS caps ) { - TRACE(ddraw,"(%p)->GetCaps(%p)\n",this,caps); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->GetCaps(%p)\n",This,caps); caps->dwCaps = DDSCAPS_PALETTE; /* probably more */ return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetSurfaceDesc( - LPDIRECTDRAWSURFACE4 this,LPDDSURFACEDESC ddsd +static HRESULT WINAPI IDirectDrawSurface4Impl_GetSurfaceDesc( + LPDIRECTDRAWSURFACE4 iface,LPDDSURFACEDESC ddsd ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); TRACE(ddraw, "(%p)->GetSurfaceDesc(%p)\n", - this,ddsd); + This,ddsd); /* Simply copy the surface description stored in the object */ - *ddsd = this->s.surface_desc; + *ddsd = This->s.surface_desc; if (TRACE_ON(ddraw)) { DUMP(" flags: "); @@ -1072,101 +1090,105 @@ static HRESULT WINAPI IDirectDrawSurface4_GetSurfaceDesc( return DD_OK; } -static ULONG WINAPI IDirectDrawSurface4_AddRef(LPDIRECTDRAWSURFACE4 this) { - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirectDrawSurface4Impl_AddRef(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI DGA_IDirectDrawSurface4_Release(LPDIRECTDRAWSURFACE4 this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI DGA_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); #ifdef HAVE_LIBXXF86DGA - if (!--(this->ref)) { - this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw); + if (!--(This->ref)) { + IDirectDraw2_Release((IDirectDraw2*)This->s.ddraw); /* clear out of surface list */ - if (this->t.dga.fb_height == -1) { - HeapFree(GetProcessHeap(),0,this->s.surface_desc.y.lpSurface); + if (This->t.dga.fb_height == -1) { + HeapFree(GetProcessHeap(),0,This->s.surface_desc.y.lpSurface); } else { - this->s.ddraw->e.dga.vpmask &= ~(1<<(this->t.dga.fb_height/this->s.ddraw->e.dga.fb_height)); + This->s.ddraw->e.dga.vpmask &= ~(1<<(This->t.dga.fb_height/This->s.ddraw->e.dga.fb_height)); } /* Free the backbuffer */ - if (this->s.backbuffer) - this->s.backbuffer->lpvtbl->fnRelease(this->s.backbuffer); + if (This->s.backbuffer) + IDirectDrawSurface4_Release((IDirectDrawSurface4*)This->s.backbuffer); - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } #endif /* defined(HAVE_LIBXXF86DGA) */ - return this->ref; + return This->ref; } -static ULONG WINAPI Xlib_IDirectDrawSurface4_Release(LPDIRECTDRAWSURFACE4 this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI Xlib_IDirectDrawSurface4Impl_Release(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - this->s.ddraw->lpvtbl->fnRelease(this->s.ddraw); + if (!--(This->ref)) { + IDirectDraw2_Release((IDirectDraw2*)This->s.ddraw); - if( this->s.backbuffer ) - this->s.backbuffer->lpvtbl->fnRelease(this->s.backbuffer); + if( This->s.backbuffer ) + IDirectDrawSurface4_Release((IDirectDrawSurface4*)This->s.backbuffer); - if (this->t.xlib.image != NULL) { - if (this->s.ddraw->d.pixel_convert != NULL) { + if (This->t.xlib.image != NULL) { + if (This->s.ddraw->d.pixel_convert != NULL) { /* In pixel conversion mode, there are two buffers to release... */ - HeapFree(GetProcessHeap(),0,this->s.surface_desc.y.lpSurface); + HeapFree(GetProcessHeap(),0,This->s.surface_desc.y.lpSurface); #ifdef HAVE_LIBXXSHM - if (this->s.ddraw->e.xlib.xshm_active) { - TSXShmDetach(display, &(this->t.xlib.shminfo)); - TSXDestroyImage(this->t.xlib.image); - shmdt(this->t.xlib.shminfo.shmaddr); + if (This->s.ddraw->e.xlib.xshm_active) { + TSXShmDetach(display, &(This->t.xlib.shminfo)); + TSXDestroyImage(This->t.xlib.image); + shmdt(This->t.xlib.shminfo.shmaddr); } else { #endif - HeapFree(GetProcessHeap(),0,this->t.xlib.image->data); - this->t.xlib.image->data = NULL; - TSXDestroyImage(this->t.xlib.image); + HeapFree(GetProcessHeap(),0,This->t.xlib.image->data); + This->t.xlib.image->data = NULL; + TSXDestroyImage(This->t.xlib.image); #ifdef HAVE_LIBXXSHM } #endif } else { - this->t.xlib.image->data = NULL; + This->t.xlib.image->data = NULL; #ifdef HAVE_LIBXXSHM - if (this->s.ddraw->e.xlib.xshm_active) { - TSXShmDetach(display, &(this->t.xlib.shminfo)); - TSXDestroyImage(this->t.xlib.image); - shmdt(this->t.xlib.shminfo.shmaddr); + if (This->s.ddraw->e.xlib.xshm_active) { + TSXShmDetach(display, &(This->t.xlib.shminfo)); + TSXDestroyImage(This->t.xlib.image); + shmdt(This->t.xlib.shminfo.shmaddr); } else { #endif - HeapFree(GetProcessHeap(),0,this->s.surface_desc.y.lpSurface); - TSXDestroyImage(this->t.xlib.image); + HeapFree(GetProcessHeap(),0,This->s.surface_desc.y.lpSurface); + TSXDestroyImage(This->t.xlib.image); #ifdef HAVE_LIBXXSHM } #endif } - this->t.xlib.image = 0; + This->t.xlib.image = 0; } else { - HeapFree(GetProcessHeap(),0,this->s.surface_desc.y.lpSurface); + HeapFree(GetProcessHeap(),0,This->s.surface_desc.y.lpSurface); } - if (this->s.palette) - this->s.palette->lpvtbl->fnRelease(this->s.palette); + if (This->s.palette) + IDirectDrawPalette_Release((IDirectDrawPalette*)This->s.palette); - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static HRESULT WINAPI IDirectDrawSurface4_GetAttachedSurface( - LPDIRECTDRAWSURFACE4 this,LPDDSCAPS lpddsd,LPDIRECTDRAWSURFACE4 *lpdsf +static HRESULT WINAPI IDirectDrawSurface4Impl_GetAttachedSurface( + LPDIRECTDRAWSURFACE4 iface,LPDDSCAPS lpddsd,LPDIRECTDRAWSURFACE4 *lpdsf ) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); TRACE(ddraw, "(%p)->GetAttachedSurface(%p,%p)\n", - this, lpddsd, lpdsf); + This, lpddsd, lpdsf); if (TRACE_ON(ddraw)) { TRACE(ddraw," caps "); @@ -1179,96 +1201,105 @@ static HRESULT WINAPI IDirectDrawSurface4_GetAttachedSurface( } /* FIXME: should handle more than one backbuffer */ - *lpdsf = this->s.backbuffer; + *lpdsf = (LPDIRECTDRAWSURFACE4)This->s.backbuffer; - if( this->s.backbuffer ) - this->s.backbuffer->lpvtbl->fnAddRef( this->s.backbuffer ); + if( This->s.backbuffer ) + IDirectDrawSurface4_AddRef( (IDirectDrawSurface4*)This->s.backbuffer ); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_Initialize( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAW ddraw,LPDDSURFACEDESC lpdsfd +static HRESULT WINAPI IDirectDrawSurface4Impl_Initialize( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAW ddraw,LPDDSURFACEDESC lpdsfd ) { - TRACE(ddraw,"(%p)->(%p, %p)\n",this,ddraw,lpdsfd); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->(%p, %p)\n",This,ddraw,lpdsfd); return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI IDirectDrawSurface4_GetPixelFormat( - LPDIRECTDRAWSURFACE4 this,LPDDPIXELFORMAT pf +static HRESULT WINAPI IDirectDrawSurface4Impl_GetPixelFormat( + LPDIRECTDRAWSURFACE4 iface,LPDDPIXELFORMAT pf ) { - TRACE(ddraw,"(%p)->(%p)\n",this,pf); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->(%p)\n",This,pf); - *pf = this->s.surface_desc.ddpfPixelFormat; + *pf = This->s.surface_desc.ddpfPixelFormat; return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetBltStatus(LPDIRECTDRAWSURFACE4 this,DWORD dwFlags) { - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",this,dwFlags); +static HRESULT WINAPI IDirectDrawSurface4Impl_GetBltStatus(LPDIRECTDRAWSURFACE4 iface,DWORD dwFlags) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",This,dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetOverlayPosition( - LPDIRECTDRAWSURFACE4 this,LPLONG x1,LPLONG x2 +static HRESULT WINAPI IDirectDrawSurface4Impl_GetOverlayPosition( + LPDIRECTDRAWSURFACE4 iface,LPLONG x1,LPLONG x2 ) { - FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,x1,x2); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p,%p),stub!\n",This,x1,x2); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_SetClipper( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWCLIPPER clipper +static HRESULT WINAPI IDirectDrawSurface4Impl_SetClipper( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWCLIPPER clipper ) { - FIXME(ddraw,"(%p)->(%p),stub!\n",this,clipper); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n",This,clipper); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_AddAttachedSurface( - LPDIRECTDRAWSURFACE4 this,LPDIRECTDRAWSURFACE4 surf +static HRESULT WINAPI IDirectDrawSurface4Impl_AddAttachedSurface( + LPDIRECTDRAWSURFACE4 iface,LPDIRECTDRAWSURFACE4 surf ) { - FIXME(ddraw,"(%p)->(%p),stub!\n",this,surf); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n",This,surf); - this->lpvtbl->fnAddRef(this); + IDirectDrawSurface4_AddRef(iface); /* This hack will be enough for the moment */ - if (this->s.backbuffer == NULL) - this->s.backbuffer = surf; + if (This->s.backbuffer == NULL) + This->s.backbuffer = (IDirectDrawSurface4Impl*)surf; return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetDC(LPDIRECTDRAWSURFACE4 this,HDC* lphdc) { - FIXME(ddraw,"(%p)->GetDC(%p)\n",this,lphdc); - *lphdc = BeginPaint(this->s.ddraw->d.window,&this->s.ddraw->d.ps); +static HRESULT WINAPI IDirectDrawSurface4Impl_GetDC(LPDIRECTDRAWSURFACE4 iface,HDC* lphdc) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->GetDC(%p)\n",This,lphdc); + *lphdc = BeginPaint(This->s.ddraw->d.window,&This->s.ddraw->d.ps); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_ReleaseDC(LPDIRECTDRAWSURFACE4 this,HDC hdc) { +static HRESULT WINAPI IDirectDrawSurface4Impl_ReleaseDC(LPDIRECTDRAWSURFACE4 iface,HDC hdc) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); DDSURFACEDESC desc; DWORD x, y; - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",this,(long)hdc); - EndPaint(this->s.ddraw->d.window,&this->s.ddraw->d.ps); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",This,(long)hdc); + EndPaint(This->s.ddraw->d.window,&This->s.ddraw->d.ps); /* Well, as what the application did paint in this DC is NOT saved in the surface, I fill it with 'dummy' values to have something on the screen */ - this->lpvtbl->fnLock(this,NULL,&desc,0,0); + IDirectDrawSurface4_Lock(iface,NULL,&desc,0,0); for (y = 0; y < desc.dwHeight; y++) { for (x = 0; x < desc.dwWidth; x++) { - ((unsigned char *) desc.y.lpSurface)[x + y * desc.dwWidth] = (unsigned int) this + x + y; + ((unsigned char *) desc.y.lpSurface)[x + y * desc.dwWidth] = (unsigned int) This + x + y; } } - this->lpvtbl->fnUnlock(this,NULL); + IDirectDrawSurface4_Unlock(iface,NULL); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_QueryInterface(LPDIRECTDRAWSURFACE4 this,REFIID refiid,LPVOID *obj) { +static HRESULT WINAPI IDirectDrawSurface4Impl_QueryInterface(LPDIRECTDRAWSURFACE4 iface,REFIID refiid,LPVOID *obj) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - TRACE(ddraw,"(%p)->(%s,%p)\n",this,xrefiid,obj); + TRACE(ddraw,"(%p)->(%s,%p)\n",This,xrefiid,obj); /* All DirectDrawSurface versions (1, 2, 3 and 4) use * the same interface. And IUnknown does that too of course. @@ -1279,8 +1310,8 @@ static HRESULT WINAPI IDirectDrawSurface4_QueryInterface(LPDIRECTDRAWSURFACE4 th !memcmp(&IID_IDirectDrawSurface,refiid,sizeof(IID)) || !memcmp(&IID_IUnknown,refiid,sizeof(IID)) ) { - *obj = this; - this->lpvtbl->fnAddRef(this); + *obj = This; + IDirectDrawSurface4_AddRef(iface); TRACE(ddraw, " Creating IDirectDrawSurface interface (%p)\n", *obj); @@ -1289,8 +1320,8 @@ static HRESULT WINAPI IDirectDrawSurface4_QueryInterface(LPDIRECTDRAWSURFACE4 th else if (!memcmp(&IID_IDirect3DTexture2,refiid,sizeof(IID))) { /* Texture interface */ - *obj = d3dtexture2_create(this); - this->lpvtbl->fnAddRef(this); + *obj = d3dtexture2_create(This); + IDirectDrawSurface4_AddRef(iface); TRACE(ddraw, " Creating IDirect3DTexture2 interface (%p)\n", *obj); @@ -1299,73 +1330,77 @@ static HRESULT WINAPI IDirectDrawSurface4_QueryInterface(LPDIRECTDRAWSURFACE4 th else if (!memcmp(&IID_IDirect3DTexture,refiid,sizeof(IID))) { /* Texture interface */ - *obj = d3dtexture_create(this); - this->lpvtbl->fnAddRef(this); + *obj = d3dtexture_create(This); + IDirectDrawSurface4_AddRef(iface); TRACE(ddraw, " Creating IDirect3DTexture interface (%p)\n", *obj); return S_OK; } - else if (is_OpenGL_dx3(refiid, (LPDIRECTDRAWSURFACE) this, (LPDIRECT3DDEVICE *) obj)) + else if (is_OpenGL_dx3(refiid, (IDirectDrawSurfaceImpl*)This, (IDirect3DDeviceImpl**) obj)) { /* It is the OpenGL Direct3D Device */ - this->lpvtbl->fnAddRef(this); + IDirectDrawSurface4_AddRef(iface); TRACE(ddraw, " Creating IDirect3DDevice interface (%p)\n", *obj); return S_OK; } - FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",this,xrefiid); + FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",This,xrefiid); return OLE_E_ENUM_NOMORE; } -static HRESULT WINAPI IDirectDrawSurface4_IsLost(LPDIRECTDRAWSURFACE4 this) { - TRACE(ddraw,"(%p)->(), stub!\n",this); +static HRESULT WINAPI IDirectDrawSurface4Impl_IsLost(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->(), stub!\n",This); return DD_OK; /* hmm */ } -static HRESULT WINAPI IDirectDrawSurface4_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE4 this,LPVOID context,LPDDENUMSURFACESCALLBACK esfcb) { - FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,context,esfcb); +static HRESULT WINAPI IDirectDrawSurface4Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE4 iface,LPVOID context,LPDDENUMSURFACESCALLBACK esfcb) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p,%p),stub!\n",This,context,esfcb); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_Restore(LPDIRECTDRAWSURFACE4 this) { - FIXME(ddraw,"(%p)->(),stub!\n",this); +static HRESULT WINAPI IDirectDrawSurface4Impl_Restore(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(),stub!\n",This); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_SetColorKey( - LPDIRECTDRAWSURFACE4 this, DWORD dwFlags, LPDDCOLORKEY ckey ) +static HRESULT WINAPI IDirectDrawSurface4Impl_SetColorKey( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags, LPDDCOLORKEY ckey ) { - TRACE(ddraw,"(%p)->(0x%08lx,%p)\n",this,dwFlags,ckey); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->(0x%08lx,%p)\n",This,dwFlags,ckey); if( dwFlags & DDCKEY_SRCBLT ) { dwFlags &= ~DDCKEY_SRCBLT; - this->s.surface_desc.dwFlags |= DDSD_CKSRCBLT; - memcpy( &(this->s.surface_desc.ddckCKSrcBlt), ckey, sizeof( *ckey ) ); + This->s.surface_desc.dwFlags |= DDSD_CKSRCBLT; + memcpy( &(This->s.surface_desc.ddckCKSrcBlt), ckey, sizeof( *ckey ) ); } if( dwFlags & DDCKEY_DESTBLT ) { dwFlags &= ~DDCKEY_DESTBLT; - this->s.surface_desc.dwFlags |= DDSD_CKDESTBLT; - memcpy( &(this->s.surface_desc.ddckCKDestBlt), ckey, sizeof( *ckey ) ); + This->s.surface_desc.dwFlags |= DDSD_CKDESTBLT; + memcpy( &(This->s.surface_desc.ddckCKDestBlt), ckey, sizeof( *ckey ) ); } if( dwFlags & DDCKEY_SRCOVERLAY ) { dwFlags &= ~DDCKEY_SRCOVERLAY; - this->s.surface_desc.dwFlags |= DDSD_CKSRCOVERLAY; - memcpy( &(this->s.surface_desc.ddckCKSrcOverlay), ckey, sizeof( *ckey ) ); + This->s.surface_desc.dwFlags |= DDSD_CKSRCOVERLAY; + memcpy( &(This->s.surface_desc.ddckCKSrcOverlay), ckey, sizeof( *ckey ) ); } if( dwFlags & DDCKEY_DESTOVERLAY ) { dwFlags &= ~DDCKEY_DESTOVERLAY; - this->s.surface_desc.dwFlags |= DDSD_CKDESTOVERLAY; - memcpy( &(this->s.surface_desc.ddckCKDestOverlay), ckey, sizeof( *ckey ) ); + This->s.surface_desc.dwFlags |= DDSD_CKDESTOVERLAY; + memcpy( &(This->s.surface_desc.ddckCKDestOverlay), ckey, sizeof( *ckey ) ); } if( dwFlags ) @@ -1377,74 +1412,79 @@ static HRESULT WINAPI IDirectDrawSurface4_SetColorKey( } -static HRESULT WINAPI IDirectDrawSurface4_AddOverlayDirtyRect( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_AddOverlayDirtyRect( + LPDIRECTDRAWSURFACE4 iface, LPRECT lpRect ) { - FIXME(ddraw,"(%p)->(%p),stub!\n",this,lpRect); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n",This,lpRect); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_DeleteAttachedSurface( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_DeleteAttachedSurface( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags, LPDIRECTDRAWSURFACE4 lpDDSAttachedSurface ) { - FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",this,dwFlags,lpDDSAttachedSurface); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",This,dwFlags,lpDDSAttachedSurface); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_EnumOverlayZOrders( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_EnumOverlayZOrders( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback ) { - FIXME(ddraw,"(%p)->(0x%08lx,%p,%p),stub!\n", this,dwFlags, + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx,%p,%p),stub!\n", This,dwFlags, lpContext, lpfnCallback ); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetClipper( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetClipper( + LPDIRECTDRAWSURFACE4 iface, LPDIRECTDRAWCLIPPER* lplpDDClipper ) { - FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDDClipper); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n", This, lplpDDClipper); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetColorKey( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetColorKey( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags, LPDDCOLORKEY lpDDColorKey ) { - TRACE(ddraw,"(%p)->(0x%08lx,%p)\n", this, dwFlags, lpDDColorKey); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + TRACE(ddraw,"(%p)->(0x%08lx,%p)\n", This, dwFlags, lpDDColorKey); if( dwFlags & DDCKEY_SRCBLT ) { dwFlags &= ~DDCKEY_SRCBLT; - memcpy( lpDDColorKey, &(this->s.surface_desc.ddckCKSrcBlt), sizeof( *lpDDColorKey ) ); + memcpy( lpDDColorKey, &(This->s.surface_desc.ddckCKSrcBlt), sizeof( *lpDDColorKey ) ); } if( dwFlags & DDCKEY_DESTBLT ) { dwFlags &= ~DDCKEY_DESTBLT; - memcpy( lpDDColorKey, &(this->s.surface_desc.ddckCKDestBlt), sizeof( *lpDDColorKey ) ); + memcpy( lpDDColorKey, &(This->s.surface_desc.ddckCKDestBlt), sizeof( *lpDDColorKey ) ); } if( dwFlags & DDCKEY_SRCOVERLAY ) { dwFlags &= ~DDCKEY_SRCOVERLAY; - memcpy( lpDDColorKey, &(this->s.surface_desc.ddckCKSrcOverlay), sizeof( *lpDDColorKey ) ); + memcpy( lpDDColorKey, &(This->s.surface_desc.ddckCKSrcOverlay), sizeof( *lpDDColorKey ) ); } if( dwFlags & DDCKEY_DESTOVERLAY ) { dwFlags &= ~DDCKEY_DESTOVERLAY; - memcpy( lpDDColorKey, &(this->s.surface_desc.ddckCKDestOverlay), sizeof( *lpDDColorKey ) ); + memcpy( lpDDColorKey, &(This->s.surface_desc.ddckCKDestOverlay), sizeof( *lpDDColorKey ) ); } if( dwFlags ) @@ -1455,240 +1495,255 @@ static HRESULT WINAPI IDirectDrawSurface4_GetColorKey( return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetFlipStatus( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetFlipStatus( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", This, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetPalette( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetPalette( + LPDIRECTDRAWSURFACE4 iface, LPDIRECTDRAWPALETTE* lplpDDPalette ) { - FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDDPalette); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n", This, lplpDDPalette); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_SetOverlayPosition( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_SetOverlayPosition( + LPDIRECTDRAWSURFACE4 iface, LONG lX, LONG lY) { - FIXME(ddraw,"(%p)->(%ld,%ld),stub!\n", this, lX, lY); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%ld,%ld),stub!\n", This, lX, lY); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_UpdateOverlay( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_UpdateOverlay( + LPDIRECTDRAWSURFACE4 iface, LPRECT lpSrcRect, LPDIRECTDRAWSURFACE4 lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx ) { - FIXME(ddraw,"(%p)->(%p,%p,%p,0x%08lx,%p),stub!\n", this, + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p,%p,%p,0x%08lx,%p),stub!\n", This, lpSrcRect, lpDDDestSurface, lpDestRect, dwFlags, lpDDOverlayFx ); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_UpdateOverlayDisplay( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_UpdateOverlayDisplay( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", This, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_UpdateOverlayZOrder( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_UpdateOverlayZOrder( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags, LPDIRECTDRAWSURFACE4 lpDDSReference ) { - FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n", this, dwFlags, lpDDSReference); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n", This, dwFlags, lpDDSReference); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetDDInterface( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetDDInterface( + LPDIRECTDRAWSURFACE4 iface, LPVOID* lplpDD ) { - FIXME(ddraw,"(%p)->(%p),stub!\n", this, lplpDD); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n", This, lplpDD); /* Not sure about that... */ - *lplpDD = (void *) this->s.ddraw; + *lplpDD = (void *) This->s.ddraw; return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_PageLock( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_PageLock( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", This, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_PageUnlock( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_PageUnlock( + LPDIRECTDRAWSURFACE4 iface, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", this, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx),stub!\n", This, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_SetSurfaceDesc( - LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_SetSurfaceDesc( + LPDIRECTDRAWSURFACE4 iface, LPDDSURFACEDESC lpDDSD, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n", this, lpDDSD, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n", This, lpDDSD, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_SetPrivateData(LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_SetPrivateData(LPDIRECTDRAWSURFACE4 iface, REFGUID guidTag, LPVOID lpData, DWORD cbSize, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%p,%ld,%08lx\n", this, guidTag, lpData, cbSize, dwFlags); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p,%ld,%08lx\n", This, guidTag, lpData, cbSize, dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetPrivateData(LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetPrivateData(LPDIRECTDRAWSURFACE4 iface, REFGUID guidTag, LPVOID lpBuffer, LPDWORD lpcbBufferSize) { - FIXME(ddraw, "(%p)->(%p,%p,%p)\n", this, guidTag, lpBuffer, lpcbBufferSize); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw, "(%p)->(%p,%p,%p)\n", This, guidTag, lpBuffer, lpcbBufferSize); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_FreePrivateData(LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_FreePrivateData(LPDIRECTDRAWSURFACE4 iface, REFGUID guidTag) { - FIXME(ddraw, "(%p)->(%p)\n", this, guidTag); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw, "(%p)->(%p)\n", This, guidTag); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_GetUniquenessValue(LPDIRECTDRAWSURFACE4 this, +static HRESULT WINAPI IDirectDrawSurface4Impl_GetUniquenessValue(LPDIRECTDRAWSURFACE4 iface, LPDWORD lpValue) { - FIXME(ddraw, "(%p)->(%p)\n", this, lpValue); + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw, "(%p)->(%p)\n", This, lpValue); return DD_OK; } -static HRESULT WINAPI IDirectDrawSurface4_ChangeUniquenessValue(LPDIRECTDRAWSURFACE4 this) { - FIXME(ddraw, "(%p)\n", this); +static HRESULT WINAPI IDirectDrawSurface4Impl_ChangeUniquenessValue(LPDIRECTDRAWSURFACE4 iface) { + ICOM_THIS(IDirectDrawSurface4Impl,iface); + FIXME(ddraw, "(%p)\n", This); return DD_OK; } -static struct IDirectDrawSurface4_VTable dga_dds4vt = { - IDirectDrawSurface4_QueryInterface, - IDirectDrawSurface4_AddRef, - DGA_IDirectDrawSurface4_Release, - IDirectDrawSurface4_AddAttachedSurface, - IDirectDrawSurface4_AddOverlayDirtyRect, - IDirectDrawSurface4_Blt, - IDirectDrawSurface4_BltBatch, - IDirectDrawSurface4_BltFast, - IDirectDrawSurface4_DeleteAttachedSurface, - IDirectDrawSurface4_EnumAttachedSurfaces, - IDirectDrawSurface4_EnumOverlayZOrders, - DGA_IDirectDrawSurface4_Flip, - IDirectDrawSurface4_GetAttachedSurface, - IDirectDrawSurface4_GetBltStatus, - IDirectDrawSurface4_GetCaps, - IDirectDrawSurface4_GetClipper, - IDirectDrawSurface4_GetColorKey, - IDirectDrawSurface4_GetDC, - IDirectDrawSurface4_GetFlipStatus, - IDirectDrawSurface4_GetOverlayPosition, - IDirectDrawSurface4_GetPalette, - IDirectDrawSurface4_GetPixelFormat, - IDirectDrawSurface4_GetSurfaceDesc, - IDirectDrawSurface4_Initialize, - IDirectDrawSurface4_IsLost, - IDirectDrawSurface4_Lock, - IDirectDrawSurface4_ReleaseDC, - IDirectDrawSurface4_Restore, - IDirectDrawSurface4_SetClipper, - IDirectDrawSurface4_SetColorKey, - IDirectDrawSurface4_SetOverlayPosition, - DGA_IDirectDrawSurface4_SetPalette, - DGA_IDirectDrawSurface4_Unlock, - IDirectDrawSurface4_UpdateOverlay, - IDirectDrawSurface4_UpdateOverlayDisplay, - IDirectDrawSurface4_UpdateOverlayZOrder, - IDirectDrawSurface4_GetDDInterface, - IDirectDrawSurface4_PageLock, - IDirectDrawSurface4_PageUnlock, - IDirectDrawSurface4_SetSurfaceDesc, - IDirectDrawSurface4_SetPrivateData, - IDirectDrawSurface4_GetPrivateData, - IDirectDrawSurface4_FreePrivateData, - IDirectDrawSurface4_GetUniquenessValue, - IDirectDrawSurface4_ChangeUniquenessValue +static ICOM_VTABLE(IDirectDrawSurface4) dga_dds4vt = { + IDirectDrawSurface4Impl_QueryInterface, + IDirectDrawSurface4Impl_AddRef, + DGA_IDirectDrawSurface4Impl_Release, + IDirectDrawSurface4Impl_AddAttachedSurface, + IDirectDrawSurface4Impl_AddOverlayDirtyRect, + IDirectDrawSurface4Impl_Blt, + IDirectDrawSurface4Impl_BltBatch, + IDirectDrawSurface4Impl_BltFast, + IDirectDrawSurface4Impl_DeleteAttachedSurface, + IDirectDrawSurface4Impl_EnumAttachedSurfaces, + IDirectDrawSurface4Impl_EnumOverlayZOrders, + DGA_IDirectDrawSurface4Impl_Flip, + IDirectDrawSurface4Impl_GetAttachedSurface, + IDirectDrawSurface4Impl_GetBltStatus, + IDirectDrawSurface4Impl_GetCaps, + IDirectDrawSurface4Impl_GetClipper, + IDirectDrawSurface4Impl_GetColorKey, + IDirectDrawSurface4Impl_GetDC, + IDirectDrawSurface4Impl_GetFlipStatus, + IDirectDrawSurface4Impl_GetOverlayPosition, + IDirectDrawSurface4Impl_GetPalette, + IDirectDrawSurface4Impl_GetPixelFormat, + IDirectDrawSurface4Impl_GetSurfaceDesc, + IDirectDrawSurface4Impl_Initialize, + IDirectDrawSurface4Impl_IsLost, + IDirectDrawSurface4Impl_Lock, + IDirectDrawSurface4Impl_ReleaseDC, + IDirectDrawSurface4Impl_Restore, + IDirectDrawSurface4Impl_SetClipper, + IDirectDrawSurface4Impl_SetColorKey, + IDirectDrawSurface4Impl_SetOverlayPosition, + DGA_IDirectDrawSurface4Impl_SetPalette, + DGA_IDirectDrawSurface4Impl_Unlock, + IDirectDrawSurface4Impl_UpdateOverlay, + IDirectDrawSurface4Impl_UpdateOverlayDisplay, + IDirectDrawSurface4Impl_UpdateOverlayZOrder, + IDirectDrawSurface4Impl_GetDDInterface, + IDirectDrawSurface4Impl_PageLock, + IDirectDrawSurface4Impl_PageUnlock, + IDirectDrawSurface4Impl_SetSurfaceDesc, + IDirectDrawSurface4Impl_SetPrivateData, + IDirectDrawSurface4Impl_GetPrivateData, + IDirectDrawSurface4Impl_FreePrivateData, + IDirectDrawSurface4Impl_GetUniquenessValue, + IDirectDrawSurface4Impl_ChangeUniquenessValue }; -static struct IDirectDrawSurface4_VTable xlib_dds4vt = { - IDirectDrawSurface4_QueryInterface, - IDirectDrawSurface4_AddRef, - Xlib_IDirectDrawSurface4_Release, - IDirectDrawSurface4_AddAttachedSurface, - IDirectDrawSurface4_AddOverlayDirtyRect, - IDirectDrawSurface4_Blt, - IDirectDrawSurface4_BltBatch, - IDirectDrawSurface4_BltFast, - IDirectDrawSurface4_DeleteAttachedSurface, - IDirectDrawSurface4_EnumAttachedSurfaces, - IDirectDrawSurface4_EnumOverlayZOrders, - Xlib_IDirectDrawSurface4_Flip, - IDirectDrawSurface4_GetAttachedSurface, - IDirectDrawSurface4_GetBltStatus, - IDirectDrawSurface4_GetCaps, - IDirectDrawSurface4_GetClipper, - IDirectDrawSurface4_GetColorKey, - IDirectDrawSurface4_GetDC, - IDirectDrawSurface4_GetFlipStatus, - IDirectDrawSurface4_GetOverlayPosition, - IDirectDrawSurface4_GetPalette, - IDirectDrawSurface4_GetPixelFormat, - IDirectDrawSurface4_GetSurfaceDesc, - IDirectDrawSurface4_Initialize, - IDirectDrawSurface4_IsLost, - IDirectDrawSurface4_Lock, - IDirectDrawSurface4_ReleaseDC, - IDirectDrawSurface4_Restore, - IDirectDrawSurface4_SetClipper, - IDirectDrawSurface4_SetColorKey, - IDirectDrawSurface4_SetOverlayPosition, - Xlib_IDirectDrawSurface4_SetPalette, - Xlib_IDirectDrawSurface4_Unlock, - IDirectDrawSurface4_UpdateOverlay, - IDirectDrawSurface4_UpdateOverlayDisplay, - IDirectDrawSurface4_UpdateOverlayZOrder, - IDirectDrawSurface4_GetDDInterface, - IDirectDrawSurface4_PageLock, - IDirectDrawSurface4_PageUnlock, - IDirectDrawSurface4_SetSurfaceDesc, - IDirectDrawSurface4_SetPrivateData, - IDirectDrawSurface4_GetPrivateData, - IDirectDrawSurface4_FreePrivateData, - IDirectDrawSurface4_GetUniquenessValue, - IDirectDrawSurface4_ChangeUniquenessValue +static ICOM_VTABLE(IDirectDrawSurface4) xlib_dds4vt = { + IDirectDrawSurface4Impl_QueryInterface, + IDirectDrawSurface4Impl_AddRef, + Xlib_IDirectDrawSurface4Impl_Release, + IDirectDrawSurface4Impl_AddAttachedSurface, + IDirectDrawSurface4Impl_AddOverlayDirtyRect, + IDirectDrawSurface4Impl_Blt, + IDirectDrawSurface4Impl_BltBatch, + IDirectDrawSurface4Impl_BltFast, + IDirectDrawSurface4Impl_DeleteAttachedSurface, + IDirectDrawSurface4Impl_EnumAttachedSurfaces, + IDirectDrawSurface4Impl_EnumOverlayZOrders, + Xlib_IDirectDrawSurface4Impl_Flip, + IDirectDrawSurface4Impl_GetAttachedSurface, + IDirectDrawSurface4Impl_GetBltStatus, + IDirectDrawSurface4Impl_GetCaps, + IDirectDrawSurface4Impl_GetClipper, + IDirectDrawSurface4Impl_GetColorKey, + IDirectDrawSurface4Impl_GetDC, + IDirectDrawSurface4Impl_GetFlipStatus, + IDirectDrawSurface4Impl_GetOverlayPosition, + IDirectDrawSurface4Impl_GetPalette, + IDirectDrawSurface4Impl_GetPixelFormat, + IDirectDrawSurface4Impl_GetSurfaceDesc, + IDirectDrawSurface4Impl_Initialize, + IDirectDrawSurface4Impl_IsLost, + IDirectDrawSurface4Impl_Lock, + IDirectDrawSurface4Impl_ReleaseDC, + IDirectDrawSurface4Impl_Restore, + IDirectDrawSurface4Impl_SetClipper, + IDirectDrawSurface4Impl_SetColorKey, + IDirectDrawSurface4Impl_SetOverlayPosition, + Xlib_IDirectDrawSurface4Impl_SetPalette, + Xlib_IDirectDrawSurface4Impl_Unlock, + IDirectDrawSurface4Impl_UpdateOverlay, + IDirectDrawSurface4Impl_UpdateOverlayDisplay, + IDirectDrawSurface4Impl_UpdateOverlayZOrder, + IDirectDrawSurface4Impl_GetDDInterface, + IDirectDrawSurface4Impl_PageLock, + IDirectDrawSurface4Impl_PageUnlock, + IDirectDrawSurface4Impl_SetSurfaceDesc, + IDirectDrawSurface4Impl_SetPrivateData, + IDirectDrawSurface4Impl_GetPrivateData, + IDirectDrawSurface4Impl_FreePrivateData, + IDirectDrawSurface4Impl_GetUniquenessValue, + IDirectDrawSurface4Impl_ChangeUniquenessValue }; /****************************************************************************** @@ -1698,11 +1753,12 @@ HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, LPUNKNOWN pUnkOuter) { - TRACE(ddraw, "(%08lx,%p,%p)\n", dwFlags, lplpDDClipper, pUnkOuter); + IDirectDrawClipperImpl** ilplpDDClipper=(IDirectDrawClipperImpl**)lplpDDClipper; + TRACE(ddraw, "(%08lx,%p,%p)\n", dwFlags, ilplpDDClipper, pUnkOuter); - *lplpDDClipper = (LPDIRECTDRAWCLIPPER)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawClipper)); - (*lplpDDClipper)->lpvtbl = &ddclipvt; - (*lplpDDClipper)->ref = 1; + *ilplpDDClipper = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawClipperImpl)); + (*ilplpDDClipper)->lpvtbl = &ddclipvt; + (*ilplpDDClipper)->ref = 1; return DD_OK; } @@ -1710,124 +1766,135 @@ HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, /****************************************************************************** * IDirectDrawClipper */ -static HRESULT WINAPI IDirectDrawClipper_SetHwnd( - LPDIRECTDRAWCLIPPER this,DWORD x,HWND hwnd +static HRESULT WINAPI IDirectDrawClipperImpl_SetHwnd( + LPDIRECTDRAWCLIPPER iface,DWORD x,HWND hwnd ) { - FIXME(ddraw,"(%p)->SetHwnd(0x%08lx,0x%08lx),stub!\n",this,x,(DWORD)hwnd); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p)->SetHwnd(0x%08lx,0x%08lx),stub!\n",This,x,(DWORD)hwnd); return DD_OK; } -static ULONG WINAPI IDirectDrawClipper_Release(LPDIRECTDRAWCLIPPER this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirectDrawClipperImpl_Release(LPDIRECTDRAWCLIPPER iface) { + ICOM_THIS(IDirectDrawClipperImpl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - this->ref--; - if (this->ref) - return this->ref; - HeapFree(GetProcessHeap(),0,this); + This->ref--; + if (This->ref) + return This->ref; + HeapFree(GetProcessHeap(),0,This); return 0; } -static HRESULT WINAPI IDirectDrawClipper_GetClipList( - LPDIRECTDRAWCLIPPER this,LPRECT rects,LPRGNDATA lprgn,LPDWORD hmm +static HRESULT WINAPI IDirectDrawClipperImpl_GetClipList( + LPDIRECTDRAWCLIPPER iface,LPRECT rects,LPRGNDATA lprgn,LPDWORD hmm ) { - FIXME(ddraw,"(%p,%p,%p,%p),stub!\n",this,rects,lprgn,hmm); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p,%p,%p,%p),stub!\n",This,rects,lprgn,hmm); if (hmm) *hmm=0; return DD_OK; } -static HRESULT WINAPI IDirectDrawClipper_SetClipList( - LPDIRECTDRAWCLIPPER this,LPRGNDATA lprgn,DWORD hmm +static HRESULT WINAPI IDirectDrawClipperImpl_SetClipList( + LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD hmm ) { - FIXME(ddraw,"(%p,%p,%ld),stub!\n",this,lprgn,hmm); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p,%p,%ld),stub!\n",This,lprgn,hmm); return DD_OK; } -static HRESULT WINAPI IDirectDrawClipper_QueryInterface( - LPDIRECTDRAWCLIPPER this, +static HRESULT WINAPI IDirectDrawClipperImpl_QueryInterface( + LPDIRECTDRAWCLIPPER iface, REFIID riid, LPVOID* ppvObj ) { - FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,riid,ppvObj); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p)->(%p,%p),stub!\n",This,riid,ppvObj); return OLE_E_ENUM_NOMORE; } -static ULONG WINAPI IDirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER this ) +static ULONG WINAPI IDirectDrawClipperImpl_AddRef( LPDIRECTDRAWCLIPPER iface ) { - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); - return ++(this->ref); + ICOM_THIS(IDirectDrawClipperImpl,iface); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); + return ++(This->ref); } -static HRESULT WINAPI IDirectDrawClipper_GetHWnd( - LPDIRECTDRAWCLIPPER this, +static HRESULT WINAPI IDirectDrawClipperImpl_GetHWnd( + LPDIRECTDRAWCLIPPER iface, HWND* HWndPtr ) { - FIXME(ddraw,"(%p)->(%p),stub!\n",this,HWndPtr); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n",This,HWndPtr); return DD_OK; } -static HRESULT WINAPI IDirectDrawClipper_Initialize( - LPDIRECTDRAWCLIPPER this, +static HRESULT WINAPI IDirectDrawClipperImpl_Initialize( + LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags ) { - FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n",this,lpDD,dwFlags); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n",This,lpDD,dwFlags); return DD_OK; } -static HRESULT WINAPI IDirectDrawClipper_IsClipListChanged( - LPDIRECTDRAWCLIPPER this, +static HRESULT WINAPI IDirectDrawClipperImpl_IsClipListChanged( + LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged ) { - FIXME(ddraw,"(%p)->(%p),stub!\n",this,lpbChanged); + ICOM_THIS(IDirectDrawClipperImpl,iface); + FIXME(ddraw,"(%p)->(%p),stub!\n",This,lpbChanged); return DD_OK; } -static struct IDirectDrawClipper_VTable ddclipvt = { - IDirectDrawClipper_QueryInterface, - IDirectDrawClipper_AddRef, - IDirectDrawClipper_Release, - IDirectDrawClipper_GetClipList, - IDirectDrawClipper_GetHWnd, - IDirectDrawClipper_Initialize, - IDirectDrawClipper_IsClipListChanged, - IDirectDrawClipper_SetClipList, - IDirectDrawClipper_SetHwnd +static ICOM_VTABLE(IDirectDrawClipper) ddclipvt = { + IDirectDrawClipperImpl_QueryInterface, + IDirectDrawClipperImpl_AddRef, + IDirectDrawClipperImpl_Release, + IDirectDrawClipperImpl_GetClipList, + IDirectDrawClipperImpl_GetHWnd, + IDirectDrawClipperImpl_Initialize, + IDirectDrawClipperImpl_IsClipListChanged, + IDirectDrawClipperImpl_SetClipList, + IDirectDrawClipperImpl_SetHwnd }; /****************************************************************************** * IDirectDrawPalette */ -static HRESULT WINAPI IDirectDrawPalette_GetEntries( - LPDIRECTDRAWPALETTE this,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent +static HRESULT WINAPI IDirectDrawPaletteImpl_GetEntries( + LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent ) { + ICOM_THIS(IDirectDrawPaletteImpl,iface); int i; TRACE(ddraw,"(%p)->GetEntries(%08lx,%ld,%ld,%p)\n", - this,x,start,count,palent); + This,x,start,count,palent); - if (!this->cm) /* should not happen */ { + if (!This->cm) /* should not happen */ { FIXME(ddraw,"app tried to read colormap for non-palettized mode\n"); return DDERR_GENERIC; } for (i=0;ipalents[start+i].peRed; - palent[i].peBlue = this->palents[start+i].peBlue; - palent[i].peGreen = this->palents[start+i].peGreen; - palent[i].peFlags = this->palents[start+i].peFlags; + palent[i].peRed = This->palents[start+i].peRed; + palent[i].peBlue = This->palents[start+i].peBlue; + palent[i].peGreen = This->palents[start+i].peGreen; + palent[i].peFlags = This->palents[start+i].peFlags; } return DD_OK; } -static HRESULT WINAPI Xlib_IDirectDrawPalette_SetEntries( - LPDIRECTDRAWPALETTE this,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent +static HRESULT WINAPI Xlib_IDirectDrawPaletteImpl_SetEntries( + LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent ) { + ICOM_THIS(IDirectDrawPaletteImpl,iface); XColor xc; int i; TRACE(ddraw,"(%p)->SetEntries(%08lx,%ld,%ld,%p)\n", - this,x,start,count,palent + This,x,start,count,palent ); for (i=0;icm) - TSXStoreColor(display,this->cm,&xc); + if (This->cm) + TSXStoreColor(display,This->cm,&xc); - this->palents[start+i].peRed = palent[i].peRed; - this->palents[start+i].peBlue = palent[i].peBlue; - this->palents[start+i].peGreen = palent[i].peGreen; - this->palents[start+i].peFlags = palent[i].peFlags; + This->palents[start+i].peRed = palent[i].peRed; + This->palents[start+i].peBlue = palent[i].peBlue; + This->palents[start+i].peGreen = palent[i].peGreen; + This->palents[start+i].peFlags = palent[i].peFlags; } /* Now, if we are in 'depth conversion mode', update the screen palette */ - if (this->ddraw->d.palette_convert != NULL) - this->ddraw->d.palette_convert(palent, this->screen_palents, start, count); + if (This->ddraw->d.palette_convert != NULL) + This->ddraw->d.palette_convert(palent, This->screen_palents, start, count); return DD_OK; } -static HRESULT WINAPI DGA_IDirectDrawPalette_SetEntries( - LPDIRECTDRAWPALETTE this,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent +static HRESULT WINAPI DGA_IDirectDrawPaletteImpl_SetEntries( + LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent ) { #ifdef HAVE_LIBXXF86DGA + ICOM_THIS(IDirectDrawPaletteImpl,iface); XColor xc; Colormap cm; int i; TRACE(ddraw,"(%p)->SetEntries(%08lx,%ld,%ld,%p)\n", - this,x,start,count,palent + This,x,start,count,palent ); - if (!this->cm) /* should not happen */ { + if (!This->cm) /* should not happen */ { FIXME(ddraw,"app tried to set colormap in non-palettized mode\n"); return DDERR_GENERIC; } /* FIXME: free colorcells instead of freeing whole map */ - cm = this->cm; - this->cm = TSXCopyColormapAndFree(display,this->cm); + cm = This->cm; + This->cm = TSXCopyColormapAndFree(display,This->cm); TSXFreeColormap(display,cm); for (i=0;icm,&xc); + TSXStoreColor(display,This->cm,&xc); - this->palents[start+i].peRed = palent[i].peRed; - this->palents[start+i].peBlue = palent[i].peBlue; - this->palents[start+i].peGreen = palent[i].peGreen; - this->palents[start+i].peFlags = palent[i].peFlags; + This->palents[start+i].peRed = palent[i].peRed; + This->palents[start+i].peBlue = palent[i].peBlue; + This->palents[start+i].peGreen = palent[i].peGreen; + This->palents[start+i].peFlags = palent[i].peFlags; } - TSXF86DGAInstallColormap(display,DefaultScreen(display),this->cm); + TSXF86DGAInstallColormap(display,DefaultScreen(display),This->cm); return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ return E_UNEXPECTED; #endif /* defined(HAVE_LIBXXF86DGA) */ } -static ULONG WINAPI IDirectDrawPalette_Release(LPDIRECTDRAWPALETTE this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); - if (!--(this->ref)) { - if (this->cm) { - TSXFreeColormap(display,this->cm); - this->cm = 0; +static ULONG WINAPI IDirectDrawPaletteImpl_Release(LPDIRECTDRAWPALETTE iface) { + ICOM_THIS(IDirectDrawPaletteImpl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); + if (!--(This->ref)) { + if (This->cm) { + TSXFreeColormap(display,This->cm); + This->cm = 0; } - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static ULONG WINAPI IDirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE this) { +static ULONG WINAPI IDirectDrawPaletteImpl_AddRef(LPDIRECTDRAWPALETTE iface) { + ICOM_THIS(IDirectDrawPaletteImpl,iface); - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); - return ++(this->ref); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); + return ++(This->ref); } -static HRESULT WINAPI IDirectDrawPalette_Initialize( - LPDIRECTDRAWPALETTE this,LPDIRECTDRAW ddraw,DWORD x,LPPALETTEENTRY palent +static HRESULT WINAPI IDirectDrawPaletteImpl_Initialize( + LPDIRECTDRAWPALETTE iface,LPDIRECTDRAW ddraw,DWORD x,LPPALETTEENTRY palent ) { - TRACE(ddraw,"(%p)->(%p,%ld,%p)\n", this, ddraw, x, palent); + ICOM_THIS(IDirectDrawPaletteImpl,iface); + TRACE(ddraw,"(%p)->(%p,%ld,%p)\n", This, ddraw, x, palent); return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI IDirectDrawPalette_GetCaps( - LPDIRECTDRAWPALETTE this, LPDWORD lpdwCaps ) +static HRESULT WINAPI IDirectDrawPaletteImpl_GetCaps( + LPDIRECTDRAWPALETTE iface, LPDWORD lpdwCaps ) { - FIXME( ddraw, "(%p)->(%p) stub.\n", this, lpdwCaps ); + ICOM_THIS(IDirectDrawPaletteImpl,iface); + FIXME( ddraw, "(%p)->(%p) stub.\n", This, lpdwCaps ); return DD_OK; } -static HRESULT WINAPI IDirectDrawPalette_QueryInterface( - LPDIRECTDRAWPALETTE this,REFIID refiid,LPVOID *obj ) +static HRESULT WINAPI IDirectDrawPaletteImpl_QueryInterface( + LPDIRECTDRAWPALETTE iface,REFIID refiid,LPVOID *obj ) { + ICOM_THIS(IDirectDrawPaletteImpl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - FIXME(ddraw,"(%p)->(%s,%p) stub.\n",this,xrefiid,obj); + FIXME(ddraw,"(%p)->(%s,%p) stub.\n",This,xrefiid,obj); return S_OK; } -static struct IDirectDrawPalette_VTable dga_ddpalvt = { - IDirectDrawPalette_QueryInterface, - IDirectDrawPalette_AddRef, - IDirectDrawPalette_Release, - IDirectDrawPalette_GetCaps, - IDirectDrawPalette_GetEntries, - IDirectDrawPalette_Initialize, - DGA_IDirectDrawPalette_SetEntries +static ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = { + IDirectDrawPaletteImpl_QueryInterface, + IDirectDrawPaletteImpl_AddRef, + IDirectDrawPaletteImpl_Release, + IDirectDrawPaletteImpl_GetCaps, + IDirectDrawPaletteImpl_GetEntries, + IDirectDrawPaletteImpl_Initialize, + DGA_IDirectDrawPaletteImpl_SetEntries }; -static struct IDirectDrawPalette_VTable xlib_ddpalvt = { - IDirectDrawPalette_QueryInterface, - IDirectDrawPalette_AddRef, - IDirectDrawPalette_Release, - IDirectDrawPalette_GetCaps, - IDirectDrawPalette_GetEntries, - IDirectDrawPalette_Initialize, - Xlib_IDirectDrawPalette_SetEntries +static ICOM_VTABLE(IDirectDrawPalette) xlib_ddpalvt = { + IDirectDrawPaletteImpl_QueryInterface, + IDirectDrawPaletteImpl_AddRef, + IDirectDrawPaletteImpl_Release, + IDirectDrawPaletteImpl_GetCaps, + IDirectDrawPaletteImpl_GetEntries, + IDirectDrawPaletteImpl_Initialize, + Xlib_IDirectDrawPaletteImpl_SetEntries }; /******************************************************************************* * IDirect3D */ -static HRESULT WINAPI IDirect3D_QueryInterface( - LPDIRECT3D this,REFIID refiid,LPVOID *obj +static HRESULT WINAPI IDirect3DImpl_QueryInterface( + LPDIRECT3D iface,REFIID refiid,LPVOID *obj ) { + ICOM_THIS(IDirect3DImpl,iface); /* FIXME: Not sure if this is correct */ char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - TRACE(ddraw,"(%p)->(%s,%p)\n",this,xrefiid,obj); + TRACE(ddraw,"(%p)->(%s,%p)\n",This,xrefiid,obj); if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) { - *obj = this; - this->lpvtbl->fnAddRef(this); + *obj = This; + IDirect3D_AddRef(iface); TRACE(ddraw, " Creating IUnknown interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) { - LPDIRECT3D d3d; + IDirect3DImpl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + /* FIXME: isn't this a bit weird ??? */ + d3d->ddraw = (IDirectDrawImpl*)This; + IDirect3D_AddRef(iface); d3d->lpvtbl = &d3dvt; *obj = d3d; @@ -1992,12 +2067,13 @@ static HRESULT WINAPI IDirect3D_QueryInterface( return S_OK; } if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D2))) { - LPDIRECT3D2 d3d; + IDirect3D2Impl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + /* FIXME: isn't this a bit weird ??? */ + d3d->ddraw = (IDirectDrawImpl*)This; + IDirect3D_AddRef(iface); d3d->lpvtbl = &d3d2vt; *obj = d3d; @@ -2005,44 +2081,48 @@ static HRESULT WINAPI IDirect3D_QueryInterface( return S_OK; } - FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",this,xrefiid); + FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",This,xrefiid); return OLE_E_ENUM_NOMORE; } -static ULONG WINAPI IDirect3D_AddRef(LPDIRECT3D this) { - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirect3DImpl_AddRef(LPDIRECT3D iface) { + ICOM_THIS(IDirect3DImpl,iface); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3D_Release(LPDIRECT3D this) +static ULONG WINAPI IDirect3DImpl_Release(LPDIRECT3D iface) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); + ICOM_THIS(IDirect3DImpl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - this->ddraw->lpvtbl->fnRelease(this->ddraw); - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + IDirectDraw2_Release((IDirectDraw2*)This->ddraw); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static HRESULT WINAPI IDirect3D_Initialize( - LPDIRECT3D this, REFIID refiid ) +static HRESULT WINAPI IDirect3DImpl_Initialize( + LPDIRECT3D iface, REFIID refiid ) { + ICOM_THIS(IDirect3DImpl,iface); /* FIXME: Not sure if this is correct */ char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - FIXME(ddraw,"(%p)->(%s):stub.\n",this,xrefiid); + FIXME(ddraw,"(%p)->(%s):stub.\n",This,xrefiid); return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI IDirect3D_EnumDevices(LPDIRECT3D this, +static HRESULT WINAPI IDirect3DImpl_EnumDevices(LPDIRECT3D iface, LPD3DENUMDEVICESCALLBACK cb, LPVOID context) { - FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,cb,context); + ICOM_THIS(IDirect3DImpl,iface); + FIXME(ddraw,"(%p)->(%p,%p),stub!\n",This,cb,context); /* Call functions defined in d3ddevices.c */ if (!d3d_OpenGL_dx3(cb, context)) @@ -2051,95 +2131,103 @@ static HRESULT WINAPI IDirect3D_EnumDevices(LPDIRECT3D this, return DD_OK; } -static HRESULT WINAPI IDirect3D_CreateLight(LPDIRECT3D this, +static HRESULT WINAPI IDirect3DImpl_CreateLight(LPDIRECT3D iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lplight, lpunk); + ICOM_THIS(IDirect3DImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lplight, lpunk); /* Call the creation function that is located in d3dlight.c */ - *lplight = d3dlight_create_dx3(this); + *lplight = d3dlight_create_dx3(This); return DD_OK; } -static HRESULT WINAPI IDirect3D_CreateMaterial(LPDIRECT3D this, +static HRESULT WINAPI IDirect3DImpl_CreateMaterial(LPDIRECT3D iface, LPDIRECT3DMATERIAL *lpmaterial, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpmaterial, lpunk); + ICOM_THIS(IDirect3DImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk); /* Call the creation function that is located in d3dviewport.c */ - *lpmaterial = d3dmaterial_create(this); + *lpmaterial = d3dmaterial_create(This); return DD_OK; } -static HRESULT WINAPI IDirect3D_CreateViewport(LPDIRECT3D this, +static HRESULT WINAPI IDirect3DImpl_CreateViewport(LPDIRECT3D iface, LPDIRECT3DVIEWPORT *lpviewport, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpviewport, lpunk); + ICOM_THIS(IDirect3DImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpviewport, lpunk); /* Call the creation function that is located in d3dviewport.c */ - *lpviewport = d3dviewport_create(this); + *lpviewport = d3dviewport_create(This); return DD_OK; } -static HRESULT WINAPI IDirect3D_FindDevice(LPDIRECT3D this, +static HRESULT WINAPI IDirect3DImpl_FindDevice(LPDIRECT3D iface, LPD3DFINDDEVICESEARCH lpfinddevsrc, LPD3DFINDDEVICERESULT lpfinddevrst) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpfinddevsrc, lpfinddevrst); + ICOM_THIS(IDirect3DImpl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst); return DD_OK; } -static struct IDirect3D_VTable d3dvt = { - IDirect3D_QueryInterface, - IDirect3D_AddRef, - IDirect3D_Release, - IDirect3D_Initialize, - IDirect3D_EnumDevices, - IDirect3D_CreateLight, - IDirect3D_CreateMaterial, - IDirect3D_CreateViewport, - IDirect3D_FindDevice +static ICOM_VTABLE(IDirect3D) d3dvt = { + IDirect3DImpl_QueryInterface, + IDirect3DImpl_AddRef, + IDirect3DImpl_Release, + IDirect3DImpl_Initialize, + IDirect3DImpl_EnumDevices, + IDirect3DImpl_CreateLight, + IDirect3DImpl_CreateMaterial, + IDirect3DImpl_CreateViewport, + IDirect3DImpl_FindDevice }; /******************************************************************************* * IDirect3D2 */ -static HRESULT WINAPI IDirect3D2_QueryInterface( - LPDIRECT3D2 this,REFIID refiid,LPVOID *obj) { +static HRESULT WINAPI IDirect3D2Impl_QueryInterface( + LPDIRECT3D2 iface,REFIID refiid,LPVOID *obj) { + ICOM_THIS(IDirect3D2Impl,iface); /* For the moment, we use the same function as in IDirect3D */ TRACE(ddraw, "Calling IDirect3D enumerating function.\n"); - return IDirect3D_QueryInterface((LPDIRECT3D) this, refiid, obj); + return IDirect3DImpl_QueryInterface((LPDIRECT3D) This, refiid, obj); } -static ULONG WINAPI IDirect3D2_AddRef(LPDIRECT3D2 this) { - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirect3D2Impl_AddRef(LPDIRECT3D2 iface) { + ICOM_THIS(IDirect3D2Impl,iface); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI IDirect3D2_Release(LPDIRECT3D2 this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirect3D2Impl_Release(LPDIRECT3D2 iface) { + ICOM_THIS(IDirect3D2Impl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - this->ddraw->lpvtbl->fnRelease(this->ddraw); - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + IDirectDraw2_Release((IDirectDraw2*)This->ddraw); + HeapFree(GetProcessHeap(),0,This); return 0; } - return this->ref; + return This->ref; } -static HRESULT WINAPI IDirect3D2_EnumDevices( - LPDIRECT3D2 this,LPD3DENUMDEVICESCALLBACK cb, LPVOID context +static HRESULT WINAPI IDirect3D2Impl_EnumDevices( + LPDIRECT3D2 iface,LPD3DENUMDEVICESCALLBACK cb, LPVOID context ) { - FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,cb,context); + ICOM_THIS(IDirect3D2Impl,iface); + FIXME(ddraw,"(%p)->(%p,%p),stub!\n",This,cb,context); /* Call functions defined in d3ddevices.c */ if (!d3d_OpenGL(cb, context)) @@ -2148,79 +2236,84 @@ static HRESULT WINAPI IDirect3D2_EnumDevices( return DD_OK; } -static HRESULT WINAPI IDirect3D2_CreateLight(LPDIRECT3D2 this, +static HRESULT WINAPI IDirect3D2Impl_CreateLight(LPDIRECT3D2 iface, LPDIRECT3DLIGHT *lplight, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lplight, lpunk); + ICOM_THIS(IDirect3D2Impl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lplight, lpunk); /* Call the creation function that is located in d3dlight.c */ - *lplight = d3dlight_create(this); + *lplight = d3dlight_create(This); return DD_OK; } -static HRESULT WINAPI IDirect3D2_CreateMaterial(LPDIRECT3D2 this, +static HRESULT WINAPI IDirect3D2Impl_CreateMaterial(LPDIRECT3D2 iface, LPDIRECT3DMATERIAL2 *lpmaterial, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpmaterial, lpunk); + ICOM_THIS(IDirect3D2Impl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpmaterial, lpunk); /* Call the creation function that is located in d3dviewport.c */ - *lpmaterial = d3dmaterial2_create(this); + *lpmaterial = d3dmaterial2_create(This); return DD_OK; } -static HRESULT WINAPI IDirect3D2_CreateViewport(LPDIRECT3D2 this, +static HRESULT WINAPI IDirect3D2Impl_CreateViewport(LPDIRECT3D2 iface, LPDIRECT3DVIEWPORT2 *lpviewport, IUnknown *lpunk) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpviewport, lpunk); + ICOM_THIS(IDirect3D2Impl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpviewport, lpunk); /* Call the creation function that is located in d3dviewport.c */ - *lpviewport = d3dviewport2_create(this); + *lpviewport = d3dviewport2_create(This); return DD_OK; } -static HRESULT WINAPI IDirect3D2_FindDevice(LPDIRECT3D2 this, +static HRESULT WINAPI IDirect3D2Impl_FindDevice(LPDIRECT3D2 iface, LPD3DFINDDEVICESEARCH lpfinddevsrc, LPD3DFINDDEVICERESULT lpfinddevrst) { - TRACE(ddraw, "(%p)->(%p,%p): stub\n", this, lpfinddevsrc, lpfinddevrst); + ICOM_THIS(IDirect3D2Impl,iface); + TRACE(ddraw, "(%p)->(%p,%p): stub\n", This, lpfinddevsrc, lpfinddevrst); return DD_OK; } -static HRESULT WINAPI IDirect3D2_CreateDevice(LPDIRECT3D2 this, +static HRESULT WINAPI IDirect3D2Impl_CreateDevice(LPDIRECT3D2 iface, REFCLSID rguid, LPDIRECTDRAWSURFACE surface, LPDIRECT3DDEVICE2 *device) { + ICOM_THIS(IDirect3D2Impl,iface); char xbuf[50]; WINE_StringFromCLSID(rguid,xbuf); - FIXME(ddraw,"(%p)->(%s,%p,%p): stub\n",this,xbuf,surface,device); + FIXME(ddraw,"(%p)->(%s,%p,%p): stub\n",This,xbuf,surface,device); - if (is_OpenGL(rguid, surface, device, this)) { - this->lpvtbl->fnAddRef(this); + if (is_OpenGL(rguid, (IDirectDrawSurfaceImpl*)surface, (IDirect3DDevice2Impl**)device, This)) { + IDirect3D2_AddRef(iface); return DD_OK; } return DDERR_INVALIDPARAMS; } -static struct IDirect3D2_VTable d3d2vt = { - IDirect3D2_QueryInterface, - IDirect3D2_AddRef, - IDirect3D2_Release, - IDirect3D2_EnumDevices, - IDirect3D2_CreateLight, - IDirect3D2_CreateMaterial, - IDirect3D2_CreateViewport, - IDirect3D2_FindDevice, - IDirect3D2_CreateDevice +static ICOM_VTABLE(IDirect3D2) d3d2vt = { + IDirect3D2Impl_QueryInterface, + IDirect3D2Impl_AddRef, + IDirect3D2Impl_Release, + IDirect3D2Impl_EnumDevices, + IDirect3D2Impl_CreateLight, + IDirect3D2Impl_CreateMaterial, + IDirect3D2Impl_CreateViewport, + IDirect3D2Impl_FindDevice, + IDirect3D2Impl_CreateDevice }; /******************************************************************************* @@ -2232,9 +2325,9 @@ static struct IDirect3D2_VTable d3d2vt = { */ static INT ddrawXlibThisOffset = 0; -static HRESULT common_off_screen_CreateSurface(LPDIRECTDRAW2 this, +static HRESULT common_off_screen_CreateSurface(IDirectDraw2Impl* This, LPDDSURFACEDESC lpddsd, - LPDIRECTDRAWSURFACE lpdsf) + IDirectDrawSurfaceImpl* lpdsf) { int bpp; @@ -2249,7 +2342,7 @@ static HRESULT common_off_screen_CreateSurface(LPDIRECTDRAW2 this, /* This is a standard image */ if (!(lpddsd->dwFlags & DDSD_PIXELFORMAT)) { /* No pixel format => use DirectDraw's format */ - lpddsd->ddpfPixelFormat = this->d.directdraw_pixelformat; + lpddsd->ddpfPixelFormat = This->d.directdraw_pixelformat; lpddsd->dwFlags |= DDSD_PIXELFORMAT; } else { /* To check what the program wants */ @@ -2275,13 +2368,15 @@ static HRESULT common_off_screen_CreateSurface(LPDIRECTDRAW2 this, return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface( - LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk +static HRESULT WINAPI DGA_IDirectDraw2Impl_CreateSurface( + LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk ) { #ifdef HAVE_LIBXXF86DGA + ICOM_THIS(IDirectDraw2Impl,iface); + IDirectDrawSurfaceImpl** ilpdsf=(IDirectDrawSurfaceImpl**)lpdsf; int i; - TRACE(ddraw, "(%p)->(%p,%p,%p)\n",this,lpddsd,lpdsf,lpunk); + TRACE(ddraw, "(%p)->(%p,%p,%p)\n",This,lpddsd,ilpdsf,lpunk); if (TRACE_ON(ddraw)) { DUMP(" w=%ld,h=%ld,flags ",lpddsd->dwWidth,lpddsd->dwHeight); _dump_DDSD(lpddsd->dwFlags); @@ -2289,19 +2384,19 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface( _dump_DDSCAPS(lpddsd->ddsCaps.dwCaps); } - *lpdsf = (LPDIRECTDRAWSURFACE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface)); - this->lpvtbl->fnAddRef(this); + *ilpdsf = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurfaceImpl)); + IDirectDraw2_AddRef(iface); - (*lpdsf)->ref = 1; - (*lpdsf)->lpvtbl = (LPDIRECTDRAWSURFACE_VTABLE)&dga_dds4vt; - (*lpdsf)->s.ddraw = this; - (*lpdsf)->s.palette = NULL; - (*lpdsf)->t.dga.fb_height = -1; /* This is to have non-on screen surfaces freed */ + (*ilpdsf)->ref = 1; + (*ilpdsf)->lpvtbl = (ICOM_VTABLE(IDirectDrawSurface)*)&dga_dds4vt; + (*ilpdsf)->s.ddraw = This; + (*ilpdsf)->s.palette = NULL; + (*ilpdsf)->t.dga.fb_height = -1; /* This is to have non-on screen surfaces freed */ if (!(lpddsd->dwFlags & DDSD_WIDTH)) - lpddsd->dwWidth = this->d.width; + lpddsd->dwWidth = This->d.width; if (!(lpddsd->dwFlags & DDSD_HEIGHT)) - lpddsd->dwHeight = this->d.height; + lpddsd->dwHeight = This->d.height; /* Check if this a 'primary surface' or not */ if ((lpddsd->dwFlags & DDSD_CAPS) && @@ -2309,61 +2404,61 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface( /* This is THE primary surface => there is DGA-specific code */ /* First, store the surface description */ - (*lpdsf)->s.surface_desc = *lpddsd; + (*ilpdsf)->s.surface_desc = *lpddsd; /* Find a viewport */ for (i=0;i<32;i++) - if (!(this->e.dga.vpmask & (1<e.dga.vpmask & (1<e.dga.vpmask|=(1<s.surface_desc.y.lpSurface = - this->e.dga.fb_addr+((i*this->e.dga.fb_height)*this->e.dga.fb_width*this->d.directdraw_pixelformat.x.dwRGBBitCount/8); - (*lpdsf)->t.dga.fb_height = i*this->e.dga.fb_height; - (*lpdsf)->s.surface_desc.lPitch = this->e.dga.fb_width*this->d.directdraw_pixelformat.x.dwRGBBitCount/8; - lpddsd->lPitch = (*lpdsf)->s.surface_desc.lPitch; + This->e.dga.vpmask|=(1<s.surface_desc.y.lpSurface = + This->e.dga.fb_addr+((i*This->e.dga.fb_height)*This->e.dga.fb_width*This->d.directdraw_pixelformat.x.dwRGBBitCount/8); + (*ilpdsf)->t.dga.fb_height = i*This->e.dga.fb_height; + (*ilpdsf)->s.surface_desc.lPitch = This->e.dga.fb_width*This->d.directdraw_pixelformat.x.dwRGBBitCount/8; + lpddsd->lPitch = (*ilpdsf)->s.surface_desc.lPitch; /* Add flags if there were not present */ - (*lpdsf)->s.surface_desc.dwFlags |= DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH|DDSD_LPSURFACE|DDSD_PIXELFORMAT; - (*lpdsf)->s.surface_desc.dwWidth = this->d.width; - (*lpdsf)->s.surface_desc.dwHeight = this->d.height; - TRACE(ddraw,"primary surface: dwWidth=%ld, dwHeight=%ld, lPitch=%ld\n",this->d.width,this->d.height,lpddsd->lPitch); + (*ilpdsf)->s.surface_desc.dwFlags |= DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH|DDSD_LPSURFACE|DDSD_PIXELFORMAT; + (*ilpdsf)->s.surface_desc.dwWidth = This->d.width; + (*ilpdsf)->s.surface_desc.dwHeight = This->d.height; + TRACE(ddraw,"primary surface: dwWidth=%ld, dwHeight=%ld, lPitch=%ld\n",This->d.width,This->d.height,lpddsd->lPitch); /* We put our surface always in video memory */ - (*lpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_VISIBLE|DDSCAPS_VIDEOMEMORY; - (*lpdsf)->s.surface_desc.ddpfPixelFormat = this->d.directdraw_pixelformat; - (*lpdsf)->s.backbuffer = NULL; + (*ilpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_VISIBLE|DDSCAPS_VIDEOMEMORY; + (*ilpdsf)->s.surface_desc.ddpfPixelFormat = This->d.directdraw_pixelformat; + (*ilpdsf)->s.backbuffer = NULL; if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) { - LPDIRECTDRAWSURFACE4 back; + IDirectDrawSurface4Impl* back; if (lpddsd->dwBackBufferCount>1) FIXME(ddraw,"urks, wants to have more than one backbuffer (%ld)!\n",lpddsd->dwBackBufferCount); - (*lpdsf)->s.backbuffer = back = - (LPDIRECTDRAWSURFACE4)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface4)); - this->lpvtbl->fnAddRef(this); + (*ilpdsf)->s.backbuffer = back = + (IDirectDrawSurface4Impl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface4Impl)); + IDirectDraw2_AddRef(iface); back->ref = 1; - back->lpvtbl = (LPDIRECTDRAWSURFACE4_VTABLE)&dga_dds4vt; + back->lpvtbl = (ICOM_VTABLE(IDirectDrawSurface4)*)&dga_dds4vt; for (i=0;i<32;i++) - if (!(this->e.dga.vpmask & (1<e.dga.vpmask & (1<e.dga.vpmask|=(1<t.dga.fb_height = i*this->e.dga.fb_height; + This->e.dga.vpmask|=(1<t.dga.fb_height = i*This->e.dga.fb_height; /* Copy the surface description from the front buffer */ - back->s.surface_desc = (*lpdsf)->s.surface_desc; + back->s.surface_desc = (*ilpdsf)->s.surface_desc; /* Change the parameters that are not the same */ - back->s.surface_desc.y.lpSurface = this->e.dga.fb_addr+ - ((i*this->e.dga.fb_height)*this->e.dga.fb_width*this->d.directdraw_pixelformat.x.dwRGBBitCount/8); - back->s.ddraw = this; + back->s.surface_desc.y.lpSurface = This->e.dga.fb_addr+ + ((i*This->e.dga.fb_height)*This->e.dga.fb_width*This->d.directdraw_pixelformat.x.dwRGBBitCount/8); + back->s.ddraw = This; back->s.backbuffer = NULL; /* does not have a backbuffer, it is * one! */ /* Add relevant info to front and back buffers */ - (*lpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_FRONTBUFFER; + (*ilpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_FRONTBUFFER; back->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_BACKBUFFER; back->s.surface_desc.dwFlags &= ~DDSD_BACKBUFFERCOUNT; back->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_VISIBLE; @@ -2372,7 +2467,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface( } else { /* There is no DGA-specific code here... Go to the common surface creation function */ - return common_off_screen_CreateSurface(this, lpddsd, *lpdsf); + return common_off_screen_CreateSurface(This, lpddsd, *ilpdsf); } return DD_OK; @@ -2388,13 +2483,13 @@ static int XShmErrorHandler(Display *dpy, XErrorEvent *event) { return 0; } -static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) { +static XImage *create_xshmimage(IDirectDraw2Impl* This, IDirectDrawSurface4Impl* lpdsf) { XImage *img; int (*WineXHandler)(Display *, XErrorEvent *); img = TSXShmCreateImage(display, DefaultVisualOfScreen(X11DRV_GetXScreen()), - this->d.pixmap_depth, + This->d.pixmap_depth, ZPixmap, NULL, &(lpdsf->t.xlib.shminfo), @@ -2403,14 +2498,14 @@ static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) if (img == NULL) { MSG("Couldn't create XShm image (due to X11 remote display or failure).\nReverting to standard X images !\n"); - this->e.xlib.xshm_active = 0; + This->e.xlib.xshm_active = 0; return NULL; } lpdsf->t.xlib.shminfo.shmid = shmget( IPC_PRIVATE, img->bytes_per_line * img->height, IPC_CREAT|0777 ); if (lpdsf->t.xlib.shminfo.shmid < 0) { MSG("Couldn't create shared memory segment (due to X11 remote display or failure).\nReverting to standard X images !\n"); - this->e.xlib.xshm_active = 0; + This->e.xlib.xshm_active = 0; TSXDestroyImage(img); return NULL; } @@ -2419,7 +2514,7 @@ static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) if (img->data == (char *) -1) { MSG("Couldn't attach shared memory segment (due to X11 remote display or failure).\nReverting to standard X images !\n"); - this->e.xlib.xshm_active = 0; + This->e.xlib.xshm_active = 0; TSXDestroyImage(img); shmctl(lpdsf->t.xlib.shminfo.shmid, IPC_RMID, 0); return NULL; @@ -2450,7 +2545,7 @@ static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) XSetErrorHandler(WineXHandler); MSG("Couldn't attach shared memory segment to X server (due to X11 remote display or failure).\nReverting to standard X images !\n"); - this->e.xlib.xshm_active = 0; + This->e.xlib.xshm_active = 0; /* Leave the critical section */ LeaveCriticalSection( &X11DRV_CritSection ); @@ -2465,11 +2560,11 @@ static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) shmctl(lpdsf->t.xlib.shminfo.shmid, IPC_RMID, 0); - if (this->d.pixel_convert != NULL) { + if (This->d.pixel_convert != NULL) { lpdsf->s.surface_desc.y.lpSurface = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, lpdsf->s.surface_desc.dwWidth * lpdsf->s.surface_desc.dwHeight * - (this->d.directdraw_pixelformat.x.dwRGBBitCount)); + (This->d.directdraw_pixelformat.x.dwRGBBitCount)); } else { lpdsf->s.surface_desc.y.lpSurface = img->data; } @@ -2478,13 +2573,13 @@ static XImage *create_xshmimage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) } #endif /* HAVE_LIBXXSHM */ -static XImage *create_ximage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) { +static XImage *create_ximage(IDirectDraw2Impl* This, IDirectDrawSurface4Impl* lpdsf) { XImage *img = NULL; void *img_data; #ifdef HAVE_LIBXXSHM - if (this->e.xlib.xshm_active) { - img = create_xshmimage(this, lpdsf); + if (This->e.xlib.xshm_active) { + img = create_xshmimage(This, lpdsf); } if (img == NULL) { @@ -2493,13 +2588,13 @@ static XImage *create_ximage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) { lpdsf->s.surface_desc.y.lpSurface = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, lpdsf->s.surface_desc.dwWidth * lpdsf->s.surface_desc.dwHeight * - (this->d.directdraw_pixelformat.x.dwRGBBitCount / 8)); + (This->d.directdraw_pixelformat.x.dwRGBBitCount / 8)); - if (this->d.pixel_convert != NULL) { + if (This->d.pixel_convert != NULL) { img_data = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, lpdsf->s.surface_desc.dwWidth * lpdsf->s.surface_desc.dwHeight * - (this->d.screen_pixelformat.x.dwRGBBitCount / 8)); + (This->d.screen_pixelformat.x.dwRGBBitCount / 8)); } else { img_data = lpdsf->s.surface_desc.y.lpSurface; } @@ -2508,21 +2603,21 @@ static XImage *create_ximage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) { img = TSXCreateImage(display, DefaultVisualOfScreen(X11DRV_GetXScreen()), - this->d.pixmap_depth, + This->d.pixmap_depth, ZPixmap, 0, img_data, lpdsf->s.surface_desc.dwWidth, lpdsf->s.surface_desc.dwHeight, 32, - lpdsf->s.surface_desc.dwWidth * (this->d.screen_pixelformat.x.dwRGBBitCount / 8) + lpdsf->s.surface_desc.dwWidth * (This->d.screen_pixelformat.x.dwRGBBitCount / 8) ); #ifdef HAVE_LIBXXSHM } #endif - if (this->d.pixel_convert != NULL) { - lpdsf->s.surface_desc.lPitch = (this->d.directdraw_pixelformat.x.dwRGBBitCount / 8) * lpdsf->s.surface_desc.dwWidth; + if (This->d.pixel_convert != NULL) { + lpdsf->s.surface_desc.lPitch = (This->d.directdraw_pixelformat.x.dwRGBBitCount / 8) * lpdsf->s.surface_desc.dwWidth; } else { lpdsf->s.surface_desc.lPitch = img->bytes_per_line; } @@ -2530,11 +2625,13 @@ static XImage *create_ximage(LPDIRECTDRAW2 this, LPDIRECTDRAWSURFACE4 lpdsf) { return img; } -static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface( - LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk +static HRESULT WINAPI Xlib_IDirectDraw2Impl_CreateSurface( + LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsd,LPDIRECTDRAWSURFACE *lpdsf,IUnknown *lpunk ) { + ICOM_THIS(IDirectDraw2Impl,iface); + IDirectDrawSurfaceImpl** ilpdsf=(IDirectDrawSurfaceImpl**)lpdsf; TRACE(ddraw, "(%p)->CreateSurface(%p,%p,%p)\n", - this,lpddsd,lpdsf,lpunk); + This,lpddsd,ilpdsf,lpunk); if (TRACE_ON(ddraw)) { DUMP(" w=%ld,h=%ld,flags ",lpddsd->dwWidth,lpddsd->dwHeight); @@ -2543,67 +2640,67 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface( _dump_DDSCAPS(lpddsd->ddsCaps.dwCaps); } - *lpdsf = (LPDIRECTDRAWSURFACE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface)); + *ilpdsf = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurfaceImpl)); - this->lpvtbl->fnAddRef(this); - (*lpdsf)->s.ddraw = this; - (*lpdsf)->ref = 1; - (*lpdsf)->lpvtbl = (LPDIRECTDRAWSURFACE_VTABLE)&xlib_dds4vt; - (*lpdsf)->s.palette = NULL; - (*lpdsf)->t.xlib.image = NULL; /* This is for off-screen buffers */ + IDirectDraw2_AddRef(iface); + (*ilpdsf)->s.ddraw = This; + (*ilpdsf)->ref = 1; + (*ilpdsf)->lpvtbl = (ICOM_VTABLE(IDirectDrawSurface)*)&xlib_dds4vt; + (*ilpdsf)->s.palette = NULL; + (*ilpdsf)->t.xlib.image = NULL; /* This is for off-screen buffers */ if (!(lpddsd->dwFlags & DDSD_WIDTH)) - lpddsd->dwWidth = this->d.width; + lpddsd->dwWidth = This->d.width; if (!(lpddsd->dwFlags & DDSD_HEIGHT)) - lpddsd->dwHeight = this->d.height; + lpddsd->dwHeight = This->d.height; /* Check if this a 'primary surface' or not */ if ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)) { XImage *img; - TRACE(ddraw,"using standard XImage for a primary surface (%p)\n", *lpdsf); + TRACE(ddraw,"using standard XImage for a primary surface (%p)\n", *ilpdsf); /* First, store the surface description */ - (*lpdsf)->s.surface_desc = *lpddsd; + (*ilpdsf)->s.surface_desc = *lpddsd; /* Create the XImage */ - img = create_ximage(this, (LPDIRECTDRAWSURFACE4) *lpdsf); + img = create_ximage(This, (IDirectDrawSurface4Impl*) *ilpdsf); if (img == NULL) return DDERR_OUTOFMEMORY; - (*lpdsf)->t.xlib.image = img; + (*ilpdsf)->t.xlib.image = img; /* Add flags if there were not present */ - (*lpdsf)->s.surface_desc.dwFlags |= DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH|DDSD_LPSURFACE|DDSD_PIXELFORMAT; - (*lpdsf)->s.surface_desc.dwWidth = this->d.width; - (*lpdsf)->s.surface_desc.dwHeight = this->d.height; - (*lpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_VISIBLE|DDSCAPS_VIDEOMEMORY; - (*lpdsf)->s.surface_desc.ddpfPixelFormat = this->d.directdraw_pixelformat; - (*lpdsf)->s.backbuffer = NULL; + (*ilpdsf)->s.surface_desc.dwFlags |= DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH|DDSD_LPSURFACE|DDSD_PIXELFORMAT; + (*ilpdsf)->s.surface_desc.dwWidth = This->d.width; + (*ilpdsf)->s.surface_desc.dwHeight = This->d.height; + (*ilpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_VISIBLE|DDSCAPS_VIDEOMEMORY; + (*ilpdsf)->s.surface_desc.ddpfPixelFormat = This->d.directdraw_pixelformat; + (*ilpdsf)->s.backbuffer = NULL; /* Check for backbuffers */ if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) { - LPDIRECTDRAWSURFACE4 back; + IDirectDrawSurface4Impl* back; XImage *img; if (lpddsd->dwBackBufferCount>1) FIXME(ddraw,"urks, wants to have more than one backbuffer (%ld)!\n",lpddsd->dwBackBufferCount); - (*lpdsf)->s.backbuffer = back = - (LPDIRECTDRAWSURFACE4)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface4)); + (*ilpdsf)->s.backbuffer = back = + (IDirectDrawSurface4Impl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface4Impl)); TRACE(ddraw,"allocated back-buffer (%p)\n", back); - this->lpvtbl->fnAddRef(this); - back->s.ddraw = this; + IDirectDraw2_AddRef(iface); + back->s.ddraw = This; back->ref = 1; - back->lpvtbl = (LPDIRECTDRAWSURFACE4_VTABLE)&xlib_dds4vt; + back->lpvtbl = (ICOM_VTABLE(IDirectDrawSurface4)*)&xlib_dds4vt; /* Copy the surface description from the front buffer */ - back->s.surface_desc = (*lpdsf)->s.surface_desc; + back->s.surface_desc = (*ilpdsf)->s.surface_desc; /* Create the XImage */ - img = create_ximage(this, back); + img = create_ximage(This, back); if (img == NULL) return DDERR_OUTOFMEMORY; back->t.xlib.image = img; @@ -2612,7 +2709,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface( * one! */ /* Add relevant info to front and back buffers */ - (*lpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_FRONTBUFFER; + (*ilpdsf)->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_FRONTBUFFER; back->s.surface_desc.ddsCaps.dwCaps |= DDSCAPS_BACKBUFFER; back->s.surface_desc.dwFlags &= ~DDSD_BACKBUFFERCOUNT; back->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_VISIBLE; @@ -2621,16 +2718,17 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface( } else { /* There is no Xlib-specific code here... Go to the common surface creation function */ - return common_off_screen_CreateSurface(this, lpddsd, *lpdsf); + return common_off_screen_CreateSurface(This, lpddsd, *ilpdsf); } return DD_OK; } -static HRESULT WINAPI IDirectDraw2_DuplicateSurface( - LPDIRECTDRAW2 this,LPDIRECTDRAWSURFACE src,LPDIRECTDRAWSURFACE *dst +static HRESULT WINAPI IDirectDraw2Impl_DuplicateSurface( + LPDIRECTDRAW2 iface,LPDIRECTDRAWSURFACE src,LPDIRECTDRAWSURFACE *dst ) { - FIXME(ddraw,"(%p)->(%p,%p) simply copies\n",this,src,dst); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(%p,%p) simply copies\n",This,src,dst); *dst = src; /* FIXME */ return DD_OK; } @@ -2639,9 +2737,10 @@ static HRESULT WINAPI IDirectDraw2_DuplicateSurface( * The Xlib Implementation tries to use the passed hwnd as drawing window, * even when the approbiate bitmasks are not specified. */ -static HRESULT WINAPI IDirectDraw2_SetCooperativeLevel( - LPDIRECTDRAW2 this,HWND hwnd,DWORD cooplevel +static HRESULT WINAPI IDirectDraw2Impl_SetCooperativeLevel( + LPDIRECTDRAW2 iface,HWND hwnd,DWORD cooplevel ) { + ICOM_THIS(IDirectDraw2Impl,iface); int i; const struct { int mask; @@ -2658,7 +2757,7 @@ static HRESULT WINAPI IDirectDraw2_SetCooperativeLevel( FE(DDSCL_CREATEDEVICEWINDOW) }; - FIXME(ddraw,"(%p)->(%08lx,%08lx)\n",this,(DWORD)hwnd,cooplevel); + FIXME(ddraw,"(%p)->(%08lx,%08lx)\n",This,(DWORD)hwnd,cooplevel); if(TRACE_ON(ddraw)){ dbg_decl_str(ddraw, 512); for (i=0;id.mainWindow = hwnd; + This->d.mainWindow = hwnd; /* This will be overwritten in the case of Full Screen mode. Windowed games could work with that :-) */ if (hwnd) { WND *tmpWnd = WIN_FindWndPtr(hwnd); - this->d.drawable = X11DRV_WND_GetXWindow(tmpWnd); + This->d.drawable = X11DRV_WND_GetXWindow(tmpWnd); WIN_ReleaseWndPtr(tmpWnd); } @@ -2683,45 +2782,45 @@ static HRESULT WINAPI IDirectDraw2_SetCooperativeLevel( /* Small helper to either use the cooperative window or create a new * one (for mouse and keyboard input) and drawing in the Xlib implementation. */ -static void _common_IDirectDraw_SetDisplayMode(LPDIRECTDRAW this) { +static void _common_IDirectDrawImpl_SetDisplayMode(IDirectDrawImpl* This) { RECT rect; /* Do not destroy the application supplied cooperative window */ - if (this->d.window && this->d.window != this->d.mainWindow) { - DestroyWindow(this->d.window); - this->d.window = 0; + if (This->d.window && This->d.window != This->d.mainWindow) { + DestroyWindow(This->d.window); + This->d.window = 0; } /* Sanity check cooperative window before assigning it to drawing. */ - if ( IsWindow(this->d.mainWindow) && - IsWindowVisible(this->d.mainWindow) + if ( IsWindow(This->d.mainWindow) && + IsWindowVisible(This->d.mainWindow) ) { - GetWindowRect(this->d.mainWindow,&rect); - if (((rect.right-rect.left) >= this->d.width) && - ((rect.bottom-rect.top) >= this->d.height) + GetWindowRect(This->d.mainWindow,&rect); + if (((rect.right-rect.left) >= This->d.width) && + ((rect.bottom-rect.top) >= This->d.height) ) - this->d.window = this->d.mainWindow; + This->d.window = This->d.mainWindow; } /* ... failed, create new one. */ - if (!this->d.window) { - this->d.window = CreateWindowExA( + if (!This->d.window) { + This->d.window = CreateWindowExA( 0, "WINE_DirectDraw", "WINE_DirectDraw", WS_VISIBLE|WS_SYSMENU|WS_THICKFRAME, 0,0, - this->d.width, - this->d.height, + This->d.width, + This->d.height, 0, 0, 0, NULL ); /*Store THIS with the window. We'll use it in the window procedure*/ - SetWindowLongA(this->d.window,ddrawXlibThisOffset,(LONG)this); - ShowWindow(this->d.window,TRUE); - UpdateWindow(this->d.window); + SetWindowLongA(This->d.window,ddrawXlibThisOffset,(LONG)This); + ShowWindow(This->d.window,TRUE); + UpdateWindow(This->d.window); } - SetFocus(this->d.window); + SetFocus(This->d.window); } static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat, DDPIXELFORMAT *screen_pixelformat, int *pix_depth) { @@ -2819,32 +2918,33 @@ static int _common_depth_to_pixelformat(DWORD depth, DDPIXELFORMAT *pixelformat, return match; } -static HRESULT WINAPI DGA_IDirectDraw_SetDisplayMode( - LPDIRECTDRAW this,DWORD width,DWORD height,DWORD depth +static HRESULT WINAPI DGA_IDirectDrawImpl_SetDisplayMode( + LPDIRECTDRAW iface,DWORD width,DWORD height,DWORD depth ) { #ifdef HAVE_LIBXXF86DGA + ICOM_THIS(IDirectDrawImpl,iface); int i,mode_count; - TRACE(ddraw, "(%p)->(%ld,%ld,%ld)\n", this, width, height, depth); + TRACE(ddraw, "(%p)->(%ld,%ld,%ld)\n", This, width, height, depth); /* We hope getting the asked for depth */ - if (_common_depth_to_pixelformat(depth, &(this->d.directdraw_pixelformat), &(this->d.screen_pixelformat), NULL) != 1) { + if (_common_depth_to_pixelformat(depth, &(This->d.directdraw_pixelformat), &(This->d.screen_pixelformat), NULL) != 1) { /* I.e. no visual found or emulated */ ERR(ddraw,"(w=%ld,h=%ld,d=%ld), unsupported depth!\n",width,height,depth); return DDERR_UNSUPPORTEDMODE; } - if (this->d.width < width) { - ERR(ddraw,"SetDisplayMode(w=%ld,h=%ld,d=%ld), width %ld exceeds framebuffer width %ld\n",width,height,depth,width,this->d.width); + if (This->d.width < width) { + ERR(ddraw,"SetDisplayMode(w=%ld,h=%ld,d=%ld), width %ld exceeds framebuffer width %ld\n",width,height,depth,width,This->d.width); return DDERR_UNSUPPORTEDMODE; } - this->d.width = width; - this->d.height = height; + This->d.width = width; + This->d.height = height; /* adjust fb_height, so we don't overlap */ - if (this->e.dga.fb_height < height) - this->e.dga.fb_height = height; - _common_IDirectDraw_SetDisplayMode(this); + if (This->e.dga.fb_height < height) + This->e.dga.fb_height = height; + _common_IDirectDrawImpl_SetDisplayMode(This); #ifdef HAVE_LIBXXF86VM { @@ -2900,7 +3000,7 @@ static HRESULT WINAPI DGA_IDirectDraw_SetDisplayMode( */ TSXF86DGADirectVideo(display,DefaultScreen(display),XF86DGADirectGraphics); #ifdef DIABLO_HACK - TSXF86DGASetViewPort(display,DefaultScreen(display),0,this->e.dga.fb_height); + TSXF86DGASetViewPort(display,DefaultScreen(display),0,This->e.dga.fb_height); #else TSXF86DGASetViewPort(display,DefaultScreen(display),0,0); #endif @@ -2917,7 +3017,7 @@ static HRESULT WINAPI DGA_IDirectDraw_SetDisplayMode( /* ************************************* 16 / 15 bpp to palettized 8 bpp ************************************* */ -static void pixel_convert_16_to_8(void *src, void *dst, DWORD width, DWORD height, LONG pitch, LPDIRECTDRAWPALETTE palette) { +static void pixel_convert_16_to_8(void *src, void *dst, DWORD width, DWORD height, LONG pitch, IDirectDrawPaletteImpl* palette) { unsigned char *c_src = (unsigned char *) src; unsigned short *c_dst = (unsigned short *) dst; int x, y; @@ -2957,7 +3057,7 @@ static void palette_convert_15_to_8(LPPALETTEENTRY palent, void *screen_palette, /* ************************************* 24 / 32 bpp to palettized 8 bpp ************************************* */ -static void pixel_convert_32_to_8(void *src, void *dst, DWORD width, DWORD height, LONG pitch, LPDIRECTDRAWPALETTE palette) { +static void pixel_convert_32_to_8(void *src, void *dst, DWORD width, DWORD height, LONG pitch, IDirectDrawPaletteImpl* palette) { unsigned char *c_src = (unsigned char *) src; unsigned int *c_dst = (unsigned int *) dst; int x, y; @@ -2985,19 +3085,20 @@ static void palette_convert_24_to_8(LPPALETTEENTRY palent, void *screen_palette, ((unsigned int) palent[i].peBlue)); } -static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode( - LPDIRECTDRAW this,DWORD width,DWORD height,DWORD depth +static HRESULT WINAPI Xlib_IDirectDrawImpl_SetDisplayMode( + LPDIRECTDRAW iface,DWORD width,DWORD height,DWORD depth ) { + ICOM_THIS(IDirectDrawImpl,iface); char buf[200]; WND *tmpWnd; TRACE(ddraw, "(%p)->SetDisplayMode(%ld,%ld,%ld)\n", - this, width, height, depth); + This, width, height, depth); switch (_common_depth_to_pixelformat(depth, - &(this->d.directdraw_pixelformat), - &(this->d.screen_pixelformat), - &(this->d.pixmap_depth))) { + &(This->d.directdraw_pixelformat), + &(This->d.screen_pixelformat), + &(This->d.pixmap_depth))) { case 0: sprintf(buf,"SetDisplayMode(w=%ld,h=%ld,d=%ld), unsupported depth!",width,height,depth); MessageBoxA(0,buf,"WINE DirectDraw",MB_OK|MB_ICONSTOP); @@ -3005,8 +3106,8 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode( case 1: /* No convertion */ - this->d.pixel_convert = NULL; - this->d.palette_convert = NULL; + This->d.pixel_convert = NULL; + This->d.palette_convert = NULL; break; case 2: { @@ -3015,24 +3116,24 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode( WARN(ddraw, "Warning : running in depth-convertion mode. Should run using a %ld depth for optimal performances.\n", depth); /* Set the depth convertion routines */ - switch (this->d.screen_pixelformat.x.dwRGBBitCount) { + switch (This->d.screen_pixelformat.x.dwRGBBitCount) { case 16: - if ((this->d.screen_pixelformat.y.dwRBitMask == 0xF800) && - (this->d.screen_pixelformat.z.dwGBitMask == 0x07E0) && - (this->d.screen_pixelformat.xx.dwBBitMask == 0x001F)) { + if ((This->d.screen_pixelformat.y.dwRBitMask == 0xF800) && + (This->d.screen_pixelformat.z.dwGBitMask == 0x07E0) && + (This->d.screen_pixelformat.xx.dwBBitMask == 0x001F)) { /* 16 bpp */ found = 1; - this->d.pixel_convert = pixel_convert_16_to_8; - this->d.palette_convert = palette_convert_16_to_8; - } else if ((this->d.screen_pixelformat.y.dwRBitMask == 0x7C00) && - (this->d.screen_pixelformat.z.dwGBitMask == 0x03E0) && - (this->d.screen_pixelformat.xx.dwBBitMask == 0x001F)) { + This->d.pixel_convert = pixel_convert_16_to_8; + This->d.palette_convert = palette_convert_16_to_8; + } else if ((This->d.screen_pixelformat.y.dwRBitMask == 0x7C00) && + (This->d.screen_pixelformat.z.dwGBitMask == 0x03E0) && + (This->d.screen_pixelformat.xx.dwBBitMask == 0x001F)) { /* 15 bpp */ found = 1; - this->d.pixel_convert = pixel_convert_16_to_8; - this->d.palette_convert = palette_convert_15_to_8; + This->d.pixel_convert = pixel_convert_16_to_8; + This->d.palette_convert = palette_convert_15_to_8; } break; @@ -3042,14 +3143,14 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode( break; case 32: - if ((this->d.screen_pixelformat.y.dwRBitMask == 0xFF0000) && - (this->d.screen_pixelformat.z.dwGBitMask == 0x00FF00) && - (this->d.screen_pixelformat.xx.dwBBitMask == 0x0000FF)) { + if ((This->d.screen_pixelformat.y.dwRBitMask == 0xFF0000) && + (This->d.screen_pixelformat.z.dwGBitMask == 0x00FF00) && + (This->d.screen_pixelformat.xx.dwBBitMask == 0x0000FF)) { /* 24 bpp */ found = 1; - this->d.pixel_convert = pixel_convert_32_to_8; - this->d.palette_convert = palette_convert_24_to_8; + This->d.pixel_convert = pixel_convert_32_to_8; + This->d.palette_convert = palette_convert_24_to_8; } break; } @@ -3062,35 +3163,36 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode( } break; } - this->d.width = width; - this->d.height = height; + This->d.width = width; + This->d.height = height; - _common_IDirectDraw_SetDisplayMode(this); + _common_IDirectDrawImpl_SetDisplayMode(This); - tmpWnd = WIN_FindWndPtr(this->d.window); - this->d.paintable = 1; - this->d.drawable = ((X11DRV_WND_DATA *) tmpWnd->pDriverData)->window; + tmpWnd = WIN_FindWndPtr(This->d.window); + This->d.paintable = 1; + This->d.drawable = ((X11DRV_WND_DATA *) tmpWnd->pDriverData)->window; /* We don't have a context for this window. Host off the desktop */ - if( !this->d.drawable ) + if( !This->d.drawable ) { - this->d.drawable = ((X11DRV_WND_DATA *) WIN_GetDesktop()->pDriverData)->window; + This->d.drawable = ((X11DRV_WND_DATA *) WIN_GetDesktop()->pDriverData)->window; WIN_ReleaseDesktop(); } WIN_ReleaseWndPtr(tmpWnd); return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_GetCaps( - LPDIRECTDRAW2 this,LPDDCAPS caps1,LPDDCAPS caps2 +static HRESULT WINAPI DGA_IDirectDraw2Impl_GetCaps( + LPDIRECTDRAW2 iface,LPDDCAPS caps1,LPDDCAPS caps2 ) { #ifdef HAVE_LIBXXF86DGA - TRACE(ddraw,"(%p)->GetCaps(%p,%p)\n",this,caps1,caps2); - caps1->dwVidMemTotal = this->e.dga.fb_memsize; + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->GetCaps(%p,%p)\n",This,caps1,caps2); + caps1->dwVidMemTotal = This->e.dga.fb_memsize; caps1->dwCaps = 0xffffffff&~(DDCAPS_BANKSWITCHED); /* we can do anything */ caps1->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */ if (caps2) { - caps2->dwVidMemTotal = this->e.dga.fb_memsize; + caps2->dwVidMemTotal = This->e.dga.fb_memsize; caps2->dwCaps = 0xffffffff&~(DDCAPS_BANKSWITCHED); /* we can do anything */ caps2->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */ } @@ -3134,10 +3236,11 @@ static void fill_caps(LPDDCAPS caps) { #endif } -static HRESULT WINAPI Xlib_IDirectDraw2_GetCaps( - LPDIRECTDRAW2 this,LPDDCAPS caps1,LPDDCAPS caps2 +static HRESULT WINAPI Xlib_IDirectDraw2Impl_GetCaps( + LPDIRECTDRAW2 iface,LPDDCAPS caps1,LPDDCAPS caps2 ) { - TRACE(ddraw,"(%p)->GetCaps(%p,%p)\n",this,caps1,caps2); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->GetCaps(%p,%p)\n",This,caps1,caps2); /* Put the same caps for the two capabilities */ fill_caps(caps1); @@ -3146,30 +3249,32 @@ static HRESULT WINAPI Xlib_IDirectDraw2_GetCaps( return DD_OK; } -static HRESULT WINAPI IDirectDraw2_CreateClipper( - LPDIRECTDRAW2 this,DWORD x,LPDIRECTDRAWCLIPPER *lpddclip,LPUNKNOWN lpunk +static HRESULT WINAPI IDirectDraw2Impl_CreateClipper( + LPDIRECTDRAW2 iface,DWORD x,LPDIRECTDRAWCLIPPER *lpddclip,LPUNKNOWN lpunk ) { + ICOM_THIS(IDirectDraw2Impl,iface); + IDirectDrawClipperImpl** ilpddclip=(IDirectDrawClipperImpl**)lpddclip; FIXME(ddraw,"(%p)->(%08lx,%p,%p),stub!\n", - this,x,lpddclip,lpunk + This,x,ilpddclip,lpunk ); - *lpddclip = (LPDIRECTDRAWCLIPPER)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawClipper)); - (*lpddclip)->ref = 1; - (*lpddclip)->lpvtbl = &ddclipvt; + *ilpddclip = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawClipperImpl)); + (*ilpddclip)->ref = 1; + (*ilpddclip)->lpvtbl = &ddclipvt; return DD_OK; } -static HRESULT WINAPI common_IDirectDraw2_CreatePalette( - LPDIRECTDRAW2 this,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk,int *psize +static HRESULT WINAPI common_IDirectDraw2Impl_CreatePalette( + IDirectDraw2Impl* This,DWORD dwFlags,LPPALETTEENTRY palent,IDirectDrawPaletteImpl **lpddpal,LPUNKNOWN lpunk,int *psize ) { int size = 0; if (TRACE_ON(ddraw)) _dump_paletteformat(dwFlags); - *lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette)); + *lpddpal = (IDirectDrawPaletteImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPaletteImpl)); if (*lpddpal == NULL) return E_OUTOFMEMORY; (*lpddpal)->ref = 1; - (*lpddpal)->ddraw = (LPDIRECTDRAW)this; + (*lpddpal)->ddraw = (IDirectDrawImpl*)This; (*lpddpal)->installed = 0; if (dwFlags & DDPCAPS_1BIT) @@ -3187,11 +3292,11 @@ static HRESULT WINAPI common_IDirectDraw2_CreatePalette( if (palent) { /* Now, if we are in 'depth conversion mode', create the screen palette */ - if (this->d.palette_convert != NULL) - this->d.palette_convert(palent, (*lpddpal)->screen_palents, 0, size); + if (This->d.palette_convert != NULL) + This->d.palette_convert(palent, (*lpddpal)->screen_palents, 0, size); memcpy((*lpddpal)->palents, palent, size * sizeof(PALETTEENTRY)); - } else if (this->d.palette_convert != NULL) { + } else if (This->d.palette_convert != NULL) { /* In that case, put all 0xFF */ memset((*lpddpal)->screen_palents, 0xFF, 256 * sizeof(int)); } @@ -3199,53 +3304,58 @@ static HRESULT WINAPI common_IDirectDraw2_CreatePalette( return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_CreatePalette( - LPDIRECTDRAW2 this,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk +static HRESULT WINAPI DGA_IDirectDraw2Impl_CreatePalette( + LPDIRECTDRAW2 iface,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk ) { + ICOM_THIS(IDirectDraw2Impl,iface); + IDirectDrawPaletteImpl** ilpddpal=(IDirectDrawPaletteImpl**)lpddpal; HRESULT res; int xsize = 0,i; - TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",this,dwFlags,palent,lpddpal,lpunk); - res = common_IDirectDraw2_CreatePalette(this,dwFlags,palent,lpddpal,lpunk,&xsize); + TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",This,dwFlags,palent,ilpddpal,lpunk); + res = common_IDirectDraw2Impl_CreatePalette(This,dwFlags,palent,ilpddpal,lpunk,&xsize); if (res != 0) return res; - (*lpddpal)->lpvtbl = &dga_ddpalvt; - if (this->d.directdraw_pixelformat.x.dwRGBBitCount<=8) { - (*lpddpal)->cm = TSXCreateColormap(display,DefaultRootWindow(display),DefaultVisualOfScreen(X11DRV_GetXScreen()),AllocAll); + (*ilpddpal)->lpvtbl = &dga_ddpalvt; + if (This->d.directdraw_pixelformat.x.dwRGBBitCount<=8) { + (*ilpddpal)->cm = TSXCreateColormap(display,DefaultRootWindow(display),DefaultVisualOfScreen(X11DRV_GetXScreen()),AllocAll); } else { FIXME(ddraw,"why are we doing CreatePalette in hi/truecolor?\n"); - (*lpddpal)->cm = 0; + (*ilpddpal)->cm = 0; } - if (((*lpddpal)->cm)&&xsize) { + if (((*ilpddpal)->cm)&&xsize) { for (i=0;ipalents[i].peRed<<8; - xc.blue = (*lpddpal)->palents[i].peBlue<<8; - xc.green = (*lpddpal)->palents[i].peGreen<<8; + xc.red = (*ilpddpal)->palents[i].peRed<<8; + xc.blue = (*ilpddpal)->palents[i].peBlue<<8; + xc.green = (*ilpddpal)->palents[i].peGreen<<8; xc.flags = DoRed|DoBlue|DoGreen; xc.pixel = i; - TSXStoreColor(display,(*lpddpal)->cm,&xc); + TSXStoreColor(display,(*ilpddpal)->cm,&xc); } } return DD_OK; } -static HRESULT WINAPI Xlib_IDirectDraw2_CreatePalette( - LPDIRECTDRAW2 this,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk +static HRESULT WINAPI Xlib_IDirectDraw2Impl_CreatePalette( + LPDIRECTDRAW2 iface,DWORD dwFlags,LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE *lpddpal,LPUNKNOWN lpunk ) { + ICOM_THIS(IDirectDraw2Impl,iface); + IDirectDrawPaletteImpl** ilpddpal=(IDirectDrawPaletteImpl**)lpddpal; int xsize; HRESULT res; - TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",this,dwFlags,palent,lpddpal,lpunk); - res = common_IDirectDraw2_CreatePalette(this,dwFlags,palent,lpddpal,lpunk,&xsize); + TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",This,dwFlags,palent,ilpddpal,lpunk); + res = common_IDirectDraw2Impl_CreatePalette(This,dwFlags,palent,ilpddpal,lpunk,&xsize); if (res != 0) return res; - (*lpddpal)->lpvtbl = &xlib_ddpalvt; + (*ilpddpal)->lpvtbl = &xlib_ddpalvt; return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) { +static HRESULT WINAPI DGA_IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 iface) { #ifdef HAVE_LIBXXF86DGA - TRACE(ddraw, "(%p)->()\n",this); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw, "(%p)->()\n",This); Sleep(1000); TSXF86DGADirectVideo(display,DefaultScreen(display),0); #ifdef RESTORE_SIGNALS @@ -3257,33 +3367,37 @@ static HRESULT WINAPI DGA_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) { #endif } -static HRESULT WINAPI Xlib_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) { - TRACE(ddraw, "(%p)->RestoreDisplayMode()\n", this); +static HRESULT WINAPI Xlib_IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 iface) { + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw, "(%p)->RestoreDisplayMode()\n", This); Sleep(1000); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_WaitForVerticalBlank( - LPDIRECTDRAW2 this,DWORD x,HANDLE h +static HRESULT WINAPI IDirectDraw2Impl_WaitForVerticalBlank( + LPDIRECTDRAW2 iface,DWORD x,HANDLE h ) { - TRACE(ddraw,"(%p)->(0x%08lx,0x%08x)\n",this,x,h); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->(0x%08lx,0x%08x)\n",This,x,h); return DD_OK; } -static ULONG WINAPI IDirectDraw2_AddRef(LPDIRECTDRAW2 this) { - TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface) { + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE( ddraw, "(%p)->() incrementing from %lu.\n", This, This->ref ); - return ++(this->ref); + return ++(This->ref); } -static ULONG WINAPI DGA_IDirectDraw2_Release(LPDIRECTDRAW2 this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI DGA_IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface) { + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); #ifdef HAVE_LIBXXF86DGA - if (!--(this->ref)) { + if (!--(This->ref)) { TSXF86DGADirectVideo(display,DefaultScreen(display),0); - if (this->d.window && (this->d.mainWindow != this->d.window)) - DestroyWindow(this->d.window); + if (This->d.window && (This->d.mainWindow != This->d.window)) + DestroyWindow(This->d.window); #ifdef HAVE_LIBXXF86VM if (orig_mode) { TSXF86VidModeSwitchToMode( @@ -3300,75 +3414,77 @@ static ULONG WINAPI DGA_IDirectDraw2_Release(LPDIRECTDRAW2 this) { #ifdef RESTORE_SIGNALS SIGNAL_InitHandlers(); #endif - HeapFree(GetProcessHeap(),0,this); + HeapFree(GetProcessHeap(),0,This); return 0; } #endif /* defined(HAVE_LIBXXF86DGA) */ - return this->ref; + return This->ref; } -static ULONG WINAPI Xlib_IDirectDraw2_Release(LPDIRECTDRAW2 this) { - TRACE( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref ); +static ULONG WINAPI Xlib_IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface) { + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE( ddraw, "(%p)->() decrementing from %lu.\n", This, This->ref ); - if (!--(this->ref)) { - if (this->d.window && (this->d.mainWindow != this->d.window)) - DestroyWindow(this->d.window); - HeapFree(GetProcessHeap(),0,this); + if (!--(This->ref)) { + if (This->d.window && (This->d.mainWindow != This->d.window)) + DestroyWindow(This->d.window); + HeapFree(GetProcessHeap(),0,This); return 0; } /* FIXME: destroy window ... */ - return this->ref; + return This->ref; } -static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface( - LPDIRECTDRAW2 this,REFIID refiid,LPVOID *obj +static HRESULT WINAPI DGA_IDirectDraw2Impl_QueryInterface( + LPDIRECTDRAW2 iface,REFIID refiid,LPVOID *obj ) { + ICOM_THIS(IDirectDraw2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - TRACE(ddraw,"(%p)->(%s,%p)\n",this,xrefiid,obj); + TRACE(ddraw,"(%p)->(%s,%p)\n",This,xrefiid,obj); if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) { - *obj = this; - this->lpvtbl->fnAddRef(this); + *obj = This; + IDirectDraw2_AddRef(iface); TRACE(ddraw, " Creating IUnknown interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw,refiid,sizeof(IID_IDirectDraw))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&dga_ddvt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&dga_ddvt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw2,refiid,sizeof(IID_IDirectDraw2))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&dga_dd2vt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&dga_dd2vt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw2 interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw4,refiid,sizeof(IID_IDirectDraw4))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&dga_dd4vt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&dga_dd4vt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw4 interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) { - LPDIRECT3D d3d; + IDirect3DImpl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + d3d->ddraw = (IDirectDrawImpl*)This; + IDirectDraw2_AddRef(iface); d3d->lpvtbl = &d3dvt; *obj = d3d; @@ -3377,12 +3493,12 @@ static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface( return S_OK; } if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D2))) { - LPDIRECT3D2 d3d; + IDirect3D2Impl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + d3d->ddraw = (IDirectDrawImpl*)This; + IDirectDraw2_AddRef(iface); d3d->lpvtbl = &d3d2vt; *obj = d3d; @@ -3390,59 +3506,60 @@ static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface( return S_OK; } - WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",this,xrefiid); + WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",This,xrefiid); return OLE_E_ENUM_NOMORE; } -static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface( - LPDIRECTDRAW2 this,REFIID refiid,LPVOID *obj +static HRESULT WINAPI Xlib_IDirectDraw2Impl_QueryInterface( + LPDIRECTDRAW2 iface,REFIID refiid,LPVOID *obj ) { + ICOM_THIS(IDirectDraw2Impl,iface); char xrefiid[50]; WINE_StringFromCLSID((LPCLSID)refiid,xrefiid); - TRACE(ddraw,"(%p)->(%s,%p)\n",this,xrefiid,obj); + TRACE(ddraw,"(%p)->(%s,%p)\n",This,xrefiid,obj); if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) { - *obj = this; - this->lpvtbl->fnAddRef(this); + *obj = This; + IDirectDraw2_AddRef(iface); TRACE(ddraw, " Creating IUnknown interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw,refiid,sizeof(IID_IDirectDraw))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&xlib_ddvt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&xlib_ddvt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw2,refiid,sizeof(IID_IDirectDraw2))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&xlib_dd2vt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&xlib_dd2vt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw2 interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirectDraw4,refiid,sizeof(IID_IDirectDraw4))) { - this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&xlib_dd4vt; - this->lpvtbl->fnAddRef(this); - *obj = this; + This->lpvtbl = (ICOM_VTABLE(IDirectDraw2)*)&xlib_dd4vt; + IDirectDraw2_AddRef(iface); + *obj = This; TRACE(ddraw, " Creating IDirectDraw4 interface (%p)\n", *obj); return S_OK; } if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) { - LPDIRECT3D d3d; + IDirect3DImpl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + d3d->ddraw = (IDirectDrawImpl*)This; + IDirectDraw2_AddRef(iface); d3d->lpvtbl = &d3dvt; *obj = d3d; @@ -3451,12 +3568,12 @@ static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface( return S_OK; } if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D))) { - LPDIRECT3D2 d3d; + IDirect3D2Impl* d3d; d3d = HeapAlloc(GetProcessHeap(),0,sizeof(*d3d)); d3d->ref = 1; - d3d->ddraw = (LPDIRECTDRAW)this; - this->lpvtbl->fnAddRef(this); + d3d->ddraw = (IDirectDrawImpl*)This; + IDirectDraw2_AddRef(iface); d3d->lpvtbl = &d3d2vt; *obj = d3d; @@ -3464,21 +3581,23 @@ static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface( return S_OK; } - WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",this,xrefiid); + WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",This,xrefiid); return OLE_E_ENUM_NOMORE; } -static HRESULT WINAPI IDirectDraw2_GetVerticalBlankStatus( - LPDIRECTDRAW2 this,BOOL *status +static HRESULT WINAPI IDirectDraw2Impl_GetVerticalBlankStatus( + LPDIRECTDRAW2 iface,BOOL *status ) { - TRACE(ddraw,"(%p)->(%p)\n",this,status); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->(%p)\n",This,status); *status = TRUE; return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_EnumDisplayModes( - LPDIRECTDRAW2 this,DWORD dwFlags,LPDDSURFACEDESC lpddsfd,LPVOID context,LPDDENUMMODESCALLBACK modescb +static HRESULT WINAPI DGA_IDirectDraw2Impl_EnumDisplayModes( + LPDIRECTDRAW2 iface,DWORD dwFlags,LPDDSURFACEDESC lpddsfd,LPVOID context,LPDDENUMMODESCALLBACK modescb ) { + ICOM_THIS(IDirectDraw2Impl,iface); DDSURFACEDESC ddsfd; static struct { int w,h; @@ -3492,7 +3611,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_EnumDisplayModes( static int depths[4] = {8,16,24,32}; int i,j; - TRACE(ddraw,"(%p)->(0x%08lx,%p,%p,%p)\n",this,dwFlags,lpddsfd,context,modescb); + TRACE(ddraw,"(%p)->(0x%08lx,%p,%p,%p)\n",This,dwFlags,lpddsfd,context,modescb); ddsfd.dwSize = sizeof(ddsfd); ddsfd.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_BACKBUFFERCOUNT|DDSD_PIXELFORMAT|DDSD_CAPS; if (dwFlags & DDEDM_REFRESHRATES) { @@ -3560,9 +3679,10 @@ static HRESULT WINAPI DGA_IDirectDraw2_EnumDisplayModes( return DD_OK; } -static HRESULT WINAPI Xlib_IDirectDraw2_EnumDisplayModes( - LPDIRECTDRAW2 this,DWORD dwFlags,LPDDSURFACEDESC lpddsfd,LPVOID context,LPDDENUMMODESCALLBACK modescb +static HRESULT WINAPI Xlib_IDirectDraw2Impl_EnumDisplayModes( + LPDIRECTDRAW2 iface,DWORD dwFlags,LPDDSURFACEDESC lpddsfd,LPVOID context,LPDDENUMMODESCALLBACK modescb ) { + ICOM_THIS(IDirectDraw2Impl,iface); XVisualInfo *vi; XPixmapFormatValues *pf; XVisualInfo vt; @@ -3582,7 +3702,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_EnumDisplayModes( }; DWORD maxWidth, maxHeight; - TRACE(ddraw,"(%p)->(0x%08lx,%p,%p,%p)\n",this,dwFlags,lpddsfd,context,modescb); + TRACE(ddraw,"(%p)->(0x%08lx,%p,%p,%p)\n",This,dwFlags,lpddsfd,context,modescb); ddsfd.dwSize = sizeof(ddsfd); ddsfd.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_CAPS; if (dwFlags & DDEDM_REFRESHRATES) { @@ -3686,93 +3806,103 @@ static HRESULT WINAPI Xlib_IDirectDraw2_EnumDisplayModes( return DD_OK; } -static HRESULT WINAPI DGA_IDirectDraw2_GetDisplayMode( - LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsfd +static HRESULT WINAPI DGA_IDirectDraw2Impl_GetDisplayMode( + LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsfd ) { #ifdef HAVE_LIBXXF86DGA - TRACE(ddraw,"(%p)->(%p)\n",this,lpddsfd); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->(%p)\n",This,lpddsfd); lpddsfd->dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH|DDSD_BACKBUFFERCOUNT|DDSD_PIXELFORMAT|DDSD_CAPS; lpddsfd->dwHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); lpddsfd->dwWidth = MONITOR_GetWidth(&MONITOR_PrimaryMonitor); - lpddsfd->lPitch = this->e.dga.fb_width*this->d.directdraw_pixelformat.x.dwRGBBitCount/8; + lpddsfd->lPitch = This->e.dga.fb_width*This->d.directdraw_pixelformat.x.dwRGBBitCount/8; lpddsfd->dwBackBufferCount = 1; lpddsfd->x.dwRefreshRate = 60; lpddsfd->ddsCaps.dwCaps = DDSCAPS_PALETTE; - lpddsfd->ddpfPixelFormat = this->d.directdraw_pixelformat; + lpddsfd->ddpfPixelFormat = This->d.directdraw_pixelformat; return DD_OK; #else /* defined(HAVE_LIBXXF86DGA) */ return E_UNEXPECTED; #endif /* defined(HAVE_LIBXXF86DGA) */ } -static HRESULT WINAPI Xlib_IDirectDraw2_GetDisplayMode( - LPDIRECTDRAW2 this,LPDDSURFACEDESC lpddsfd +static HRESULT WINAPI Xlib_IDirectDraw2Impl_GetDisplayMode( + LPDIRECTDRAW2 iface,LPDDSURFACEDESC lpddsfd ) { - TRACE(ddraw,"(%p)->GetDisplayMode(%p)\n",this,lpddsfd); + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->GetDisplayMode(%p)\n",This,lpddsfd); lpddsfd->dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PITCH|DDSD_BACKBUFFERCOUNT|DDSD_PIXELFORMAT|DDSD_CAPS; lpddsfd->dwHeight = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); lpddsfd->dwWidth = MONITOR_GetWidth(&MONITOR_PrimaryMonitor); - lpddsfd->lPitch = lpddsfd->dwWidth * this->d.directdraw_pixelformat.x.dwRGBBitCount/8; + lpddsfd->lPitch = lpddsfd->dwWidth * This->d.directdraw_pixelformat.x.dwRGBBitCount/8; lpddsfd->dwBackBufferCount = 1; lpddsfd->x.dwRefreshRate = 60; lpddsfd->ddsCaps.dwCaps = DDSCAPS_PALETTE; - lpddsfd->ddpfPixelFormat = this->d.directdraw_pixelformat; + lpddsfd->ddpfPixelFormat = This->d.directdraw_pixelformat; return DD_OK; } -static HRESULT WINAPI IDirectDraw2_FlipToGDISurface(LPDIRECTDRAW2 this) { - TRACE(ddraw,"(%p)->()\n",this); +static HRESULT WINAPI IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 iface) { + ICOM_THIS(IDirectDraw2Impl,iface); + TRACE(ddraw,"(%p)->()\n",This); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_GetMonitorFrequency( - LPDIRECTDRAW2 this,LPDWORD freq +static HRESULT WINAPI IDirectDraw2Impl_GetMonitorFrequency( + LPDIRECTDRAW2 iface,LPDWORD freq ) { - FIXME(ddraw,"(%p)->(%p) returns 60 Hz always\n",this,freq); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(%p) returns 60 Hz always\n",This,freq); *freq = 60*100; /* 60 Hz */ return DD_OK; } /* what can we directly decompress? */ -static HRESULT WINAPI IDirectDraw2_GetFourCCCodes( - LPDIRECTDRAW2 this,LPDWORD x,LPDWORD y +static HRESULT WINAPI IDirectDraw2Impl_GetFourCCCodes( + LPDIRECTDRAW2 iface,LPDWORD x,LPDWORD y ) { - FIXME(ddraw,"(%p,%p,%p), stub\n",this,x,y); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p,%p,%p), stub\n",This,x,y); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_EnumSurfaces( - LPDIRECTDRAW2 this,DWORD x,LPDDSURFACEDESC ddsfd,LPVOID context,LPDDENUMSURFACESCALLBACK ddsfcb +static HRESULT WINAPI IDirectDraw2Impl_EnumSurfaces( + LPDIRECTDRAW2 iface,DWORD x,LPDDSURFACEDESC ddsfd,LPVOID context,LPDDENUMSURFACESCALLBACK ddsfcb ) { - FIXME(ddraw,"(%p)->(0x%08lx,%p,%p,%p),stub!\n",this,x,ddsfd,context,ddsfcb); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(0x%08lx,%p,%p,%p),stub!\n",This,x,ddsfd,context,ddsfcb); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_Compact( - LPDIRECTDRAW2 this ) +static HRESULT WINAPI IDirectDraw2Impl_Compact( + LPDIRECTDRAW2 iface ) { - FIXME(ddraw,"(%p)->()\n", this ); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->()\n", This ); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_GetGDISurface(LPDIRECTDRAW2 this, +static HRESULT WINAPI IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 iface, LPDIRECTDRAWSURFACE *lplpGDIDDSSurface) { - FIXME(ddraw,"(%p)->(%p)\n", this, lplpGDIDDSSurface); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(%p)\n", This, lplpGDIDDSSurface); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_GetScanLine(LPDIRECTDRAW2 this, +static HRESULT WINAPI IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 iface, LPDWORD lpdwScanLine) { - FIXME(ddraw,"(%p)->(%p)\n", this, lpdwScanLine); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(%p)\n", This, lpdwScanLine); return DD_OK; } -static HRESULT WINAPI IDirectDraw2_Initialize(LPDIRECTDRAW2 this, +static HRESULT WINAPI IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, GUID *lpGUID) { - FIXME(ddraw,"(%p)->(%p)\n", this, lpGUID); + ICOM_THIS(IDirectDraw2Impl,iface); + FIXME(ddraw,"(%p)->(%p)\n", This, lpGUID); return DD_OK; } @@ -3784,56 +3914,56 @@ static HRESULT WINAPI IDirectDraw2_Initialize(LPDIRECTDRAW2 this, # define XCAST(fun) (void*) #endif -static struct IDirectDraw_VTable dga_ddvt = { - XCAST(QueryInterface)DGA_IDirectDraw2_QueryInterface, - XCAST(AddRef)IDirectDraw2_AddRef, - XCAST(Release)DGA_IDirectDraw2_Release, - XCAST(Compact)IDirectDraw2_Compact, - XCAST(CreateClipper)IDirectDraw2_CreateClipper, - XCAST(CreatePalette)DGA_IDirectDraw2_CreatePalette, - XCAST(CreateSurface)DGA_IDirectDraw2_CreateSurface, - XCAST(DuplicateSurface)IDirectDraw2_DuplicateSurface, - XCAST(EnumDisplayModes)DGA_IDirectDraw2_EnumDisplayModes, - XCAST(EnumSurfaces)IDirectDraw2_EnumSurfaces, - XCAST(FlipToGDISurface)IDirectDraw2_FlipToGDISurface, - XCAST(GetCaps)DGA_IDirectDraw2_GetCaps, - XCAST(GetDisplayMode)DGA_IDirectDraw2_GetDisplayMode, - XCAST(GetFourCCCodes)IDirectDraw2_GetFourCCCodes, - XCAST(GetGDISurface)IDirectDraw2_GetGDISurface, - XCAST(GetMonitorFrequency)IDirectDraw2_GetMonitorFrequency, - XCAST(GetScanLine)IDirectDraw2_GetScanLine, - XCAST(GetVerticalBlankStatus)IDirectDraw2_GetVerticalBlankStatus, - XCAST(Initialize)IDirectDraw2_Initialize, - XCAST(RestoreDisplayMode)DGA_IDirectDraw2_RestoreDisplayMode, - XCAST(SetCooperativeLevel)IDirectDraw2_SetCooperativeLevel, - DGA_IDirectDraw_SetDisplayMode, - XCAST(WaitForVerticalBlank)IDirectDraw2_WaitForVerticalBlank, +static ICOM_VTABLE(IDirectDraw) dga_ddvt = { + XCAST(QueryInterface)DGA_IDirectDraw2Impl_QueryInterface, + XCAST(AddRef)IDirectDraw2Impl_AddRef, + XCAST(Release)DGA_IDirectDraw2Impl_Release, + XCAST(Compact)IDirectDraw2Impl_Compact, + XCAST(CreateClipper)IDirectDraw2Impl_CreateClipper, + XCAST(CreatePalette)DGA_IDirectDraw2Impl_CreatePalette, + XCAST(CreateSurface)DGA_IDirectDraw2Impl_CreateSurface, + XCAST(DuplicateSurface)IDirectDraw2Impl_DuplicateSurface, + XCAST(EnumDisplayModes)DGA_IDirectDraw2Impl_EnumDisplayModes, + XCAST(EnumSurfaces)IDirectDraw2Impl_EnumSurfaces, + XCAST(FlipToGDISurface)IDirectDraw2Impl_FlipToGDISurface, + XCAST(GetCaps)DGA_IDirectDraw2Impl_GetCaps, + XCAST(GetDisplayMode)DGA_IDirectDraw2Impl_GetDisplayMode, + XCAST(GetFourCCCodes)IDirectDraw2Impl_GetFourCCCodes, + XCAST(GetGDISurface)IDirectDraw2Impl_GetGDISurface, + XCAST(GetMonitorFrequency)IDirectDraw2Impl_GetMonitorFrequency, + XCAST(GetScanLine)IDirectDraw2Impl_GetScanLine, + XCAST(GetVerticalBlankStatus)IDirectDraw2Impl_GetVerticalBlankStatus, + XCAST(Initialize)IDirectDraw2Impl_Initialize, + XCAST(RestoreDisplayMode)DGA_IDirectDraw2Impl_RestoreDisplayMode, + XCAST(SetCooperativeLevel)IDirectDraw2Impl_SetCooperativeLevel, + DGA_IDirectDrawImpl_SetDisplayMode, + XCAST(WaitForVerticalBlank)IDirectDraw2Impl_WaitForVerticalBlank, }; -static struct IDirectDraw_VTable xlib_ddvt = { - XCAST(QueryInterface)Xlib_IDirectDraw2_QueryInterface, - XCAST(AddRef)IDirectDraw2_AddRef, - XCAST(Release)Xlib_IDirectDraw2_Release, - XCAST(Compact)IDirectDraw2_Compact, - XCAST(CreateClipper)IDirectDraw2_CreateClipper, - XCAST(CreatePalette)Xlib_IDirectDraw2_CreatePalette, - XCAST(CreateSurface)Xlib_IDirectDraw2_CreateSurface, - XCAST(DuplicateSurface)IDirectDraw2_DuplicateSurface, - XCAST(EnumDisplayModes)Xlib_IDirectDraw2_EnumDisplayModes, - XCAST(EnumSurfaces)IDirectDraw2_EnumSurfaces, - XCAST(FlipToGDISurface)IDirectDraw2_FlipToGDISurface, - XCAST(GetCaps)Xlib_IDirectDraw2_GetCaps, - XCAST(GetDisplayMode)Xlib_IDirectDraw2_GetDisplayMode, - XCAST(GetFourCCCodes)IDirectDraw2_GetFourCCCodes, - XCAST(GetGDISurface)IDirectDraw2_GetGDISurface, - XCAST(GetMonitorFrequency)IDirectDraw2_GetMonitorFrequency, - XCAST(GetScanLine)IDirectDraw2_GetScanLine, - XCAST(GetVerticalBlankStatus)IDirectDraw2_GetVerticalBlankStatus, - XCAST(Initialize)IDirectDraw2_Initialize, - XCAST(RestoreDisplayMode)Xlib_IDirectDraw2_RestoreDisplayMode, - XCAST(SetCooperativeLevel)IDirectDraw2_SetCooperativeLevel, - Xlib_IDirectDraw_SetDisplayMode, - XCAST(WaitForVerticalBlank)IDirectDraw2_WaitForVerticalBlank, +static ICOM_VTABLE(IDirectDraw) xlib_ddvt = { + XCAST(QueryInterface)Xlib_IDirectDraw2Impl_QueryInterface, + XCAST(AddRef)IDirectDraw2Impl_AddRef, + XCAST(Release)Xlib_IDirectDraw2Impl_Release, + XCAST(Compact)IDirectDraw2Impl_Compact, + XCAST(CreateClipper)IDirectDraw2Impl_CreateClipper, + XCAST(CreatePalette)Xlib_IDirectDraw2Impl_CreatePalette, + XCAST(CreateSurface)Xlib_IDirectDraw2Impl_CreateSurface, + XCAST(DuplicateSurface)IDirectDraw2Impl_DuplicateSurface, + XCAST(EnumDisplayModes)Xlib_IDirectDraw2Impl_EnumDisplayModes, + XCAST(EnumSurfaces)IDirectDraw2Impl_EnumSurfaces, + XCAST(FlipToGDISurface)IDirectDraw2Impl_FlipToGDISurface, + XCAST(GetCaps)Xlib_IDirectDraw2Impl_GetCaps, + XCAST(GetDisplayMode)Xlib_IDirectDraw2Impl_GetDisplayMode, + XCAST(GetFourCCCodes)IDirectDraw2Impl_GetFourCCCodes, + XCAST(GetGDISurface)IDirectDraw2Impl_GetGDISurface, + XCAST(GetMonitorFrequency)IDirectDraw2Impl_GetMonitorFrequency, + XCAST(GetScanLine)IDirectDraw2Impl_GetScanLine, + XCAST(GetVerticalBlankStatus)IDirectDraw2Impl_GetVerticalBlankStatus, + XCAST(Initialize)IDirectDraw2Impl_Initialize, + XCAST(RestoreDisplayMode)Xlib_IDirectDraw2Impl_RestoreDisplayMode, + XCAST(SetCooperativeLevel)IDirectDraw2Impl_SetCooperativeLevel, + Xlib_IDirectDrawImpl_SetDisplayMode, + XCAST(WaitForVerticalBlank)IDirectDraw2Impl_WaitForVerticalBlank, }; #undef XCAST @@ -3844,92 +3974,94 @@ static struct IDirectDraw_VTable xlib_ddvt = { */ -static HRESULT WINAPI DGA_IDirectDraw2_SetDisplayMode( - LPDIRECTDRAW2 this,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy +static HRESULT WINAPI DGA_IDirectDraw2Impl_SetDisplayMode( + LPDIRECTDRAW2 iface,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy ) { - return DGA_IDirectDraw_SetDisplayMode((LPDIRECTDRAW)this,width,height,depth); + return DGA_IDirectDrawImpl_SetDisplayMode((LPDIRECTDRAW)iface,width,height,depth); } -static HRESULT WINAPI Xlib_IDirectDraw2_SetDisplayMode( - LPDIRECTDRAW2 this,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy +static HRESULT WINAPI Xlib_IDirectDraw2Impl_SetDisplayMode( + LPDIRECTDRAW2 iface,DWORD width,DWORD height,DWORD depth,DWORD xx,DWORD yy ) { - return Xlib_IDirectDraw_SetDisplayMode((LPDIRECTDRAW)this,width,height,depth); + return Xlib_IDirectDrawImpl_SetDisplayMode((LPDIRECTDRAW)iface,width,height,depth); } -static HRESULT WINAPI DGA_IDirectDraw2_GetAvailableVidMem( - LPDIRECTDRAW2 this,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free +static HRESULT WINAPI DGA_IDirectDraw2Impl_GetAvailableVidMem( + LPDIRECTDRAW2 iface,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free ) { + ICOM_THIS(IDirectDraw2Impl,iface); TRACE(ddraw,"(%p)->(%p,%p,%p)\n", - this,ddscaps,total,free + This,ddscaps,total,free ); - if (total) *total = this->e.dga.fb_memsize * 1024; - if (free) *free = this->e.dga.fb_memsize * 1024; + if (total) *total = This->e.dga.fb_memsize * 1024; + if (free) *free = This->e.dga.fb_memsize * 1024; return DD_OK; } -static HRESULT WINAPI Xlib_IDirectDraw2_GetAvailableVidMem( - LPDIRECTDRAW2 this,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free +static HRESULT WINAPI Xlib_IDirectDraw2Impl_GetAvailableVidMem( + LPDIRECTDRAW2 iface,LPDDSCAPS ddscaps,LPDWORD total,LPDWORD free ) { + ICOM_THIS(IDirectDraw2Impl,iface); TRACE(ddraw,"(%p)->(%p,%p,%p)\n", - this,ddscaps,total,free + This,ddscaps,total,free ); if (total) *total = 2048 * 1024; if (free) *free = 2048 * 1024; return DD_OK; } -static IDirectDraw2_VTable dga_dd2vt = { - DGA_IDirectDraw2_QueryInterface, - IDirectDraw2_AddRef, - DGA_IDirectDraw2_Release, - IDirectDraw2_Compact, - IDirectDraw2_CreateClipper, - DGA_IDirectDraw2_CreatePalette, - DGA_IDirectDraw2_CreateSurface, - IDirectDraw2_DuplicateSurface, - DGA_IDirectDraw2_EnumDisplayModes, - IDirectDraw2_EnumSurfaces, - IDirectDraw2_FlipToGDISurface, - DGA_IDirectDraw2_GetCaps, - DGA_IDirectDraw2_GetDisplayMode, - IDirectDraw2_GetFourCCCodes, - IDirectDraw2_GetGDISurface, - IDirectDraw2_GetMonitorFrequency, - IDirectDraw2_GetScanLine, - IDirectDraw2_GetVerticalBlankStatus, - IDirectDraw2_Initialize, - DGA_IDirectDraw2_RestoreDisplayMode, - IDirectDraw2_SetCooperativeLevel, - DGA_IDirectDraw2_SetDisplayMode, - IDirectDraw2_WaitForVerticalBlank, - DGA_IDirectDraw2_GetAvailableVidMem +static ICOM_VTABLE(IDirectDraw2) dga_dd2vt = { + DGA_IDirectDraw2Impl_QueryInterface, + IDirectDraw2Impl_AddRef, + DGA_IDirectDraw2Impl_Release, + IDirectDraw2Impl_Compact, + IDirectDraw2Impl_CreateClipper, + DGA_IDirectDraw2Impl_CreatePalette, + DGA_IDirectDraw2Impl_CreateSurface, + IDirectDraw2Impl_DuplicateSurface, + DGA_IDirectDraw2Impl_EnumDisplayModes, + IDirectDraw2Impl_EnumSurfaces, + IDirectDraw2Impl_FlipToGDISurface, + DGA_IDirectDraw2Impl_GetCaps, + DGA_IDirectDraw2Impl_GetDisplayMode, + IDirectDraw2Impl_GetFourCCCodes, + IDirectDraw2Impl_GetGDISurface, + IDirectDraw2Impl_GetMonitorFrequency, + IDirectDraw2Impl_GetScanLine, + IDirectDraw2Impl_GetVerticalBlankStatus, + IDirectDraw2Impl_Initialize, + DGA_IDirectDraw2Impl_RestoreDisplayMode, + IDirectDraw2Impl_SetCooperativeLevel, + DGA_IDirectDraw2Impl_SetDisplayMode, + IDirectDraw2Impl_WaitForVerticalBlank, + DGA_IDirectDraw2Impl_GetAvailableVidMem }; -static struct IDirectDraw2_VTable xlib_dd2vt = { - Xlib_IDirectDraw2_QueryInterface, - IDirectDraw2_AddRef, - Xlib_IDirectDraw2_Release, - IDirectDraw2_Compact, - IDirectDraw2_CreateClipper, - Xlib_IDirectDraw2_CreatePalette, - Xlib_IDirectDraw2_CreateSurface, - IDirectDraw2_DuplicateSurface, - Xlib_IDirectDraw2_EnumDisplayModes, - IDirectDraw2_EnumSurfaces, - IDirectDraw2_FlipToGDISurface, - Xlib_IDirectDraw2_GetCaps, - Xlib_IDirectDraw2_GetDisplayMode, - IDirectDraw2_GetFourCCCodes, - IDirectDraw2_GetGDISurface, - IDirectDraw2_GetMonitorFrequency, - IDirectDraw2_GetScanLine, - IDirectDraw2_GetVerticalBlankStatus, - IDirectDraw2_Initialize, - Xlib_IDirectDraw2_RestoreDisplayMode, - IDirectDraw2_SetCooperativeLevel, - Xlib_IDirectDraw2_SetDisplayMode, - IDirectDraw2_WaitForVerticalBlank, - Xlib_IDirectDraw2_GetAvailableVidMem +static ICOM_VTABLE(IDirectDraw2) xlib_dd2vt = { + Xlib_IDirectDraw2Impl_QueryInterface, + IDirectDraw2Impl_AddRef, + Xlib_IDirectDraw2Impl_Release, + IDirectDraw2Impl_Compact, + IDirectDraw2Impl_CreateClipper, + Xlib_IDirectDraw2Impl_CreatePalette, + Xlib_IDirectDraw2Impl_CreateSurface, + IDirectDraw2Impl_DuplicateSurface, + Xlib_IDirectDraw2Impl_EnumDisplayModes, + IDirectDraw2Impl_EnumSurfaces, + IDirectDraw2Impl_FlipToGDISurface, + Xlib_IDirectDraw2Impl_GetCaps, + Xlib_IDirectDraw2Impl_GetDisplayMode, + IDirectDraw2Impl_GetFourCCCodes, + IDirectDraw2Impl_GetGDISurface, + IDirectDraw2Impl_GetMonitorFrequency, + IDirectDraw2Impl_GetScanLine, + IDirectDraw2Impl_GetVerticalBlankStatus, + IDirectDraw2Impl_Initialize, + Xlib_IDirectDraw2Impl_RestoreDisplayMode, + IDirectDraw2Impl_SetCooperativeLevel, + Xlib_IDirectDraw2Impl_SetDisplayMode, + IDirectDraw2Impl_WaitForVerticalBlank, + Xlib_IDirectDraw2Impl_GetAvailableVidMem }; /***************************************************************************** @@ -3937,30 +4069,34 @@ static struct IDirectDraw2_VTable xlib_dd2vt = { * */ -static HRESULT WINAPI IDirectDraw4_GetSurfaceFromDC(LPDIRECTDRAW4 this, +static HRESULT WINAPI IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 iface, HDC hdc, LPDIRECTDRAWSURFACE *lpDDS) { - FIXME(ddraw, "(%p)->(%08ld,%p)\n", this, (DWORD) hdc, lpDDS); + ICOM_THIS(IDirectDraw4Impl,iface); + FIXME(ddraw, "(%p)->(%08ld,%p)\n", This, (DWORD) hdc, lpDDS); return DD_OK; } -static HRESULT WINAPI IDirectDraw4_RestoreAllSurfaces(LPDIRECTDRAW4 this) { - FIXME(ddraw, "(%p)->()\n", this); +static HRESULT WINAPI IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 iface) { + ICOM_THIS(IDirectDraw4Impl,iface); + FIXME(ddraw, "(%p)->()\n", This); return DD_OK; } -static HRESULT WINAPI IDirectDraw4_TestCooperativeLevel(LPDIRECTDRAW4 this) { - FIXME(ddraw, "(%p)->()\n", this); +static HRESULT WINAPI IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 iface) { + ICOM_THIS(IDirectDraw4Impl,iface); + FIXME(ddraw, "(%p)->()\n", This); return DD_OK; } -static HRESULT WINAPI IDirectDraw4_GetDeviceIdentifier(LPDIRECTDRAW4 this, +static HRESULT WINAPI IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 iface, LPDDDEVICEIDENTIFIER lpdddi, DWORD dwFlags) { - FIXME(ddraw, "(%p)->(%p,%08lx)\n", this, lpdddi, dwFlags); + ICOM_THIS(IDirectDraw4Impl,iface); + FIXME(ddraw, "(%p)->(%p,%08lx)\n", This, lpdddi, dwFlags); return DD_OK; } @@ -3972,66 +4108,66 @@ static HRESULT WINAPI IDirectDraw4_GetDeviceIdentifier(LPDIRECTDRAW4 this, #endif -static struct IDirectDraw4_VTable dga_dd4vt = { - XCAST(QueryInterface)DGA_IDirectDraw2_QueryInterface, - XCAST(AddRef)IDirectDraw2_AddRef, - XCAST(Release)DGA_IDirectDraw2_Release, - XCAST(Compact)IDirectDraw2_Compact, - XCAST(CreateClipper)IDirectDraw2_CreateClipper, - XCAST(CreatePalette)DGA_IDirectDraw2_CreatePalette, - XCAST(CreateSurface)DGA_IDirectDraw2_CreateSurface, - XCAST(DuplicateSurface)IDirectDraw2_DuplicateSurface, - XCAST(EnumDisplayModes)DGA_IDirectDraw2_EnumDisplayModes, - XCAST(EnumSurfaces)IDirectDraw2_EnumSurfaces, - XCAST(FlipToGDISurface)IDirectDraw2_FlipToGDISurface, - XCAST(GetCaps)DGA_IDirectDraw2_GetCaps, - XCAST(GetDisplayMode)DGA_IDirectDraw2_GetDisplayMode, - XCAST(GetFourCCCodes)IDirectDraw2_GetFourCCCodes, - XCAST(GetGDISurface)IDirectDraw2_GetGDISurface, - XCAST(GetMonitorFrequency)IDirectDraw2_GetMonitorFrequency, - XCAST(GetScanLine)IDirectDraw2_GetScanLine, - XCAST(GetVerticalBlankStatus)IDirectDraw2_GetVerticalBlankStatus, - XCAST(Initialize)IDirectDraw2_Initialize, - XCAST(RestoreDisplayMode)DGA_IDirectDraw2_RestoreDisplayMode, - XCAST(SetCooperativeLevel)IDirectDraw2_SetCooperativeLevel, - XCAST(SetDisplayMode)DGA_IDirectDraw_SetDisplayMode, - XCAST(WaitForVerticalBlank)IDirectDraw2_WaitForVerticalBlank, - XCAST(GetAvailableVidMem)DGA_IDirectDraw2_GetAvailableVidMem, - IDirectDraw4_GetSurfaceFromDC, - IDirectDraw4_RestoreAllSurfaces, - IDirectDraw4_TestCooperativeLevel, - IDirectDraw4_GetDeviceIdentifier +static ICOM_VTABLE(IDirectDraw4) dga_dd4vt = { + XCAST(QueryInterface)DGA_IDirectDraw2Impl_QueryInterface, + XCAST(AddRef)IDirectDraw2Impl_AddRef, + XCAST(Release)DGA_IDirectDraw2Impl_Release, + XCAST(Compact)IDirectDraw2Impl_Compact, + XCAST(CreateClipper)IDirectDraw2Impl_CreateClipper, + XCAST(CreatePalette)DGA_IDirectDraw2Impl_CreatePalette, + XCAST(CreateSurface)DGA_IDirectDraw2Impl_CreateSurface, + XCAST(DuplicateSurface)IDirectDraw2Impl_DuplicateSurface, + XCAST(EnumDisplayModes)DGA_IDirectDraw2Impl_EnumDisplayModes, + XCAST(EnumSurfaces)IDirectDraw2Impl_EnumSurfaces, + XCAST(FlipToGDISurface)IDirectDraw2Impl_FlipToGDISurface, + XCAST(GetCaps)DGA_IDirectDraw2Impl_GetCaps, + XCAST(GetDisplayMode)DGA_IDirectDraw2Impl_GetDisplayMode, + XCAST(GetFourCCCodes)IDirectDraw2Impl_GetFourCCCodes, + XCAST(GetGDISurface)IDirectDraw2Impl_GetGDISurface, + XCAST(GetMonitorFrequency)IDirectDraw2Impl_GetMonitorFrequency, + XCAST(GetScanLine)IDirectDraw2Impl_GetScanLine, + XCAST(GetVerticalBlankStatus)IDirectDraw2Impl_GetVerticalBlankStatus, + XCAST(Initialize)IDirectDraw2Impl_Initialize, + XCAST(RestoreDisplayMode)DGA_IDirectDraw2Impl_RestoreDisplayMode, + XCAST(SetCooperativeLevel)IDirectDraw2Impl_SetCooperativeLevel, + XCAST(SetDisplayMode)DGA_IDirectDrawImpl_SetDisplayMode, + XCAST(WaitForVerticalBlank)IDirectDraw2Impl_WaitForVerticalBlank, + XCAST(GetAvailableVidMem)DGA_IDirectDraw2Impl_GetAvailableVidMem, + IDirectDraw4Impl_GetSurfaceFromDC, + IDirectDraw4Impl_RestoreAllSurfaces, + IDirectDraw4Impl_TestCooperativeLevel, + IDirectDraw4Impl_GetDeviceIdentifier }; -static struct IDirectDraw4_VTable xlib_dd4vt = { - XCAST(QueryInterface)Xlib_IDirectDraw2_QueryInterface, - XCAST(AddRef)IDirectDraw2_AddRef, - XCAST(Release)Xlib_IDirectDraw2_Release, - XCAST(Compact)IDirectDraw2_Compact, - XCAST(CreateClipper)IDirectDraw2_CreateClipper, - XCAST(CreatePalette)Xlib_IDirectDraw2_CreatePalette, - XCAST(CreateSurface)Xlib_IDirectDraw2_CreateSurface, - XCAST(DuplicateSurface)IDirectDraw2_DuplicateSurface, - XCAST(EnumDisplayModes)Xlib_IDirectDraw2_EnumDisplayModes, - XCAST(EnumSurfaces)IDirectDraw2_EnumSurfaces, - XCAST(FlipToGDISurface)IDirectDraw2_FlipToGDISurface, - XCAST(GetCaps)Xlib_IDirectDraw2_GetCaps, - XCAST(GetDisplayMode)Xlib_IDirectDraw2_GetDisplayMode, - XCAST(GetFourCCCodes)IDirectDraw2_GetFourCCCodes, - XCAST(GetGDISurface)IDirectDraw2_GetGDISurface, - XCAST(GetMonitorFrequency)IDirectDraw2_GetMonitorFrequency, - XCAST(GetScanLine)IDirectDraw2_GetScanLine, - XCAST(GetVerticalBlankStatus)IDirectDraw2_GetVerticalBlankStatus, - XCAST(Initialize)IDirectDraw2_Initialize, - XCAST(RestoreDisplayMode)Xlib_IDirectDraw2_RestoreDisplayMode, - XCAST(SetCooperativeLevel)IDirectDraw2_SetCooperativeLevel, - XCAST(SetDisplayMode)Xlib_IDirectDraw_SetDisplayMode, - XCAST(WaitForVerticalBlank)IDirectDraw2_WaitForVerticalBlank, - XCAST(GetAvailableVidMem)Xlib_IDirectDraw2_GetAvailableVidMem, - IDirectDraw4_GetSurfaceFromDC, - IDirectDraw4_RestoreAllSurfaces, - IDirectDraw4_TestCooperativeLevel, - IDirectDraw4_GetDeviceIdentifier +static ICOM_VTABLE(IDirectDraw4) xlib_dd4vt = { + XCAST(QueryInterface)Xlib_IDirectDraw2Impl_QueryInterface, + XCAST(AddRef)IDirectDraw2Impl_AddRef, + XCAST(Release)Xlib_IDirectDraw2Impl_Release, + XCAST(Compact)IDirectDraw2Impl_Compact, + XCAST(CreateClipper)IDirectDraw2Impl_CreateClipper, + XCAST(CreatePalette)Xlib_IDirectDraw2Impl_CreatePalette, + XCAST(CreateSurface)Xlib_IDirectDraw2Impl_CreateSurface, + XCAST(DuplicateSurface)IDirectDraw2Impl_DuplicateSurface, + XCAST(EnumDisplayModes)Xlib_IDirectDraw2Impl_EnumDisplayModes, + XCAST(EnumSurfaces)IDirectDraw2Impl_EnumSurfaces, + XCAST(FlipToGDISurface)IDirectDraw2Impl_FlipToGDISurface, + XCAST(GetCaps)Xlib_IDirectDraw2Impl_GetCaps, + XCAST(GetDisplayMode)Xlib_IDirectDraw2Impl_GetDisplayMode, + XCAST(GetFourCCCodes)IDirectDraw2Impl_GetFourCCCodes, + XCAST(GetGDISurface)IDirectDraw2Impl_GetGDISurface, + XCAST(GetMonitorFrequency)IDirectDraw2Impl_GetMonitorFrequency, + XCAST(GetScanLine)IDirectDraw2Impl_GetScanLine, + XCAST(GetVerticalBlankStatus)IDirectDraw2Impl_GetVerticalBlankStatus, + XCAST(Initialize)IDirectDraw2Impl_Initialize, + XCAST(RestoreDisplayMode)Xlib_IDirectDraw2Impl_RestoreDisplayMode, + XCAST(SetCooperativeLevel)IDirectDraw2Impl_SetCooperativeLevel, + XCAST(SetDisplayMode)Xlib_IDirectDrawImpl_SetDisplayMode, + XCAST(WaitForVerticalBlank)IDirectDraw2Impl_WaitForVerticalBlank, + XCAST(GetAvailableVidMem)Xlib_IDirectDraw2Impl_GetAvailableVidMem, + IDirectDraw4Impl_GetSurfaceFromDC, + IDirectDraw4Impl_RestoreAllSurfaces, + IDirectDraw4Impl_TestCooperativeLevel, + IDirectDraw4Impl_GetDeviceIdentifier }; #undef XCAST @@ -4043,13 +4179,13 @@ static struct IDirectDraw4_VTable xlib_dd4vt = { LRESULT WINAPI Xlib_DDWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { LRESULT ret; - LPDIRECTDRAW ddraw = NULL; + IDirectDrawImpl* ddraw = NULL; DWORD lastError; /* FIXME(ddraw,"(0x%04x,%s,0x%08lx,0x%08lx),stub!\n",(int)hwnd,SPY_GetMsgName(msg),(long)wParam,(long)lParam); */ SetLastError( ERROR_SUCCESS ); - ddraw = (LPDIRECTDRAW)GetWindowLongA( hwnd, ddrawXlibThisOffset ); + ddraw = (IDirectDrawImpl*)GetWindowLongA( hwnd, ddrawXlibThisOffset ); if( (!ddraw) && ( ( lastError = GetLastError() ) != ERROR_SUCCESS ) ) @@ -4105,6 +4241,7 @@ LRESULT WINAPI Xlib_DDWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) HRESULT WINAPI DGA_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) { #ifdef HAVE_LIBXXF86DGA + IDirectDrawImpl** ilplpDD=(IDirectDrawImpl**)lplpDD; int memsize,banksize,width,major,minor,flags,height; char *addr; int fd; @@ -4123,9 +4260,9 @@ HRESULT WINAPI DGA_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) TRACE(ddraw,"No XF86DGA detected.\n"); return DDERR_GENERIC; } - *lplpDD = (LPDIRECTDRAW)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDraw)); - (*lplpDD)->lpvtbl = &dga_ddvt; - (*lplpDD)->ref = 1; + *ilplpDD = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawImpl)); + (*ilplpDD)->lpvtbl = &dga_ddvt; + (*ilplpDD)->ref = 1; TSXF86DGAQueryVersion(display,&major,&minor); TRACE(ddraw,"XF86DGA is version %d.%d\n",major,minor); TSXF86DGAQueryDirectVideo(display,DefaultScreen(display),&flags); @@ -4135,24 +4272,24 @@ HRESULT WINAPI DGA_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) TRACE(ddraw,"video framebuffer: begin %p, width %d,banksize %d,memsize %d\n", addr,width,banksize,memsize ); - (*lplpDD)->e.dga.fb_width = width; - (*lplpDD)->d.width = width; - (*lplpDD)->e.dga.fb_addr = addr; - (*lplpDD)->e.dga.fb_memsize = memsize; - (*lplpDD)->e.dga.fb_banksize = banksize; + (*ilplpDD)->e.dga.fb_width = width; + (*ilplpDD)->d.width = width; + (*ilplpDD)->e.dga.fb_addr = addr; + (*ilplpDD)->e.dga.fb_memsize = memsize; + (*ilplpDD)->e.dga.fb_banksize = banksize; TSXF86DGAGetViewPortSize(display,DefaultScreen(display),&width,&height); TSXF86DGASetViewPort(display,DefaultScreen(display),0,0); - (*lplpDD)->e.dga.fb_height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); + (*ilplpDD)->e.dga.fb_height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); #ifdef DIABLO_HACK - (*lplpDD)->e.dga.vpmask = 1; + (*ilplpDD)->e.dga.vpmask = 1; #else - (*lplpDD)->e.dga.vpmask = 0; + (*ilplpDD)->e.dga.vpmask = 0; #endif /* just assume the default depth is the DGA depth too */ depth = DefaultDepthOfScreen(X11DRV_GetXScreen()); - _common_depth_to_pixelformat(depth, &((*lplpDD)->d.directdraw_pixelformat), &((*lplpDD)->d.screen_pixelformat), NULL); + _common_depth_to_pixelformat(depth, &((*ilplpDD)->d.directdraw_pixelformat), &((*ilplpDD)->d.screen_pixelformat), NULL); #ifdef RESTORE_SIGNALS SIGNAL_InitHandlers(); #endif @@ -4185,22 +4322,23 @@ DDRAW_XSHM_Available(void) } HRESULT WINAPI Xlib_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) { + IDirectDrawImpl** ilplpDD=(IDirectDrawImpl**)lplpDD; int depth; - *lplpDD = (LPDIRECTDRAW)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDraw)); - (*lplpDD)->lpvtbl = &xlib_ddvt; - (*lplpDD)->ref = 1; - (*lplpDD)->d.drawable = 0; /* in SetDisplayMode */ + *ilplpDD = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawImpl)); + (*ilplpDD)->lpvtbl = &xlib_ddvt; + (*ilplpDD)->ref = 1; + (*ilplpDD)->d.drawable = 0; /* in SetDisplayMode */ /* At DirectDraw creation, the depth is the default depth */ depth = DefaultDepthOfScreen(X11DRV_GetXScreen()); - _common_depth_to_pixelformat(depth, &((*lplpDD)->d.directdraw_pixelformat), &((*lplpDD)->d.screen_pixelformat), NULL); - (*lplpDD)->d.height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); - (*lplpDD)->d.width = MONITOR_GetWidth(&MONITOR_PrimaryMonitor); + _common_depth_to_pixelformat(depth, &((*ilplpDD)->d.directdraw_pixelformat), &((*ilplpDD)->d.screen_pixelformat), NULL); + (*ilplpDD)->d.height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor); + (*ilplpDD)->d.width = MONITOR_GetWidth(&MONITOR_PrimaryMonitor); #ifdef HAVE_LIBXXSHM /* Test if XShm is available. */ - if (((*lplpDD)->e.xlib.xshm_active = DDRAW_XSHM_Available())) + if (((*ilplpDD)->e.xlib.xshm_active = DDRAW_XSHM_Available())) TRACE(ddraw, "Using XShm extension.\n"); #endif @@ -4208,6 +4346,7 @@ HRESULT WINAPI Xlib_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) } HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter ) { + IDirectDrawImpl** ilplpDD=(IDirectDrawImpl**)lplpDD; char xclsid[50]; WNDCLASSA wc; /* WND* pParentWindow; */ @@ -4220,7 +4359,7 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN lpGUID = NULL; } - TRACE(ddraw,"(%s,%p,%p)\n",xclsid,lplpDD,pUnkOuter); + TRACE(ddraw,"(%s,%p,%p)\n",xclsid,ilplpDD,pUnkOuter); if (!lpGUID) { /* if they didn't request a particular interface, use the best @@ -4261,7 +4400,7 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN goto err; - (*lplpDD)->d.winclass = RegisterClassA(&wc); + (*ilplpDD)->d.winclass = RegisterClassA(&wc); return ret; err: