Hi again, A better patch than previous
Changelog: - beta implementation of HW Vertex Buffer support (using ARB_vertex_buffer_object): locking/unlocking, creation, destruction - some wined3d headers/interface extension Todo - Bind/Unbind on rendering (use exported APIs, see IWineD3DDevice_BindVertexBuffer/IWineD3DDevice_UnbindVertexBuffer) Regards, Raphael
Index: device.c =================================================================== RCS file: /home/wine/wine/dlls/wined3d/device.c,v retrieving revision 1.2 diff -u -r1.2 device.c --- device.c 14 Oct 2004 00:32:04 -0000 1.2 +++ device.c 20 Oct 2004 23:56:45 -0000 @@ -34,30 +34,6 @@ /********************************************************** * IWineD3DDevice implementation follows **********************************************************/ -HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *iface, UINT Size, DWORD Usage, - DWORD FVF, D3DPOOL Pool, IWineD3DVertexBuffer** ppVertexBuffer, HANDLE *sharedHandle) { - - IWineD3DVertexBufferImpl *object; - IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; - - /* Allocate the storage for the device */ - object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DVertexBufferImpl)); - object->lpVtbl = &IWineD3DVertexBuffer_Vtbl; - object->resource.wineD3DDevice= iface; - object->resource.resourceType = D3DRTYPE_VERTEXBUFFER; - object->resource.ref = 1; - object->allocatedMemory = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Size); - object->currentDesc.Usage = Usage; - object->currentDesc.Pool = Pool; - object->currentDesc.FVF = FVF; - object->currentDesc.Size = Size; - - TRACE("(%p) : Size=%d, Usage=%ld, FVF=%lx, Pool=%d - [EMAIL PROTECTED], [EMAIL PROTECTED]", This, Size, Usage, FVF, Pool, object->allocatedMemory, object); - *ppVertexBuffer = (IWineD3DVertexBuffer *)object; - - return D3D_OK; -} - /********************************************************** * IUnknown parts follows @@ -80,7 +56,7 @@ TRACE("(%p) : Releasing from %ld\n", This, This->ref); ref = InterlockedDecrement(&This->ref); if (ref == 0) { - IWineD3D_Release(This->WineD3D); + IWineD3D_Release((IWineD3D*) This->WineD3D); HeapFree(GetProcessHeap(), 0, This); } return ref; @@ -90,10 +66,16 @@ * IWineD3DDevice VTbl follows **********************************************************/ +extern HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *iface, UINT Size, DWORD Usage, DWORD FVF, D3DPOOL Pool, IWineD3DVertexBuffer** ppVertexBuffer, HANDLE *sharedHandle); +extern HRESULT WINAPI IWineD3DDeviceImpl_BindVertexBuffer(IWineD3DDevice *iface, IWineD3DVertexBuffer* pVertexBuffer); +extern HRESULT WINAPI IWineD3DDeviceImpl_UnbindVertexBuffer(IWineD3DDevice *iface, IWineD3DVertexBuffer* pVertexBuffer); + IWineD3DDeviceVtbl IWineD3DDevice_Vtbl = { IWineD3DDeviceImpl_QueryInterface, IWineD3DDeviceImpl_AddRef, IWineD3DDeviceImpl_Release, - IWineD3DDeviceImpl_CreateVertexBuffer + IWineD3DDeviceImpl_CreateVertexBuffer, + IWineD3DDeviceImpl_BindVertexBuffer, + IWineD3DDeviceImpl_UnbindVertexBuffer }; Index: directx.c =================================================================== RCS file: /home/wine/wine/dlls/wined3d/directx.c,v retrieving revision 1.8 diff -u -r1.8 directx.c --- directx.c 8 Oct 2004 20:52:33 -0000 1.8 +++ directx.c 20 Oct 2004 23:56:46 -0000 @@ -362,6 +362,9 @@ gl_info->vs_arb_version = VS_VERSION_11; TRACE_(d3d_caps)(" FOUND: ARB Vertex Shader support - version=%02x\n", gl_info->vs_arb_version); gl_info->supported[ARB_VERTEX_PROGRAM] = TRUE; + } else if (strcmp(ThisExtn, "GL_ARB_vertex_buffer_object") == 0) { + TRACE_(d3d_caps)(" FOUND: ARB Vertex Buffer support\n"); + gl_info->supported[ARB_VERTEX_BUFFER_OBJECT] = TRUE; /** * EXT @@ -372,6 +375,9 @@ } else if (strcmp(ThisExtn, "GL_EXT_paletted_texture") == 0) { /* handle paletted texture extensions */ TRACE_(d3d_caps)(" FOUND: EXT Paletted texture support\n"); gl_info->supported[EXT_PALETTED_TEXTURE] = TRUE; + } else if (strcmp(ThisExtn, "GL_EXT_pixel_buffer_object") == 0) { + TRACE_(d3d_caps)(" FOUND: EXT Pixel Buffer support\n"); + gl_info->supported[EXT_PIXEL_BUFFER_OBJECT] = TRUE; } else if (strcmp(ThisExtn, "GL_EXT_point_parameters") == 0) { TRACE_(d3d_caps)(" FOUND: EXT Point parameters support\n"); gl_info->supported[EXT_POINT_PARAMETERS] = TRUE; @@ -1335,8 +1341,8 @@ /* Set up initial COM information */ object->lpVtbl = &IWineD3DDevice_Vtbl; object->ref = 1; - object->WineD3D = iface; - IWineD3D_AddRef(object->WineD3D); + object->WineD3D = This; + IWineD3D_AddRef((IWineD3D*) object->WineD3D); TRACE("(%p)->(Adptr:%d, DevType: %x, FocusHwnd: %p, BehFlags: %lx, PresParms: %p, RetDevInt: %p)\n", This, Adapter, DeviceType, hFocusWindow, BehaviourFlags, pPresentationParameters, ppReturnedDeviceInterface); Index: vertexbuffer.c =================================================================== RCS file: /home/wine/wine/dlls/wined3d/vertexbuffer.c,v retrieving revision 1.1 diff -u -r1.1 vertexbuffer.c --- vertexbuffer.c 14 Oct 2004 00:32:04 -0000 1.1 +++ vertexbuffer.c 20 Oct 2004 23:56:47 -0000 @@ -25,6 +25,84 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); +/* + switch (Usage) { + case D3DUSAGE_DONOTCLIP: + case D3DUSAGE_POINTS: + case D3DUSAGE_NPATCHES: + case D3DUSAGE_RTPATCHES: + case D3DUSAGE_SOFTWAREPROCESSING: + } +*/ +#undef GL_EXTCALL +#undef GL_SUPPORT +#define GL_INFO(This) ((This)->resource.wineD3DDevice->WineD3D->gl_info) +#define GL_SUPPORT(ExtName) (TRUE == GL_INFO(This).supported[ExtName]) +#define GL_EXTCALL(FuncName) (GL_INFO(This).FuncName) + +void IWineD3DVertexBufferImpl_BindArbHW(IWineD3DVertexBufferImpl* This) { + if (0 == This->vboID || !GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return ; + GL_EXTCALL(glBindProgramARB(GL_ARRAY_BUFFER_ARB, This->vboID)); +} + +void IWineD3DVertexBufferImpl_UnbindArbHW(IWineD3DVertexBufferImpl* This) { + if (0 == This->vboID || !GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return ; + GL_EXTCALL(glBindProgramARB(GL_ARRAY_BUFFER_ARB, 0)); +} + +HRESULT IWineD3DVertexBufferImpl_GenerateArbHW(IWineD3DVertexBufferImpl* This) { + GLenum gl_usage = 0; + DWORD Usage = This->currentDesc.Usage; + + if (!GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return S_OK; + This->vboID = 0; + /** return now if software rendering asked */ + if (Usage & D3DUSAGE_SOFTWAREPROCESSING) return S_OK; + + if (Usage & D3DUSAGE_DYNAMIC) gl_usage |= GL_DYNAMIC_COPY_ARB; + else gl_usage |= GL_STATIC_COPY_ARB; + + GL_EXTCALL(glGenBuffersARB(1, &This->vboID)); + IWineD3DVertexBufferImpl_BindArbHW(This); + GL_EXTCALL(glBufferDataARB(GL_ARRAY_BUFFER_ARB, This->currentDesc.Size, NULL, gl_usage)); + IWineD3DVertexBufferImpl_UnbindArbHW(This); + if (GL_OUT_OF_MEMORY == glGetError()) { + GL_EXTCALL(glDeleteBuffersARB(1, &This->vboID)); + return D3DERR_OUTOFVIDEOMEMORY; + } + return S_OK; +} + +HRESULT IWineD3DVertexBufferImpl_DeleteArbHW(IWineD3DVertexBufferImpl* This) { + if (0 == This->vboID || !GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return S_OK; + GL_EXTCALL(glDeleteBuffersARB(1, &This->vboID)); + return S_OK; +} + +BYTE* IWineD3DVertexBufferImpl_LockArbHW(IWineD3DVertexBufferImpl* This, DWORD iFlags) { + GLenum gl_lock_access = GL_READ_WRITE_ARB; + DWORD Usage = This->currentDesc.Usage; + BYTE* ret = NULL; + + if (0 == This->vboID || !GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return NULL; + + if (iFlags & D3DLOCK_READONLY) gl_lock_access = GL_READ_ONLY_ARB; + else if ((Usage & D3DUSAGE_WRITEONLY) || (iFlags & D3DLOCK_DISCARD)) gl_lock_access = GL_WRITE_ONLY_ARB; + + IWineD3DVertexBufferImpl_BindArbHW(This); + ret = (BYTE*) GL_EXTCALL(glMapBufferARB(GL_ARRAY_BUFFER_ARB, gl_lock_access)); + IWineD3DVertexBufferImpl_UnbindArbHW(This); + return ret; +} + +void IWineD3DVertexBufferImpl_UnlockArbHW(IWineD3DVertexBufferImpl* This) { + if (0 == This->vboID || !GL_SUPPORT(ARB_VERTEX_BUFFER_OBJECT)) return ; + + IWineD3DVertexBufferImpl_BindArbHW(This); + GL_EXTCALL(glUnmapBufferARB(GL_ARRAY_BUFFER_ARB)); + IWineD3DVertexBufferImpl_UnbindArbHW(This); +} + /* ******************************************* IWineD3DVertexBuffer IUnknown parts follow ******************************************* */ @@ -47,6 +125,7 @@ TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref); ref = InterlockedDecrement(&This->resource.ref); if (ref == 0) { + IWineD3DVertexBufferImpl_DeleteArbHW(This); if (NULL != This->allocatedMemory) HeapFree(GetProcessHeap(), 0, This->allocatedMemory); HeapFree(GetProcessHeap(), 0, This); } @@ -72,15 +151,15 @@ return IWineD3DResource_FreePrivateData((IWineD3DResource *)iface, refguid); } -DWORD WINAPI IWineD3DVertexBufferImpl_SetPriority(IWineD3DVertexBuffer *iface, DWORD PriorityNew) { +DWORD WINAPI IWineD3DVertexBufferImpl_SetPriority(IWineD3DVertexBuffer *iface, DWORD PriorityNew) { return IWineD3DResource_SetPriority((IWineD3DResource *)iface, PriorityNew); } -DWORD WINAPI IWineD3DVertexBufferImpl_GetPriority(IWineD3DVertexBuffer *iface) { +DWORD WINAPI IWineD3DVertexBufferImpl_GetPriority(IWineD3DVertexBuffer *iface) { return IWineD3DResource_GetPriority((IWineD3DResource *)iface); } -void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *iface) { +void WINAPI IWineD3DVertexBufferImpl_PreLoad(IWineD3DVertexBuffer *iface) { return IWineD3DResource_PreLoad((IWineD3DResource *)iface); } @@ -94,14 +173,21 @@ ****************************************************** */ HRESULT WINAPI IWineD3DVertexBufferImpl_Lock(IWineD3DVertexBuffer *iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags) { IWineD3DVertexBufferImpl *This = (IWineD3DVertexBufferImpl *)iface; + BYTE* pData = NULL; TRACE("(%p) : returning memory of %p (base:%p,offset:%u)\n", This, This->allocatedMemory + OffsetToLock, This->allocatedMemory, OffsetToLock); /* TODO: check Flags compatibility with This->currentDesc.Usage (see MSDN) */ - *ppbData = This->allocatedMemory + OffsetToLock; + pData = IWineD3DVertexBufferImpl_LockArbHW(This, Flags); + if (NULL == pData) { /// pass in SW mode if ArbHW failed + pData = (This->allocatedMemory + OffsetToLock); + } + *ppbData = pData; return D3D_OK; } HRESULT WINAPI IWineD3DVertexBufferImpl_Unlock(IWineD3DVertexBuffer *iface) { IWineD3DVertexBufferImpl *This = (IWineD3DVertexBufferImpl *)iface; - TRACE("(%p) : stub\n", This); + + TRACE("(%p)\n", This); + IWineD3DVertexBufferImpl_UnlockArbHW(This); return D3D_OK; } HRESULT WINAPI IWineD3DVertexBufferImpl_GetDesc(IWineD3DVertexBuffer *iface, D3DVERTEXBUFFER_DESC *pDesc) { @@ -134,3 +220,37 @@ IWineD3DVertexBufferImpl_Unlock, IWineD3DVertexBufferImpl_GetDesc }; + +HRESULT WINAPI IWineD3DDeviceImpl_CreateVertexBuffer(IWineD3DDevice *iface, UINT Size, DWORD Usage, DWORD FVF, D3DPOOL Pool, IWineD3DVertexBuffer** ppVertexBuffer, HANDLE *sharedHandle) { + HRESULT hr = S_OK; + + IWineD3DVertexBufferImpl *object; + IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; + + /* Allocate the storage for the device */ + object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DVertexBufferImpl)); + object->lpVtbl = &IWineD3DVertexBuffer_Vtbl; + object->resource.wineD3DDevice= This; + object->resource.resourceType = D3DRTYPE_VERTEXBUFFER; + object->resource.ref = 1; + object->allocatedMemory = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Size); + object->currentDesc.Usage = Usage; + object->currentDesc.Pool = Pool; + object->currentDesc.FVF = FVF; + object->currentDesc.Size = Size; + + TRACE("(%p) : Size=%d, Usage=%ld, FVF=%lx, Pool=%d - [EMAIL PROTECTED], [EMAIL PROTECTED]", This, Size, Usage, FVF, Pool, object->allocatedMemory, object); + *ppVertexBuffer = (IWineD3DVertexBuffer *)object; + + hr = IWineD3DVertexBufferImpl_GenerateArbHW(object); + return hr; +} +HRESULT WINAPI IWineD3DDeviceImpl_BindVertexBuffer(IWineD3DDevice *iface, IWineD3DVertexBuffer* pVertexBuffer) { + IWineD3DVertexBufferImpl_BindArbHW((IWineD3DVertexBufferImpl*) pVertexBuffer); + return S_OK; +} + +HRESULT WINAPI IWineD3DDeviceImpl_UnbindVertexBuffer(IWineD3DDevice *iface, IWineD3DVertexBuffer* pVertexBuffer) { + IWineD3DVertexBufferImpl_UnbindArbHW((IWineD3DVertexBufferImpl*) pVertexBuffer); + return S_OK; +} Index: wined3d_private.h =================================================================== RCS file: /home/wine/wine/dlls/wined3d/wined3d_private.h,v retrieving revision 1.9 diff -u -r1.9 wined3d_private.h --- wined3d_private.h 14 Oct 2004 00:32:04 -0000 1.9 +++ wined3d_private.h 20 Oct 2004 23:56:47 -0000 @@ -115,7 +115,7 @@ DWORD ref; /* Note: Ref counting not required */ /* WineD3D Information */ - IWineD3D *WineD3D; + IWineD3DImpl *WineD3D; /* X and GL Information */ HWND win_handle; @@ -152,7 +152,7 @@ DWORD ref; /* Note: Ref counting not required */ /* WineD3DResource Information */ - IWineD3DDevice *wineD3DDevice; + IWineD3DDeviceImpl *wineD3DDevice; D3DRESOURCETYPE resourceType; } IWineD3DResourceClass; @@ -180,6 +180,9 @@ BYTE *allocatedMemory; D3DVERTEXBUFFER_DESC currentDesc; + /** fields for hw vbo use */ + GLuint vboID; + } IWineD3DVertexBufferImpl; extern IWineD3DVertexBufferVtbl IWineD3DVertexBuffer_Vtbl; @@ -221,6 +224,10 @@ UINT functionLength; DWORD usage; DWORD version; + + /** fields for hw vertex shader use */ + GLuint prgId; + /* run time datas */ VSHADERDATA* data; VSHADERINPUTDATA input; @@ -237,7 +244,11 @@ DWORD* function; UINT functionLength; - DWORD version; + DWORD version; + + /** fields for hw pixel shader use */ + GLuint prgId; + /* run time datas */ PSHADERDATA* data; PSHADERINPUTDATA input; Index: wined3d_gl.h =================================================================== RCS file: /home/wine/wine/include/wine/wined3d_gl.h,v retrieving revision 1.3 diff -u -r1.3 wined3d_gl.h --- wined3d_gl.h 6 Oct 2004 00:05:29 -0000 1.3 +++ wined3d_gl.h 20 Oct 2004 23:57:06 -0000 @@ -384,6 +384,53 @@ #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 /* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ #endif +/* GL_ARB_vertex_buffer_object */ +#ifndef GL_ARB_vertex_buffer_object +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +#endif +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +typedef void (APIENTRY * PGLFNBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRY * PGLFNDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRY * PGLFNGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRY * PGLFNISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRY * PGLFNBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); +typedef void (APIENTRY * PGLFNBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); +typedef void (APIENTRY * PGLFNGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); +typedef GLvoid* (APIENTRY * PGLFNMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRY * PGLFNUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRY * PGLFNGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRY * PGLFNGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 @@ -717,9 +764,11 @@ ARB_TEXTURE_MIRRORED_REPEAT, ARB_VERTEX_PROGRAM, ARB_VERTEX_BLEND, + ARB_VERTEX_BUFFER_OBJECT, /* EXT */ EXT_FOG_COORD, EXT_PALETTED_TEXTURE, + EXT_PIXEL_BUFFER_OBJECT, EXT_POINT_PARAMETERS, EXT_SECONDARY_COLOR, EXT_STENCIL_WRAP, @@ -761,6 +810,18 @@ USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3DARB); \ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2DARB); \ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3DARB); \ + /* GL_ARB_vertex_buffer_object */ \ + USE_GL_FUNC(PGLFNBINDBUFFERARBPROC, glBindBufferARB); \ + USE_GL_FUNC(PGLFNDELETEBUFFERSARBPROC, glDeleteBuffersARB); \ + USE_GL_FUNC(PGLFNGENBUFFERSARBPROC, glGenBuffersARB); \ + USE_GL_FUNC(PGLFNISBUFFERARBPROC, glIsBufferARB); \ + USE_GL_FUNC(PGLFNBUFFERDATAARBPROC, glBufferDataARB); \ + USE_GL_FUNC(PGLFNBUFFERSUBDATAARBPROC, glBufferSubDataARB); \ + USE_GL_FUNC(PGLFNGETBUFFERSUBDATAARBPROC, glGetBufferSubDataARB); \ + USE_GL_FUNC(PGLFNMAPBUFFERARBPROC, glMapBufferARB); \ + USE_GL_FUNC(PGLFNUNMAPBUFFERARBPROC, glUnmapBufferARB); \ + USE_GL_FUNC(PGLFNGETBUFFERPARAMETERIVARBPROC, glGetBufferParameterivARB); \ + USE_GL_FUNC(PGLFNGETBUFFERPOINTERVARBPROC, glGetBufferPointervARB); \ /** EXT Extensions **/ \ /* GL_EXT_fog_coord */ \ /* GL_EXT_paletted_texture */ \ Index: wined3d_interface.h =================================================================== RCS file: /home/wine/wine/include/wine/wined3d_interface.h,v retrieving revision 1.11 diff -u -r1.11 wined3d_interface.h --- wined3d_interface.h 14 Oct 2004 00:32:04 -0000 1.11 +++ wined3d_interface.h 20 Oct 2004 23:57:06 -0000 @@ -74,9 +74,12 @@ typedef struct IWineD3DDevice IWineD3DDevice; typedef struct IWineD3DResource IWineD3DResource; typedef struct IWineD3DVertexBuffer IWineD3DVertexBuffer; +typedef struct IWineD3DVertexDeclaration IWineD3DVertexDeclaration; +typedef struct IWineD3DVertexShader IWineD3DVertexShader; +typedef struct IWineD3DPixelShader IWineD3DPixelShader; /***************************************************************************** - * WineD3D interface + * IWineD3D interface */ #define INTERFACE IWineD3D @@ -130,27 +133,55 @@ IWineD3D* WINAPI WineDirect3DCreate(UINT SDKVersion, UINT dxVersion); /***************************************************************************** - * WineD3DDevice interface + * IWineD3DDevice interface */ #define INTERFACE IWineD3DDevice -DECLARE_INTERFACE_(IWineD3DDevice,IUnknown) -{ +DECLARE_INTERFACE_(IWineD3DDevice,IUnknown) +{ /*** IUnknown methods ***/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; - /*** IWineD3D methods ***/ + /*** IWineD3DDevice methods ***/ + /* + STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; + STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; + STDMETHOD(CreateVertexDeclaration)(THIS_ CONST DWORD* pFunction, IWineD3DVertexDeclaration** ppDeclaration) PURE; + STDMETHOD(SetVertexDeclaration)(THIS_ IWineD3DVertexDeclaration* pDeclaration) PURE; + STDMETHOD(GetVertexDeclaration)(THIS_ IWineD3DVertexDeclaration** ppDeclaration) PURE; + STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IWineD3DVertexShader** ppShader) PURE; + STDMETHOD(SetVertexShader)(THIS_ IWineD3DVertexShader* pShader) PURE; + STDMETHOD(GetVertexShader)(THIS_ IWineD3DVertexShader** ppShader) PURE; + STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IWineD3DPixelShader** ppShader) PURE; + STDMETHOD(SetPixelShader)(THIS_ IWineD3DPixelShader* pShader) PURE; + STDMETHOD(GetPixelShader)(THIS_ IWineD3DPixelShader** ppShader) PURE; + */ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IWineD3DVertexBuffer **ppVertexBuffer, HANDLE *sharedHandle) PURE; + STDMETHOD(BindVertexBuffer)(THIS_ IWineD3DVertexBuffer *pVertexBuffer) PURE; + STDMETHOD(UnbindVertexBuffer)(THIS_ IWineD3DVertexBuffer *pVertexBuffer) PURE; }; #undef INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ -#define IWineD3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IWineD3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IWineD3DDevice_Release(p) (p)->lpVtbl->Release(p) +#define IWineD3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IWineD3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IWineD3DDevice_Release(p) (p)->lpVtbl->Release(p) /*** IWineD3DDevice methods ***/ -#define IWineD3DDevice_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) +#define IWineD3DDevice_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) +#define IWineD3DDevice_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) +#define IWineD3DDevice_CreateVertexDeclaration(p,a,r) (p)->lpVtbl->CreateVertexDeclaration(p,a,r) +#define IWineD3DDevice_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) +#define IWineD3DDevice_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) +#define IWineD3DDevice_CreateVertexShader(p,a,r) (p)->lpVtbl->CreateVertexShader(p,a,r) +#define IWineD3DDevice_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) +#define IWineD3DDevice_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) +#define IWineD3DDevice_CreatePixelShader(p,a,r) (p)->lpVtbl->CreatePixelShader(p,a,r) +#define IWineD3DDevice_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) +#define IWineD3DDevice_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) +#define IWineD3DDevice_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) +#define IWineD3DDevice_BindVertexBuffer(p,a) (p)->lpVtbl->BindVertexBuffer(p,a) +#define IWineD3DDevice_UnbindVertexBuffer(p,a) (p)->lpVtbl->UnbindVertexBuffer(p,a) #endif /*****************************************************************************
pgpTichqnzXcA.pgp
Description: PGP signature