| /* Direct3D Device |
| (c) 1998 Lionel ULMER |
| |
| This files contains all the common stuff for D3D devices. |
| */ |
| |
| #include <string.h> |
| #include "config.h" |
| #include "windef.h" |
| #include "winerror.h" |
| #include "wine/obj_base.h" |
| #include "heap.h" |
| #include "ddraw.h" |
| #include "d3d.h" |
| #include "debugtools.h" |
| |
| #include "d3d_private.h" |
| |
| DEFAULT_DEBUG_CHANNEL(ddraw); |
| |
| /******************************************************************************* |
| * IDirect3DDevice2 |
| */ |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_QueryInterface( |
| LPDIRECT3DDEVICE2 iface, REFIID riid, LPVOID* ppvObj |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj); |
| return S_OK; |
| } |
| |
| ULONG WINAPI IDirect3DDevice2Impl_AddRef(LPDIRECT3DDEVICE2 iface) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| TRACE("(%p)->()incrementing from %lu.\n", This, This->ref ); |
| |
| return ++(This->ref); |
| } |
| |
| |
| |
| ULONG WINAPI IDirect3DDevice2Impl_Release(LPDIRECT3DDEVICE2 iface) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->() decrementing from %lu.\n", This, This->ref ); |
| |
| if (!--(This->ref)) { |
| HeapFree(GetProcessHeap(),0,This); |
| return 0; |
| } |
| return This->ref; |
| } |
| |
| |
| /*** IDirect3DDevice2 methods ***/ |
| HRESULT WINAPI IDirect3DDevice2Impl_GetCaps( |
| LPDIRECT3DDEVICE2 iface, LPD3DDEVICEDESC lpdescsoft, |
| LPD3DDEVICEDESC lpdeschard |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p,%p), stub!\n", This, lpdescsoft, lpdeschard); |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SwapTextureHandles( |
| LPDIRECT3DDEVICE2 iface,LPDIRECT3DTEXTURE2 lptex1,LPDIRECT3DTEXTURE2 lptex2 |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p,%p): stub\n", This, lptex1, lptex2); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetStats( |
| LPDIRECT3DDEVICE2 iface, LPD3DSTATS lpstats) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lpstats); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_AddViewport( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| FIXME("(%p)->(%p): stub\n", This, ilpvp); |
| |
| /* Adds this viewport to the viewport list */ |
| ilpvp->next = This->viewport_list; |
| This->viewport_list = ilpvp; |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_DeleteViewport( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| IDirect3DViewport2Impl *cur, *prev; |
| FIXME("(%p)->(%p): stub\n", This, lpvp); |
| |
| /* Finds this viewport in the list */ |
| prev = NULL; |
| cur = This->viewport_list; |
| while ((cur != NULL) && (cur != ilpvp)) { |
| prev = cur; |
| cur = cur->next; |
| } |
| if (cur == NULL) |
| return DDERR_INVALIDOBJECT; |
| |
| /* And remove it */ |
| if (prev == NULL) |
| This->viewport_list = cur->next; |
| else |
| prev->next = cur->next; |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_NextViewport( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp, |
| LPDIRECT3DVIEWPORT2* lplpvp, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp; |
| FIXME("(%p)->(%p,%p,%08lx): stub\n", This, lpvp, lpvp, dwFlags); |
| |
| switch (dwFlags) { |
| case D3DNEXT_NEXT: |
| *ilplpvp = ilpvp->next; |
| break; |
| case D3DNEXT_HEAD: |
| *ilplpvp = This->viewport_list; |
| break; |
| case D3DNEXT_TAIL: |
| ilpvp = This->viewport_list; |
| while (ilpvp->next != NULL) |
| ilpvp = ilpvp->next; |
| *ilplpvp = ilpvp; |
| break; |
| default: |
| return DDERR_INVALIDPARAMS; |
| } |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_EnumTextureFormats( |
| LPDIRECT3DDEVICE2 iface, LPD3DENUMTEXTUREFORMATSCALLBACK cb, LPVOID context |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p,%p), stub!\n", This, cb, context); |
| |
| return DD_OK; /* no texture formats in stub implementation */ |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_BeginScene(LPDIRECT3DDEVICE2 iface) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| |
| FIXME("(%p)->(), stub!\n", This); |
| |
| /* Here, we should get the DDraw surface and 'copy it' to the |
| OpenGL surface.... */ |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_EndScene(LPDIRECT3DDEVICE2 iface) |
| { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(): stub\n", This); |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetDirect3D( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3D2 *lpd3d2 |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| TRACE("(%p)->(%p): stub\n", This, lpd3d2); |
| *lpd3d2 = (LPDIRECT3D2)This->d3d; |
| return DD_OK; |
| } |
| |
| /*** DrawPrimitive API ***/ |
| HRESULT WINAPI IDirect3DDevice2Impl_SetCurrentViewport( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 lpvp |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| FIXME("(%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 = ilpvp; |
| |
| /* Activate this viewport */ |
| ilpvp->device.active_device2 = This; |
| ilpvp->activate(ilpvp); |
| |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetCurrentViewport( |
| LPDIRECT3DDEVICE2 iface, LPDIRECT3DVIEWPORT2 *lplpvp |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lplpvp); |
| |
| /* Returns the current viewport */ |
| *lplpvp = (LPDIRECT3DVIEWPORT2)This->current_viewport; |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SetRenderTarget( |
| LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p,%08lx): stub\n", This, lpdds, dwFlags); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetRenderTarget( |
| LPDIRECT3DDEVICE2 iface, LPDIRECTDRAWSURFACE *lplpdds |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lplpdds); |
| |
| /* Returns the current rendering target (the surface on wich we render) */ |
| *lplpdds = (LPDIRECTDRAWSURFACE)This->surface; |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_Begin( |
| LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, |
| DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%d,%08lx): stub\n", This, d3dp, d3dv, dwFlags); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_BeginIndexed( |
| LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, |
| LPVOID lpvert, DWORD numvert, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvert, numvert, dwFlags); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_Vertex( |
| LPDIRECT3DDEVICE2 iface,LPVOID lpvert |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lpvert); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_Index(LPDIRECT3DDEVICE2 iface, WORD index) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d): stub\n", This, index); |
| |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_End(LPDIRECT3DDEVICE2 iface,DWORD dwFlags) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%08lx): stub\n", This, dwFlags); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetRenderState( |
| LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE d3drs, LPDWORD lprstate |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%p): stub\n", This, d3drs, lprstate); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SetRenderState( |
| LPDIRECT3DDEVICE2 iface, D3DRENDERSTATETYPE dwRenderStateType, |
| DWORD dwRenderState |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| |
| FIXME("(%p)->(%d,%ld)\n", This, dwRenderStateType, dwRenderState); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetLightState( |
| LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE d3dls, LPDWORD lplstate |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%p): stub\n", This, d3dls, lplstate); |
| |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SetLightState( |
| LPDIRECT3DDEVICE2 iface, D3DLIGHTSTATETYPE dwLightStateType, |
| DWORD dwLightState |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%08lx): stub\n", This, dwLightStateType, dwLightState); |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SetTransform( |
| LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%p),stub!\n",This,d3dts,lpmatrix); |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetTransform( |
| LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix); |
| |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_MultiplyTransform( |
| LPDIRECT3DDEVICE2 iface, D3DTRANSFORMSTATETYPE d3dts, LPD3DMATRIX lpmatrix |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%d,%p): stub\n", This, d3dts, lpmatrix); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_DrawPrimitive( |
| LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, |
| LPVOID lpvertex, DWORD vertcount, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| |
| TRACE("(%p)->(%d,%d,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, dwFlags); |
| |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_DrawIndexedPrimitive( |
| LPDIRECT3DDEVICE2 iface, D3DPRIMITIVETYPE d3dp, D3DVERTEXTYPE d3dv, |
| LPVOID lpvertex, DWORD vertcount, LPWORD lpindexes, DWORD indexcount, |
| DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| TRACE("(%p)->(%d,%d,%p,%ld,%p,%ld,%08lx): stub\n", This, d3dp, d3dv, lpvertex, vertcount, lpindexes, indexcount, dwFlags); |
| return D3D_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_SetClipStatus( |
| LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lpcs); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDevice2Impl_GetClipStatus( |
| LPDIRECT3DDEVICE2 iface, LPD3DCLIPSTATUS lpcs |
| ) { |
| ICOM_THIS(IDirect3DDevice2Impl,iface); |
| FIXME("(%p)->(%p): stub\n", This, lpcs); |
| |
| return DD_OK; |
| } |
| |
| /******************************************************************************* |
| * Direct3DDevice |
| */ |
| HRESULT WINAPI IDirect3DDeviceImpl_QueryInterface( |
| LPDIRECT3DDEVICE iface, REFIID riid, LPVOID* ppvObj |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| FIXME("(%p)->(%s,%p): stub\n", This, debugstr_guid(riid),ppvObj); |
| return S_OK; |
| } |
| |
| ULONG WINAPI IDirect3DDeviceImpl_AddRef(LPDIRECT3DDEVICE iface) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->()incrementing from %lu.\n", This, This->ref ); |
| |
| return ++(This->ref); |
| } |
| |
| ULONG WINAPI IDirect3DDeviceImpl_Release(LPDIRECT3DDEVICE iface) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| FIXME("(%p)->() decrementing from %lu.\n", This, This->ref ); |
| |
| if (!--(This->ref)) { |
| HeapFree(GetProcessHeap(),0,This); |
| return 0; |
| } |
| return This->ref; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_Initialize( |
| LPDIRECT3DDEVICE iface, LPDIRECT3D lpd3d, LPGUID lpGUID, |
| LPD3DDEVICEDESC lpd3ddvdesc |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p,%p): stub\n", This, lpd3d,lpGUID, lpd3ddvdesc); |
| |
| return DDERR_ALREADYINITIALIZED; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_GetCaps( |
| LPDIRECT3DDEVICE iface, LPD3DDEVICEDESC lpD3DHWDevDesc, |
| LPD3DDEVICEDESC lpD3DSWDevDesc |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p): stub\n", This, lpD3DHWDevDesc, lpD3DSWDevDesc); |
| |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_SwapTextureHandles( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DTEXTURE lpD3DTex1, |
| LPDIRECT3DTEXTURE lpD3DTex2 |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p): stub\n", This, lpD3DTex1, lpD3DTex2); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_CreateExecuteBuffer( |
| LPDIRECT3DDEVICE iface, LPD3DEXECUTEBUFFERDESC lpDesc, |
| LPDIRECT3DEXECUTEBUFFER *lplpDirect3DExecuteBuffer, IUnknown *pUnkOuter |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| FIXME("(%p)->(%p,%p,%p): stub\n", This, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter); |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_GetStats( |
| LPDIRECT3DDEVICE iface, LPD3DSTATS lpD3DStats |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p): stub\n", This, lpD3DStats); |
| |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_Execute( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer, |
| LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p,%08ld): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags); |
| |
| /* Put this as the default context */ |
| |
| /* Execute... */ |
| ((IDirect3DExecuteBufferImpl*)lpDirect3DExecuteBuffer)->execute(lpDirect3DExecuteBuffer, iface, (IDirect3DViewport*)lpDirect3DViewport); |
| |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_AddViewport( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| FIXME("(%p)->(%p): stub\n", This, ilpvp); |
| |
| /* Adds this viewport to the viewport list */ |
| ilpvp->next = This->viewport_list; |
| This->viewport_list = ilpvp; |
| |
| return DD_OK; |
| } |
| |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_DeleteViewport( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| IDirect3DViewport2Impl *cur, *prev; |
| FIXME("(%p)->(%p): stub\n", This, lpvp); |
| |
| /* Finds this viewport in the list */ |
| prev = NULL; |
| cur = This->viewport_list; |
| while ((cur != NULL) && (cur != ilpvp)) { |
| prev = cur; |
| cur = cur->next; |
| } |
| if (cur == NULL) |
| return DDERR_INVALIDOBJECT; |
| |
| /* And remove it */ |
| if (prev == NULL) |
| This->viewport_list = cur->next; |
| else |
| prev->next = cur->next; |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_NextViewport( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DVIEWPORT lpvp, |
| LPDIRECT3DVIEWPORT* lplpvp, DWORD dwFlags |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| IDirect3DViewport2Impl* ilpvp=(IDirect3DViewport2Impl*)lpvp; |
| IDirect3DViewport2Impl** ilplpvp=(IDirect3DViewport2Impl**)lplpvp; |
| FIXME("(%p)->(%p,%p,%08lx): stub\n", This, ilpvp, ilplpvp, dwFlags); |
| |
| switch (dwFlags) { |
| case D3DNEXT_NEXT: |
| *ilplpvp = ilpvp->next; |
| break; |
| case D3DNEXT_HEAD: |
| *ilplpvp = This->viewport_list; |
| break; |
| case D3DNEXT_TAIL: |
| ilpvp = This->viewport_list; |
| while (ilpvp->next != NULL) |
| ilpvp = ilpvp->next; |
| *ilplpvp = ilpvp; |
| break; |
| default: |
| return DDERR_INVALIDPARAMS; |
| } |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_Pick( |
| LPDIRECT3DDEVICE iface, LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer, |
| LPDIRECT3DVIEWPORT lpDirect3DViewport, DWORD dwFlags, LPD3DRECT lpRect |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p,%08lx,%p): stub\n", This, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect); |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_GetPickRecords( |
| LPDIRECT3DDEVICE iface, LPDWORD lpCount, LPD3DPICKRECORD lpD3DPickRec |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p): stub\n", This, lpCount, lpD3DPickRec); |
| |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_EnumTextureFormats( |
| LPDIRECT3DDEVICE iface,LPD3DENUMTEXTUREFORMATSCALLBACK lpd3dEnumTextureProc, |
| LPVOID lpArg |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p,%p): stub\n", This, lpd3dEnumTextureProc, lpArg); |
| return D3D_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_CreateMatrix( |
| LPDIRECT3DDEVICE iface, LPD3DMATRIXHANDLE lpD3DMatHandle |
| ) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p)\n", This, lpD3DMatHandle); |
| |
| *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(D3DMATRIX)); |
| |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_SetMatrix( |
| LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle, |
| const LPD3DMATRIX lpD3DMatrix) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%08lx,%p)\n", This, d3dMatHandle, lpD3DMatrix); |
| |
| dump_mat(lpD3DMatrix); |
| *((D3DMATRIX *) d3dMatHandle) = *lpD3DMatrix; |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_GetMatrix( |
| LPDIRECT3DDEVICE iface,D3DMATRIXHANDLE D3DMatHandle,LPD3DMATRIX lpD3DMatrix |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%08lx,%p)\n", This, D3DMatHandle, lpD3DMatrix); |
| |
| *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle); |
| |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_DeleteMatrix( |
| LPDIRECT3DDEVICE iface, D3DMATRIXHANDLE d3dMatHandle |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%08lx)\n", This, d3dMatHandle); |
| HeapFree(GetProcessHeap(),0, (void *) d3dMatHandle); |
| return DD_OK; |
| } |
| |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_BeginScene(LPDIRECT3DDEVICE iface) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| FIXME("(%p)->(): stub\n", This); |
| return DD_OK; |
| } |
| |
| /* This is for the moment copy-pasted from IDirect3DDevice2... |
| Will make a common function ... */ |
| HRESULT WINAPI IDirect3DDeviceImpl_EndScene(LPDIRECT3DDEVICE iface) |
| { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| FIXME("(%p)->(): stub\n", This); |
| return DD_OK; |
| } |
| |
| HRESULT WINAPI IDirect3DDeviceImpl_GetDirect3D( |
| LPDIRECT3DDEVICE iface, LPDIRECT3D *lpDirect3D |
| ) { |
| ICOM_THIS(IDirect3DDeviceImpl,iface); |
| TRACE("(%p)->(%p): stub\n", This, lpDirect3D); |
| |
| return DD_OK; |
| } |
| |
| /******************************************************************************* |
| * Direct3DDevice VTable |
| */ |
| static ICOM_VTABLE(IDirect3DDevice) WINE_UNUSED d3d_d3ddevice_vtbl = |
| { |
| ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE |
| 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, |
| }; |