Path: blob/master/libmupen64plus/D3D8Interceptor/d3d8Wrapper.h
2 views
#pragma once12#include <iostream>3#include <fstream>4#include "PointerSet.h"56#pragma comment(linker, "/EXPORT:Direct3DCreate8=_Direct3DCreate8@4")78//#define LOGGING 1910#ifdef LOGGING11#define LOG(x) { std::ofstream myfile; myfile.open ("d3d8_wrapper_log.txt", std::ios::app); myfile << x; myfile.close(); }12#else13#define LOG(x)14#endif1516namespace D3D8Base17{18#include "d3d8base/d3d8.h"19}20extern "C"21{22namespace D3D8Wrapper23{24class IDirect3DUnknown25{2627public:28IUnknown* m_pUnk;29ULONG m_ulRef;3031public:32IDirect3DUnknown(IUnknown* pUnk)33{34m_pUnk = pUnk;35m_ulRef = 1;36}3738/*** IUnknown methods ***/39STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj)40{41return E_FAIL;42}4344STDMETHOD_(ULONG,AddRef)(THIS)45{46m_pUnk->AddRef();47return ++m_ulRef;48}4950STDMETHOD_(ULONG,Release)(THIS)51{52m_pUnk->Release();5354ULONG ulRef = --m_ulRef;55if( 0 == ulRef )56{57delete this;58return 0;59}60return ulRef;61}62};6364class IDirect3D8;65class IDirect3DDevice8;6667class IDirect3DResource8;68class IDirect3DBaseTexture8;69class IDirect3DTexture8;70class IDirect3DVolumeTexture8;71class IDirect3DCubeTexture8;7273class IDirect3DVertexBuffer8;74class IDirect3DIndexBuffer8;7576class IDirect3DSurface8;77class IDirect3DVolume8;7879class IDirect3DSwapChain8;8081class IDirect3D8 : public IDirect3DUnknown82{83protected:84D3D8Base::IDirect3D8* m_pD3D;85static ThreadSafePointerSet m_List;86public:87IDirect3D8(D3D8Base::IDirect3D8*);8889inline D3D8Base::IDirect3D8* GetDirect3D8() { return m_pD3D; }90static IDirect3D8* GetDirect3D(D3D8Base::IDirect3D8* pD3D);9192/*** IDirect3DUnknown methods ***/93STDMETHOD_(ULONG,Release)(THIS);9495/*** IDirect3D8 methods ***/96STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction);97STDMETHOD_(UINT, GetAdapterCount)(THIS);98STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3D8Base::D3DADAPTER_IDENTIFIER8* pIdentifier);99STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter);100STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,UINT Mode,D3D8Base::D3DDISPLAYMODE* pMode);101STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3D8Base::D3DDISPLAYMODE* pMode);102STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE CheckType,D3D8Base::D3DFORMAT DisplayFormat,D3D8Base::D3DFORMAT BackBufferFormat,BOOL Windowed);103STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,D3D8Base::D3DFORMAT AdapterFormat,DWORD Usage,D3D8Base::D3DRESOURCETYPE RType,D3D8Base::D3DFORMAT CheckFormat);104STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,D3D8Base::D3DFORMAT SurfaceFormat,BOOL Windowed,D3D8Base::D3DMULTISAMPLE_TYPE MultiSampleType);105STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,D3D8Base::D3DFORMAT AdapterFormat,D3D8Base::D3DFORMAT RenderTargetFormat,D3D8Base::D3DFORMAT DepthStencilFormat);106STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,D3D8Base::D3DCAPS8* pCaps);107STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter);108STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3D8Base::D3DPRESENT_PARAMETERS* pPresentationParameters,D3D8Wrapper::IDirect3DDevice8** ppReturnedDeviceInterface);109};110111class IDirect3DDevice8 : public IDirect3DUnknown112{113protected:114D3D8Base::IDirect3DDevice8* m_pDevice;115static ThreadSafePointerSet m_List;116public:117STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj)118{119120return E_FAIL;121}122123static IDirect3DDevice8* GetDirect3DDevice(D3D8Base::IDirect3DDevice8* pDevice);124__forceinline D3D8Base::IDirect3DDevice8* GetD3D8Device() { return m_pDevice; }125126/*** IDirect3DUnknown methods ***/127STDMETHOD_(ULONG,Release)(THIS);128129IDirect3DDevice8(D3D8Base::IDirect3DDevice8*);130131/*** IDirect3DDevice8 methods ***/132STDMETHOD(TestCooperativeLevel)(THIS);133STDMETHOD_(UINT, GetAvailableTextureMem)(THIS);134STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes);135STDMETHOD(GetDirect3D)(THIS_ D3D8Wrapper::IDirect3D8** ppD3D8);136STDMETHOD(GetDeviceCaps)(THIS_ D3D8Base::D3DCAPS8* pCaps);137STDMETHOD(GetDisplayMode)(THIS_ D3D8Base::D3DDISPLAYMODE* pMode);138STDMETHOD(GetCreationParameters)(THIS_ D3D8Base::D3DDEVICE_CREATION_PARAMETERS *pParameters);139STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,D3D8Wrapper::IDirect3DSurface8* pCursorBitmap);140STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags);141STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow);142STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3D8Base::D3DPRESENT_PARAMETERS* pPresentationParameters,D3D8Wrapper::IDirect3DSwapChain8** pSwapChain);143STDMETHOD(Reset)(THIS_ D3D8Base::D3DPRESENT_PARAMETERS* pPresentationParameters);144STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);145STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3D8Base::D3DBACKBUFFER_TYPE Type,D3D8Wrapper::IDirect3DSurface8** ppBackBuffer);146STDMETHOD(GetRasterStatus)(THIS_ D3D8Base::D3DRASTER_STATUS* pRasterStatus);147STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD Flags,CONST D3D8Base::D3DGAMMARAMP* pRamp);148STDMETHOD_(void, GetGammaRamp)(THIS_ D3D8Base::D3DGAMMARAMP* pRamp);149STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3D8Base::D3DFORMAT Format,D3D8Base::D3DPOOL Pool,D3D8Wrapper::IDirect3DTexture8** ppTexture);150STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3D8Base::D3DFORMAT Format,D3D8Base::D3DPOOL Pool,D3D8Wrapper::IDirect3DVolumeTexture8** ppVolumeTexture);151STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3D8Base::D3DFORMAT Format,D3D8Base::D3DPOOL Pool,D3D8Wrapper::IDirect3DCubeTexture8** ppCubeTexture);152STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3D8Base::D3DPOOL Pool,D3D8Wrapper::IDirect3DVertexBuffer8** ppVertexBuffer);153STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3D8Base::D3DFORMAT Format,D3D8Base::D3DPOOL Pool,D3D8Wrapper::IDirect3DIndexBuffer8** ppIndexBuffer);154STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3D8Base::D3DFORMAT Format,D3D8Base::D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,D3D8Wrapper::IDirect3DSurface8** ppSurface);155STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3D8Base::D3DFORMAT Format,D3D8Base::D3DMULTISAMPLE_TYPE MultiSample,D3D8Wrapper::IDirect3DSurface8** ppSurface);156STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3D8Base::D3DFORMAT Format,D3D8Wrapper::IDirect3DSurface8** ppSurface);157STDMETHOD(CopyRects)(THIS_ D3D8Wrapper::IDirect3DSurface8* pSourceSurface,CONST RECT* pSourceRectsArray,UINT cRects,D3D8Wrapper::IDirect3DSurface8* pDestinationSurface,CONST POINT* pDestPointsArray);158STDMETHOD(UpdateTexture)(THIS_ D3D8Wrapper::IDirect3DBaseTexture8* pSourceTexture,D3D8Wrapper::IDirect3DBaseTexture8* pDestinationTexture);159STDMETHOD(GetFrontBuffer)(THIS_ D3D8Wrapper::IDirect3DSurface8* pDestSurface);160STDMETHOD(SetRenderTarget)(THIS_ D3D8Wrapper::IDirect3DSurface8* pRenderTarget,D3D8Wrapper::IDirect3DSurface8* pNewZStencil);161STDMETHOD(GetRenderTarget)(THIS_ D3D8Wrapper::IDirect3DSurface8** ppRenderTarget);162STDMETHOD(GetDepthStencilSurface)(THIS_ D3D8Wrapper::IDirect3DSurface8** ppZStencilSurface);163STDMETHOD(BeginScene)(THIS);164STDMETHOD(EndScene)(THIS);165STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3D8Base::D3DRECT* pRects,DWORD Flags,D3D8Base::D3DCOLOR Color,float Z,DWORD Stencil);166STDMETHOD(SetTransform)(THIS_ D3D8Base::D3DTRANSFORMSTATETYPE State,CONST D3D8Base::D3DMATRIX* pMatrix);167STDMETHOD(GetTransform)(THIS_ D3D8Base::D3DTRANSFORMSTATETYPE State,D3D8Base::D3DMATRIX* pMatrix);168STDMETHOD(MultiplyTransform)(THIS_ D3D8Base::D3DTRANSFORMSTATETYPE,CONST D3D8Base::D3DMATRIX*);169STDMETHOD(SetViewport)(THIS_ CONST D3D8Base::D3DVIEWPORT8* pViewport);170STDMETHOD(GetViewport)(THIS_ D3D8Base::D3DVIEWPORT8* pViewport);171STDMETHOD(SetMaterial)(THIS_ CONST D3D8Base::D3DMATERIAL8* pMaterial);172STDMETHOD(GetMaterial)(THIS_ D3D8Base::D3DMATERIAL8* pMaterial);173STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3D8Base::D3DLIGHT8*);174STDMETHOD(GetLight)(THIS_ DWORD Index,D3D8Base::D3DLIGHT8*);175STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable);176STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable);177STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane);178STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane);179STDMETHOD(SetRenderState)(THIS_ D3D8Base::D3DRENDERSTATETYPE State,DWORD Value);180STDMETHOD(GetRenderState)(THIS_ D3D8Base::D3DRENDERSTATETYPE State,DWORD* pValue);181STDMETHOD(BeginStateBlock)(THIS);182STDMETHOD(EndStateBlock)(THIS_ DWORD* pToken);183STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token);184STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token);185STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token);186STDMETHOD(CreateStateBlock)(THIS_ D3D8Base::D3DSTATEBLOCKTYPE Type,DWORD* pToken);187STDMETHOD(SetClipStatus)(THIS_ CONST D3D8Base::D3DCLIPSTATUS8* pClipStatus);188STDMETHOD(GetClipStatus)(THIS_ D3D8Base::D3DCLIPSTATUS8* pClipStatus);189STDMETHOD(GetTexture)(THIS_ DWORD Stage,D3D8Wrapper::IDirect3DBaseTexture8** ppTexture);190STDMETHOD(SetTexture)(THIS_ DWORD Stage,D3D8Wrapper::IDirect3DBaseTexture8* pTexture);191STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3D8Base::D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue);192STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3D8Base::D3DTEXTURESTAGESTATETYPE Type,DWORD Value);193STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses);194STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void* pDevInfoStruct,DWORD DevInfoStructSize);195STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries);196STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries);197STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber);198STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber);199STDMETHOD(DrawPrimitive)(THIS_ D3D8Base::D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount);200STDMETHOD(DrawIndexedPrimitive)(THIS_ D3D8Base::D3DPRIMITIVETYPE,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount);201STDMETHOD(DrawPrimitiveUP)(THIS_ D3D8Base::D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);202STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3D8Base::D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,CONST void* pIndexData,D3D8Base::D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);203STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,D3D8Wrapper::IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags);204STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage);205STDMETHOD(SetVertexShader)(THIS_ DWORD Handle);206STDMETHOD(GetVertexShader)(THIS_ DWORD* pHandle);207STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle);208STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount);209STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount);210STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData);211STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData);212STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,D3D8Wrapper::IDirect3DVertexBuffer8* pStreamData,UINT Stride);213STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,D3D8Wrapper::IDirect3DVertexBuffer8** ppStreamData,UINT* pStride);214STDMETHOD(SetIndices)(THIS_ D3D8Wrapper::IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex);215STDMETHOD(GetIndices)(THIS_ D3D8Wrapper::IDirect3DIndexBuffer8** ppIndexData,UINT* pBaseVertexIndex);216STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,DWORD* pHandle);217STDMETHOD(SetPixelShader)(THIS_ DWORD Handle);218STDMETHOD(GetPixelShader)(THIS_ DWORD* pHandle);219STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle);220STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount);221STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount);222STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData);223STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3D8Base::D3DRECTPATCH_INFO* pRectPatchInfo);224STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3D8Base::D3DTRIPATCH_INFO* pTriPatchInfo);225STDMETHOD(DeletePatch)(THIS_ UINT Handle);226};227228class IDirect3DSwapChain8 : public IDirect3DUnknown229{230protected:231D3D8Base::IDirect3DSwapChain8* m_pD3D;232static ThreadSafePointerSet m_List;233public:234/*** IUnknown methods ***/235STDMETHOD_(ULONG,Release)(THIS);236237static IDirect3DSwapChain8* GetSwapChain(D3D8Base::IDirect3DSwapChain8* pSwapChain);238inline D3D8Base::IDirect3DSwapChain8* GetSwapChain8() { return m_pD3D; }239240IDirect3DSwapChain8(D3D8Base::IDirect3DSwapChain8*);241242STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);243STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3D8Base::D3DBACKBUFFER_TYPE Type,D3D8Wrapper::IDirect3DSurface8** ppBackBuffer);244};245246class IDirect3DResource8 : public IDirect3DUnknown247{248protected:249D3D8Base::IDirect3DResource8* m_pD3D;250static ThreadSafePointerSet m_List;251public:252/*** IUnknown methods ***/253STDMETHOD_(ULONG,Release)(THIS);254255static IDirect3DResource8* GetResource(D3D8Base::IDirect3DResource8* pSwapChain);256inline D3D8Base::IDirect3DResource8* GetResource() { return m_pD3D; }257258IDirect3DResource8(D3D8Base::IDirect3DResource8*);259260STDMETHOD(GetDevice)(THIS_ D3D8Wrapper::IDirect3DDevice8** ppDevice);261STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);262STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData);263STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid);264STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew);265STDMETHOD_(DWORD, GetPriority)(THIS);266STDMETHOD_(void, PreLoad)(THIS);267STDMETHOD_(D3D8Base::D3DRESOURCETYPE, GetType)(THIS);268};269270271272class IDirect3DBaseTexture8 : public IDirect3DResource8273{274protected:275D3D8Base::IDirect3DBaseTexture8* m_pD3D;276static ThreadSafePointerSet m_List;277public:278279IDirect3DBaseTexture8(D3D8Base::IDirect3DBaseTexture8*);280281inline D3D8Base::IDirect3DBaseTexture8* GetBaseTexture() { return m_pD3D; }282283STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew);284STDMETHOD_(DWORD, GetLOD)(THIS);285STDMETHOD_(DWORD, GetLevelCount)(THIS);286};287288289class IDirect3DTexture8 : public IDirect3DBaseTexture8290{291protected:292D3D8Base::IDirect3DTexture8* m_pD3D;293static ThreadSafePointerSet m_List;294public:295296IDirect3DTexture8(D3D8Base::IDirect3DTexture8*);297298static D3D8Wrapper::IDirect3DTexture8* GetTexture(D3D8Base::IDirect3DTexture8*);299300STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3D8Base::D3DSURFACE_DESC *pDesc);301STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,D3D8Wrapper::IDirect3DSurface8** ppSurfaceLevel);302STDMETHOD(LockRect)(THIS_ UINT Level,D3D8Base::D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);303STDMETHOD(UnlockRect)(THIS_ UINT Level);304STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect);305};306307308309class IDirect3DVolumeTexture8 : public IDirect3DBaseTexture8310{311protected:312D3D8Base::IDirect3DVolumeTexture8* m_pD3D;313static ThreadSafePointerSet m_List;314public:315316IDirect3DVolumeTexture8(D3D8Base::IDirect3DVolumeTexture8*);317318STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3D8Base::D3DVOLUME_DESC *pDesc);319STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,D3D8Wrapper::IDirect3DVolume8** ppVolumeLevel);320STDMETHOD(LockBox)(THIS_ UINT Level,D3D8Base::D3DLOCKED_BOX* pLockedVolume,CONST D3D8Base::D3DBOX* pBox,DWORD Flags);321STDMETHOD(UnlockBox)(THIS_ UINT Level);322STDMETHOD(AddDirtyBox)(THIS_ CONST D3D8Base::D3DBOX* pDirtyBox);323};324325326327class IDirect3DCubeTexture8 : public IDirect3DBaseTexture8328{329protected:330D3D8Base::IDirect3DCubeTexture8* m_pD3D;331static ThreadSafePointerSet m_List;332public:333334IDirect3DCubeTexture8(D3D8Base::IDirect3DCubeTexture8*);335336STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3D8Base::D3DSURFACE_DESC *pDesc);337STDMETHOD(GetCubeMapSurface)(THIS_ D3D8Base::D3DCUBEMAP_FACES FaceType,UINT Level,D3D8Wrapper::IDirect3DSurface8** ppCubeMapSurface);338STDMETHOD(LockRect)(THIS_ D3D8Base::D3DCUBEMAP_FACES FaceType,UINT Level,D3D8Base::D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);339STDMETHOD(UnlockRect)(THIS_ D3D8Base::D3DCUBEMAP_FACES FaceType,UINT Level);340STDMETHOD(AddDirtyRect)(THIS_ D3D8Base::D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect);341};342343344class IDirect3DVertexBuffer8 : public IDirect3DResource8345{346protected:347D3D8Base::IDirect3DVertexBuffer8* m_pD3D;348static ThreadSafePointerSet m_List;349public:350351IDirect3DVertexBuffer8(D3D8Base::IDirect3DVertexBuffer8*);352353inline D3D8Base::IDirect3DVertexBuffer8* GetVertexBuffer() { return m_pD3D; }354355STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags);356STDMETHOD(Unlock)(THIS);357STDMETHOD(GetDesc)(THIS_ D3D8Base::D3DVERTEXBUFFER_DESC *pDesc);358};359360361362class IDirect3DIndexBuffer8 : public IDirect3DResource8363{364protected:365D3D8Base::IDirect3DIndexBuffer8* m_pD3D;366static ThreadSafePointerSet m_List;367public:368369IDirect3DIndexBuffer8(D3D8Base::IDirect3DIndexBuffer8*);370371inline D3D8Base::IDirect3DIndexBuffer8* GetIndexBuffer() { return m_pD3D; }372373STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags);374STDMETHOD(Unlock)(THIS);375STDMETHOD(GetDesc)(THIS_ D3D8Base::D3DINDEXBUFFER_DESC *pDesc);376};377378379380381class IDirect3DSurface8 : public IDirect3DUnknown382{383protected:384D3D8Base::IDirect3DSurface8* m_pD3D;385static ThreadSafePointerSet m_List;386public:387388IDirect3DSurface8(D3D8Base::IDirect3DSurface8*);389static IDirect3DSurface8* GetSurface(D3D8Base::IDirect3DSurface8* pSurface);390inline D3D8Base::IDirect3DSurface8* GetSurface() { return m_pD3D; }391392/*** IDirect3DUnknown methods ***/393STDMETHOD_(ULONG, Release)(THIS);394395STDMETHOD(GetDevice)(THIS_ D3D8Wrapper::IDirect3DDevice8** ppDevice);396STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);397STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData);398STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid);399STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer);400STDMETHOD(GetDesc)(THIS_ D3D8Base::D3DSURFACE_DESC *pDesc);401STDMETHOD(LockRect)(THIS_ D3D8Base::D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);402STDMETHOD(UnlockRect)(THIS);403};404405406407408class IDirect3DVolume8 : public IDirect3DUnknown409{410protected:411D3D8Base::IDirect3DVolume8* m_pD3D;412static ThreadSafePointerSet m_List;413public:414415IDirect3DVolume8(D3D8Base::IDirect3DVolume8*);416417418STDMETHOD(GetDevice)(THIS_ D3D8Wrapper::IDirect3DDevice8** ppDevice);419STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);420STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData);421STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid);422STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer);423STDMETHOD(GetDesc)(THIS_ D3D8Base::D3DVOLUME_DESC *pDesc);424STDMETHOD(LockBox)(THIS_ D3D8Base::D3DLOCKED_BOX * pLockedVolume,CONST D3D8Base::D3DBOX* pBox,DWORD Flags);425STDMETHOD(UnlockBox)(THIS);426};427428429typedef D3D8Base::IDirect3D8* (WINAPI *D3DCREATE)(UINT);430IDirect3D8* WINAPI Direct3DCreate8(UINT Version);431extern IDirect3DDevice8 *last_device;432extern IDirect3DSurface8 *render_surface;433extern void (*rendering_callback)( int );434}435}436437