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
