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.
diff --git a/graphics/d3dexecutebuffer.c b/graphics/d3dexecutebuffer.c
index 0b3d21e..4539ec1 100644
--- a/graphics/d3dexecutebuffer.c
+++ b/graphics/d3dexecutebuffer.c
@@ -46,7 +46,7 @@
D3DVALUE v;
} OGL_LVertex;
-static IDirect3DExecuteBuffer_VTable executebuffer_vtable;
+static ICOM_VTABLE(IDirect3DExecuteBuffer) executebuffer_vtable;
/*******************************************************************************
* ExecuteBuffer static functions
@@ -169,18 +169,20 @@
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 @@
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 @@
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 @@
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 @@
break;
}
- switch (lpBuff->vertex_type) {
+ switch (ilpBuff->vertex_type) {
case D3DVT_VERTEX:
TRIANGLE_LOOP(DO_VERTEX);
break;
@@ -397,7 +399,7 @@
/* 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 @@
/* 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 @@
}
} 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 @@
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 @@
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 @@
for (i = 0; i < count; i++) {
LPD3DSTATUS ci = (LPD3DSTATUS) instr;
- lpBuff->data.dsStatus = *ci;
+ ilpBuff->data.dsStatus = *ci;
instr += size;
}
@@ -658,11 +660,11 @@
/*******************************************************************************
* 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 @@
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 @@
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 @@
/*******************************************************************************
* 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 */