Tidy up some formatting, improve error handling and error logging and
fix a couple of spelling mistakes.
This commit is contained in:
parent
6c2eae254f
commit
45033446bb
|
@ -450,8 +450,6 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateStateBlock(IWineD3DDevice* iface, WINED3
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise, might as well set the whole state block to the appropriate values */
|
|
||||||
IWineD3DDevice_AddRef(iface);
|
|
||||||
/* Otherwise, might as well set the whole state block to the appropriate values */
|
/* Otherwise, might as well set the whole state block to the appropriate values */
|
||||||
if ( This->stateBlock != NULL) {
|
if ( This->stateBlock != NULL) {
|
||||||
memcpy(object, This->stateBlock, sizeof(IWineD3DStateBlockImpl));
|
memcpy(object, This->stateBlock, sizeof(IWineD3DStateBlockImpl));
|
||||||
|
@ -467,10 +465,12 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateStateBlock(IWineD3DDevice* iface, WINED3
|
||||||
TRACE("Updating changed flags appropriate for type %d\n", Type);
|
TRACE("Updating changed flags appropriate for type %d\n", Type);
|
||||||
|
|
||||||
if (Type == WINED3DSBT_ALL) {
|
if (Type == WINED3DSBT_ALL) {
|
||||||
|
|
||||||
TRACE("ALL => Pretend everything has changed\n");
|
TRACE("ALL => Pretend everything has changed\n");
|
||||||
memset(&object->changed, TRUE, sizeof(This->stateBlock->changed));
|
memset(&object->changed, TRUE, sizeof(This->stateBlock->changed));
|
||||||
} else if (Type == WINED3DSBT_PIXELSTATE) {
|
} else if (Type == WINED3DSBT_PIXELSTATE) {
|
||||||
|
|
||||||
|
TRACE("PIXELSTATE => Pretend all pixel shates have changed\n");
|
||||||
memset(&object->changed, FALSE, sizeof(This->stateBlock->changed));
|
memset(&object->changed, FALSE, sizeof(This->stateBlock->changed));
|
||||||
/* TODO: Pixel Shader Constants */
|
/* TODO: Pixel Shader Constants */
|
||||||
object->changed.pixelShader = TRUE;
|
object->changed.pixelShader = TRUE;
|
||||||
|
@ -480,6 +480,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateStateBlock(IWineD3DDevice* iface, WINED3
|
||||||
|
|
||||||
} else if (Type == WINED3DSBT_VERTEXSTATE) {
|
} else if (Type == WINED3DSBT_VERTEXSTATE) {
|
||||||
|
|
||||||
|
TRACE("VERTEXSTATE => Pretend all vertex shates have changed\n");
|
||||||
memset(&object->changed, FALSE, sizeof(This->stateBlock->changed));
|
memset(&object->changed, FALSE, sizeof(This->stateBlock->changed));
|
||||||
/* TODO: Vertex Shader Constants */
|
/* TODO: Vertex Shader Constants */
|
||||||
object->changed.vertexShader = TRUE;
|
object->changed.vertexShader = TRUE;
|
||||||
|
@ -755,15 +756,15 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateTexture(IWineD3DDevice *iface, UINT Wid
|
||||||
{
|
{
|
||||||
/* use the callback to create the texture surface */
|
/* use the callback to create the texture surface */
|
||||||
hr = D3DCB_CreateSurface(This->parent, tmpW, tmpH, Format, Usage, Pool, i, &object->surfaces[i],NULL);
|
hr = D3DCB_CreateSurface(This->parent, tmpW, tmpH, Format, Usage, Pool, i, &object->surfaces[i],NULL);
|
||||||
if(hr!= D3D_OK) {
|
if (hr!= D3D_OK) {
|
||||||
int j;
|
int j;
|
||||||
FIXME("Failed to create surface %p \n",object);
|
FIXME("Failed to create surface %p \n",object);
|
||||||
/* clean up */
|
/* clean up */
|
||||||
for(j = 0 ; j < i ; j++) {
|
for (j = 0 ; j < i ; j++) {
|
||||||
IWineD3DSurface_Release(object->surfaces[j]);
|
IWineD3DSurface_Release(object->surfaces[j]);
|
||||||
}
|
}
|
||||||
/* heap free object */
|
/* heap free object */
|
||||||
HeapFree(GetProcessHeap(),0,object);
|
HeapFree(GetProcessHeap(), 0, object);
|
||||||
|
|
||||||
*ppTexture = NULL;
|
*ppTexture = NULL;
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -784,8 +785,8 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateVolumeTexture(IWineD3DDevice *iface,
|
||||||
UINT Width, UINT Height, UINT Depth,
|
UINT Width, UINT Height, UINT Depth,
|
||||||
UINT Levels, DWORD Usage,
|
UINT Levels, DWORD Usage,
|
||||||
WINED3DFORMAT Format, D3DPOOL Pool,
|
WINED3DFORMAT Format, D3DPOOL Pool,
|
||||||
IWineD3DVolumeTexture** ppVolumeTexture,
|
IWineD3DVolumeTexture **ppVolumeTexture,
|
||||||
HANDLE* pSharedHandle, IUnknown *parent,
|
HANDLE *pSharedHandle, IUnknown *parent,
|
||||||
D3DCB_CREATEVOLUMEFN D3DCB_CreateVolume) {
|
D3DCB_CREATEVOLUMEFN D3DCB_CreateVolume) {
|
||||||
|
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
|
@ -877,13 +878,13 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateVolume(IWineD3DDevice *iface,
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface, UINT EdgeLength,
|
HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface, UINT EdgeLength,
|
||||||
UINT Levels, DWORD Usage,
|
UINT Levels, DWORD Usage,
|
||||||
WINED3DFORMAT Format, D3DPOOL Pool,
|
WINED3DFORMAT Format, D3DPOOL Pool,
|
||||||
IWineD3DCubeTexture** ppCubeTexture,
|
IWineD3DCubeTexture **ppCubeTexture,
|
||||||
HANDLE* pSharedHandle, IUnknown *parent,
|
HANDLE *pSharedHandle, IUnknown *parent,
|
||||||
D3DCB_CREATESURFACEFN D3DCB_CreateSurface) {
|
D3DCB_CREATESURFACEFN D3DCB_CreateSurface) {
|
||||||
|
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DCubeTextureImpl *object; /** NOTE: impl ref allowed since this is a create function **/
|
IWineD3DCubeTextureImpl *object; /** NOTE: impl ref allowed since this is a create function **/
|
||||||
unsigned int i,j;
|
unsigned int i, j;
|
||||||
UINT tmpW;
|
UINT tmpW;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
unsigned int pow2EdgeLength = EdgeLength;
|
unsigned int pow2EdgeLength = EdgeLength;
|
||||||
|
@ -893,14 +894,13 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface, UINT
|
||||||
|
|
||||||
TRACE("(%p) Create Cube Texture \n", This);
|
TRACE("(%p) Create Cube Texture \n", This);
|
||||||
|
|
||||||
object->edgeLength = EdgeLength;
|
|
||||||
|
|
||||||
/** Non-power2 support **/
|
/** Non-power2 support **/
|
||||||
|
|
||||||
/* Find the nearest pow2 match */
|
/* Find the nearest pow2 match */
|
||||||
pow2EdgeLength = 1;
|
pow2EdgeLength = 1;
|
||||||
while (pow2EdgeLength < EdgeLength) pow2EdgeLength <<= 1;
|
while (pow2EdgeLength < EdgeLength) pow2EdgeLength <<= 1;
|
||||||
|
|
||||||
|
object->edgeLength = EdgeLength;
|
||||||
/* TODO: support for native non-power 2 */
|
/* TODO: support for native non-power 2 */
|
||||||
/* Precalculated scaling for 'faked' non power of two texture coords */
|
/* Precalculated scaling for 'faked' non power of two texture coords */
|
||||||
object->pow2scalingFactor = ((float)EdgeLength) / ((float)pow2EdgeLength);
|
object->pow2scalingFactor = ((float)EdgeLength) / ((float)pow2EdgeLength);
|
||||||
|
@ -910,7 +910,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface, UINT
|
||||||
object->baseTexture.levels++;
|
object->baseTexture.levels++;
|
||||||
tmpW = EdgeLength;
|
tmpW = EdgeLength;
|
||||||
while (tmpW > 1) {
|
while (tmpW > 1) {
|
||||||
tmpW = max(1, tmpW / 2);
|
tmpW = max(1, tmpW >> 1);
|
||||||
object->baseTexture.levels++;
|
object->baseTexture.levels++;
|
||||||
}
|
}
|
||||||
TRACE("Calculated levels = %d\n", object->baseTexture.levels);
|
TRACE("Calculated levels = %d\n", object->baseTexture.levels);
|
||||||
|
@ -930,11 +930,11 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface, UINT
|
||||||
/* clean up */
|
/* clean up */
|
||||||
int k;
|
int k;
|
||||||
int l;
|
int l;
|
||||||
for (l=0;l<j;l++) {
|
for (l = 0; l < j; l++) {
|
||||||
IWineD3DSurface_Release(object->surfaces[j][i]);
|
IWineD3DSurface_Release(object->surfaces[j][i]);
|
||||||
}
|
}
|
||||||
for (k=0;k<i;k++) {
|
for (k = 0; k < i; k++) {
|
||||||
for (l=0;l<6;l++) {
|
for (l = 0; l < 6; l++) {
|
||||||
IWineD3DSurface_Release(object->surfaces[l][j]);
|
IWineD3DSurface_Release(object->surfaces[l][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -959,7 +959,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateQuery(IWineD3DDevice *iface, WINED3DQUER
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DQueryImpl *object; /*NOTE: impl ref allowed since this is a create function */
|
IWineD3DQueryImpl *object; /*NOTE: impl ref allowed since this is a create function */
|
||||||
|
|
||||||
if(NULL == ppQuery) {
|
if (NULL == ppQuery) {
|
||||||
/* Just a check to see if we support this type of query */
|
/* Just a check to see if we support this type of query */
|
||||||
HRESULT hr = D3DERR_NOTAVAILABLE;
|
HRESULT hr = D3DERR_NOTAVAILABLE;
|
||||||
/* Lie and say everything is good (we can return ok fake data from a stub) */
|
/* Lie and say everything is good (we can return ok fake data from a stub) */
|
||||||
|
@ -1074,7 +1074,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
TRACE("Using x visual ID : %ld\n", template.visualid);
|
TRACE("Using x visual ID : %ld\n", template.visualid);
|
||||||
TRACE(" visual info: %p\n", object->visInfo);
|
TRACE(" visual info: %p\n", object->visInfo);
|
||||||
TRACE(" num items : %d\n", num);
|
TRACE(" num items : %d\n", num);
|
||||||
for(n = 0;n < num; n++) {
|
for (n = 0;n < num; n++) {
|
||||||
TRACE("=====item=====: %d\n", n + 1);
|
TRACE("=====item=====: %d\n", n + 1);
|
||||||
TRACE(" visualid : %ld\n", object->visInfo[n].visualid);
|
TRACE(" visualid : %ld\n", object->visInfo[n].visualid);
|
||||||
TRACE(" screen : %d\n", object->visInfo[n].screen);
|
TRACE(" screen : %d\n", object->visInfo[n].screen);
|
||||||
|
@ -1255,7 +1255,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
&object->backBuffer,
|
&object->backBuffer,
|
||||||
NULL /* pShared (always null)*/);
|
NULL /* pShared (always null)*/);
|
||||||
if (object->backBuffer != NULL)
|
if (object->backBuffer != NULL)
|
||||||
IWineD3DSurface_SetContainer(object->backBuffer, (IUnknown *)object);
|
IWineD3DSurface_SetContainer(object->backBuffer, (IUnknown *)object);
|
||||||
|
|
||||||
/* Under directX swapchains share the depth stencil, so only create one depth-stencil */
|
/* Under directX swapchains share the depth stencil, so only create one depth-stencil */
|
||||||
if (pPresentationParameters->EnableAutoDepthStencil) {
|
if (pPresentationParameters->EnableAutoDepthStencil) {
|
||||||
|
@ -1291,14 +1291,14 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
object->drawable = object->win;
|
object->drawable = object->win;
|
||||||
object->render_ctx = object->glCtx;
|
object->render_ctx = object->glCtx;
|
||||||
|
|
||||||
if(hr == D3D_OK) {
|
if (hr == D3D_OK) {
|
||||||
/*********************
|
/*********************
|
||||||
* Setup some defaults and clear down the buffers
|
* Setup some defaults and clear down the buffers
|
||||||
*******************/
|
*******************/
|
||||||
ENTER_GL();
|
ENTER_GL();
|
||||||
/** save current context and drawable **/
|
/** save current context and drawable **/
|
||||||
oldContext = glXGetCurrentContext();
|
oldContext = glXGetCurrentContext();
|
||||||
oldDrawable = glXGetCurrentDrawable();
|
oldDrawable = glXGetCurrentDrawable();
|
||||||
|
|
||||||
TRACE("Activating context (display %p context %p drawable %ld)!\n", object->display, object->glCtx, object->win);
|
TRACE("Activating context (display %p context %p drawable %ld)!\n", object->display, object->glCtx, object->win);
|
||||||
if (glXMakeCurrent(object->display, object->win, object->glCtx) == False) {
|
if (glXMakeCurrent(object->display, object->win, object->glCtx) == False) {
|
||||||
|
@ -1332,7 +1332,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
|
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
|
||||||
checkGLcall("glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);");
|
checkGLcall("glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);");
|
||||||
|
|
||||||
/* switch back to the original context (unless it was zero)*/
|
/* switch back to the original context (if there was one)*/
|
||||||
if (This->swapchains != NULL) {
|
if (This->swapchains != NULL) {
|
||||||
/** TODO: restore the context and drawable **/
|
/** TODO: restore the context and drawable **/
|
||||||
glXMakeCurrent(object->display, oldDrawable, oldContext);
|
glXMakeCurrent(object->display, oldDrawable, oldContext);
|
||||||
|
@ -1343,7 +1343,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
{ /* Finally add the swapchain to the end of the devices' swapchain list */
|
{ /* Finally add the swapchain to the end of the devices' swapchain list */
|
||||||
SwapChainList **nextSwapchain;
|
SwapChainList **nextSwapchain;
|
||||||
nextSwapchain = &This->swapchains;
|
nextSwapchain = &This->swapchains;
|
||||||
while(*nextSwapchain != NULL) {
|
while (*nextSwapchain != NULL) {
|
||||||
nextSwapchain = &((*nextSwapchain)->next);
|
nextSwapchain = &((*nextSwapchain)->next);
|
||||||
}
|
}
|
||||||
(*nextSwapchain) = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*This->swapchains));
|
(*nextSwapchain) = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*This->swapchains));
|
||||||
|
@ -1355,14 +1355,14 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
if (object->frontBuffer) {
|
if (object->frontBuffer) {
|
||||||
IWineD3DSurface_GetParent(object->frontBuffer, &bufferParent);
|
IWineD3DSurface_GetParent(object->frontBuffer, &bufferParent);
|
||||||
IUnknown_Release(bufferParent); /* once for the get parent */
|
IUnknown_Release(bufferParent); /* once for the get parent */
|
||||||
if(IUnknown_Release(bufferParent) > 0) {
|
if (IUnknown_Release(bufferParent) > 0) {
|
||||||
FIXME("(%p) Something's still holding the front buffer\n",This);
|
FIXME("(%p) Something's still holding the front buffer\n",This);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (object->backBuffer) {
|
if (object->backBuffer) {
|
||||||
IWineD3DSurface_GetParent(object->backBuffer, &bufferParent);
|
IWineD3DSurface_GetParent(object->backBuffer, &bufferParent);
|
||||||
IUnknown_Release(bufferParent); /* once for the get parent */
|
IUnknown_Release(bufferParent); /* once for the get parent */
|
||||||
if(IUnknown_Release(bufferParent) > 0) {
|
if (IUnknown_Release(bufferParent) > 0) {
|
||||||
FIXME("(%p) Something's still holding the back buffer\n",This);
|
FIXME("(%p) Something's still holding the back buffer\n",This);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1378,6 +1378,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevice* ifac
|
||||||
HeapFree(GetProcessHeap(), 0, object);
|
HeapFree(GetProcessHeap(), 0, object);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1732,29 +1733,44 @@ HRESULT WINAPI IWineD3DDeviceImpl_MultiplyTransform(IWineD3DDevice *iface, D3DTR
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copied from ddraw code: */
|
/* Copied from ddraw code: */
|
||||||
temp.u.s._11 = (mat->u.s._11 * pMatrix->u.s._11) + (mat->u.s._21 * pMatrix->u.s._12) + (mat->u.s._31 * pMatrix->u.s._13) + (mat->u.s._41 * pMatrix->u.s._14);
|
temp.u.s._11 = (mat->u.s._11 * pMatrix->u.s._11) + (mat->u.s._21 * pMatrix->u.s._12) +
|
||||||
temp.u.s._21 = (mat->u.s._11 * pMatrix->u.s._21) + (mat->u.s._21 * pMatrix->u.s._22) + (mat->u.s._31 * pMatrix->u.s._23) + (mat->u.s._41 * pMatrix->u.s._24);
|
(mat->u.s._31 * pMatrix->u.s._13) + (mat->u.s._41 * pMatrix->u.s._14);
|
||||||
temp.u.s._31 = (mat->u.s._11 * pMatrix->u.s._31) + (mat->u.s._21 * pMatrix->u.s._32) + (mat->u.s._31 * pMatrix->u.s._33) + (mat->u.s._41 * pMatrix->u.s._34);
|
temp.u.s._21 = (mat->u.s._11 * pMatrix->u.s._21) + (mat->u.s._21 * pMatrix->u.s._22) +
|
||||||
temp.u.s._41 = (mat->u.s._11 * pMatrix->u.s._41) + (mat->u.s._21 * pMatrix->u.s._42) + (mat->u.s._31 * pMatrix->u.s._43) + (mat->u.s._41 * pMatrix->u.s._44);
|
(mat->u.s._31 * pMatrix->u.s._23) + (mat->u.s._41 * pMatrix->u.s._24);
|
||||||
|
temp.u.s._31 = (mat->u.s._11 * pMatrix->u.s._31) + (mat->u.s._21 * pMatrix->u.s._32) +
|
||||||
|
(mat->u.s._31 * pMatrix->u.s._33) + (mat->u.s._41 * pMatrix->u.s._34);
|
||||||
|
temp.u.s._41 = (mat->u.s._11 * pMatrix->u.s._41) + (mat->u.s._21 * pMatrix->u.s._42) +
|
||||||
|
(mat->u.s._31 * pMatrix->u.s._43) + (mat->u.s._41 * pMatrix->u.s._44);
|
||||||
|
|
||||||
temp.u.s._12 = (mat->u.s._12 * pMatrix->u.s._11) + (mat->u.s._22 * pMatrix->u.s._12) + (mat->u.s._32 * pMatrix->u.s._13) + (mat->u.s._42 * pMatrix->u.s._14);
|
temp.u.s._12 = (mat->u.s._12 * pMatrix->u.s._11) + (mat->u.s._22 * pMatrix->u.s._12) +
|
||||||
temp.u.s._22 = (mat->u.s._12 * pMatrix->u.s._21) + (mat->u.s._22 * pMatrix->u.s._22) + (mat->u.s._32 * pMatrix->u.s._23) + (mat->u.s._42 * pMatrix->u.s._24);
|
(mat->u.s._32 * pMatrix->u.s._13) + (mat->u.s._42 * pMatrix->u.s._14);
|
||||||
temp.u.s._32 = (mat->u.s._12 * pMatrix->u.s._31) + (mat->u.s._22 * pMatrix->u.s._32) + (mat->u.s._32 * pMatrix->u.s._33) + (mat->u.s._42 * pMatrix->u.s._34);
|
temp.u.s._22 = (mat->u.s._12 * pMatrix->u.s._21) + (mat->u.s._22 * pMatrix->u.s._22) +
|
||||||
temp.u.s._42 = (mat->u.s._12 * pMatrix->u.s._41) + (mat->u.s._22 * pMatrix->u.s._42) + (mat->u.s._32 * pMatrix->u.s._43) + (mat->u.s._42 * pMatrix->u.s._44);
|
(mat->u.s._32 * pMatrix->u.s._23) + (mat->u.s._42 * pMatrix->u.s._24);
|
||||||
|
temp.u.s._32 = (mat->u.s._12 * pMatrix->u.s._31) + (mat->u.s._22 * pMatrix->u.s._32) +
|
||||||
|
(mat->u.s._32 * pMatrix->u.s._33) + (mat->u.s._42 * pMatrix->u.s._34);
|
||||||
|
temp.u.s._42 = (mat->u.s._12 * pMatrix->u.s._41) + (mat->u.s._22 * pMatrix->u.s._42) +
|
||||||
|
(mat->u.s._32 * pMatrix->u.s._43) + (mat->u.s._42 * pMatrix->u.s._44);
|
||||||
|
|
||||||
temp.u.s._13 = (mat->u.s._13 * pMatrix->u.s._11) + (mat->u.s._23 * pMatrix->u.s._12) + (mat->u.s._33 * pMatrix->u.s._13) + (mat->u.s._43 * pMatrix->u.s._14);
|
temp.u.s._13 = (mat->u.s._13 * pMatrix->u.s._11) + (mat->u.s._23 * pMatrix->u.s._12) +
|
||||||
temp.u.s._23 = (mat->u.s._13 * pMatrix->u.s._21) + (mat->u.s._23 * pMatrix->u.s._22) + (mat->u.s._33 * pMatrix->u.s._23) + (mat->u.s._43 * pMatrix->u.s._24);
|
(mat->u.s._33 * pMatrix->u.s._13) + (mat->u.s._43 * pMatrix->u.s._14);
|
||||||
temp.u.s._33 = (mat->u.s._13 * pMatrix->u.s._31) + (mat->u.s._23 * pMatrix->u.s._32) + (mat->u.s._33 * pMatrix->u.s._33) + (mat->u.s._43 * pMatrix->u.s._34);
|
temp.u.s._23 = (mat->u.s._13 * pMatrix->u.s._21) + (mat->u.s._23 * pMatrix->u.s._22) +
|
||||||
temp.u.s._43 = (mat->u.s._13 * pMatrix->u.s._41) + (mat->u.s._23 * pMatrix->u.s._42) + (mat->u.s._33 * pMatrix->u.s._43) + (mat->u.s._43 * pMatrix->u.s._44);
|
(mat->u.s._33 * pMatrix->u.s._23) + (mat->u.s._43 * pMatrix->u.s._24);
|
||||||
|
temp.u.s._33 = (mat->u.s._13 * pMatrix->u.s._31) + (mat->u.s._23 * pMatrix->u.s._32) +
|
||||||
|
(mat->u.s._33 * pMatrix->u.s._33) + (mat->u.s._43 * pMatrix->u.s._34);
|
||||||
|
temp.u.s._43 = (mat->u.s._13 * pMatrix->u.s._41) + (mat->u.s._23 * pMatrix->u.s._42) +
|
||||||
|
(mat->u.s._33 * pMatrix->u.s._43) + (mat->u.s._43 * pMatrix->u.s._44);
|
||||||
|
|
||||||
temp.u.s._14 = (mat->u.s._14 * pMatrix->u.s._11) + (mat->u.s._24 * pMatrix->u.s._12) + (mat->u.s._34 * pMatrix->u.s._13) + (mat->u.s._44 * pMatrix->u.s._14);
|
temp.u.s._14 = (mat->u.s._14 * pMatrix->u.s._11) + (mat->u.s._24 * pMatrix->u.s._12) +
|
||||||
temp.u.s._24 = (mat->u.s._14 * pMatrix->u.s._21) + (mat->u.s._24 * pMatrix->u.s._22) + (mat->u.s._34 * pMatrix->u.s._23) + (mat->u.s._44 * pMatrix->u.s._24);
|
(mat->u.s._34 * pMatrix->u.s._13) + (mat->u.s._44 * pMatrix->u.s._14);
|
||||||
temp.u.s._34 = (mat->u.s._14 * pMatrix->u.s._31) + (mat->u.s._24 * pMatrix->u.s._32) + (mat->u.s._34 * pMatrix->u.s._33) + (mat->u.s._44 * pMatrix->u.s._34);
|
temp.u.s._24 = (mat->u.s._14 * pMatrix->u.s._21) + (mat->u.s._24 * pMatrix->u.s._22) +
|
||||||
temp.u.s._44 = (mat->u.s._14 * pMatrix->u.s._41) + (mat->u.s._24 * pMatrix->u.s._42) + (mat->u.s._34 * pMatrix->u.s._43) + (mat->u.s._44 * pMatrix->u.s._44);
|
(mat->u.s._34 * pMatrix->u.s._23) + (mat->u.s._44 * pMatrix->u.s._24);
|
||||||
|
temp.u.s._34 = (mat->u.s._14 * pMatrix->u.s._31) + (mat->u.s._24 * pMatrix->u.s._32) +
|
||||||
|
(mat->u.s._34 * pMatrix->u.s._33) + (mat->u.s._44 * pMatrix->u.s._34);
|
||||||
|
temp.u.s._44 = (mat->u.s._14 * pMatrix->u.s._41) + (mat->u.s._24 * pMatrix->u.s._42) +
|
||||||
|
(mat->u.s._34 * pMatrix->u.s._43) + (mat->u.s._44 * pMatrix->u.s._44);
|
||||||
|
|
||||||
/* Apply change via set transform - will reapply to eg. lights this way */
|
/* Apply change via set transform - will reapply to eg. lights this way */
|
||||||
IWineD3DDeviceImpl_SetTransform(iface, State, &temp);
|
return IWineD3DDeviceImpl_SetTransform(iface, State, &temp);
|
||||||
return D3D_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****
|
/*****
|
||||||
|
@ -1973,32 +1989,32 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetLightEnable(IWineD3DDevice *iface, DWORD In
|
||||||
/* Warning - untested code :-) Prob safe to change fixme to a trace but
|
/* Warning - untested code :-) Prob safe to change fixme to a trace but
|
||||||
wait until someone confirms it seems to work! */
|
wait until someone confirms it seems to work! */
|
||||||
TRACE("Light enabled requested but light not defined, so defining one!\n");
|
TRACE("Light enabled requested but light not defined, so defining one!\n");
|
||||||
lightParms.Type = D3DLIGHT_DIRECTIONAL;
|
lightParms.Type = D3DLIGHT_DIRECTIONAL;
|
||||||
lightParms.Diffuse.r = 1.0;
|
lightParms.Diffuse.r = 1.0;
|
||||||
lightParms.Diffuse.g = 1.0;
|
lightParms.Diffuse.g = 1.0;
|
||||||
lightParms.Diffuse.b = 1.0;
|
lightParms.Diffuse.b = 1.0;
|
||||||
lightParms.Diffuse.a = 0.0;
|
lightParms.Diffuse.a = 0.0;
|
||||||
lightParms.Specular.r = 0.0;
|
lightParms.Specular.r = 0.0;
|
||||||
lightParms.Specular.g = 0.0;
|
lightParms.Specular.g = 0.0;
|
||||||
lightParms.Specular.b = 0.0;
|
lightParms.Specular.b = 0.0;
|
||||||
lightParms.Specular.a = 0.0;
|
lightParms.Specular.a = 0.0;
|
||||||
lightParms.Ambient.r = 0.0;
|
lightParms.Ambient.r = 0.0;
|
||||||
lightParms.Ambient.g = 0.0;
|
lightParms.Ambient.g = 0.0;
|
||||||
lightParms.Ambient.b = 0.0;
|
lightParms.Ambient.b = 0.0;
|
||||||
lightParms.Ambient.a = 0.0;
|
lightParms.Ambient.a = 0.0;
|
||||||
lightParms.Position.x = 0.0;
|
lightParms.Position.x = 0.0;
|
||||||
lightParms.Position.y = 0.0;
|
lightParms.Position.y = 0.0;
|
||||||
lightParms.Position.z = 0.0;
|
lightParms.Position.z = 0.0;
|
||||||
lightParms.Direction.x = 0.0;
|
lightParms.Direction.x = 0.0;
|
||||||
lightParms.Direction.y = 0.0;
|
lightParms.Direction.y = 0.0;
|
||||||
lightParms.Direction.z = 1.0;
|
lightParms.Direction.z = 1.0;
|
||||||
lightParms.Range = 0.0;
|
lightParms.Range = 0.0;
|
||||||
lightParms.Falloff = 0.0;
|
lightParms.Falloff = 0.0;
|
||||||
lightParms.Attenuation0 = 0.0;
|
lightParms.Attenuation0 = 0.0;
|
||||||
lightParms.Attenuation1 = 0.0;
|
lightParms.Attenuation1 = 0.0;
|
||||||
lightParms.Attenuation2 = 0.0;
|
lightParms.Attenuation2 = 0.0;
|
||||||
lightParms.Theta = 0.0;
|
lightParms.Theta = 0.0;
|
||||||
lightParms.Phi = 0.0;
|
lightParms.Phi = 0.0;
|
||||||
IWineD3DDeviceImpl_SetLight(iface, Index, &lightParms);
|
IWineD3DDeviceImpl_SetLight(iface, Index, &lightParms);
|
||||||
|
|
||||||
/* Search for it again! Should be fairly quick as near head of list */
|
/* Search for it again! Should be fairly quick as near head of list */
|
||||||
|
@ -2291,30 +2307,34 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetMaterial(IWineD3DDevice *iface, CONST WINED
|
||||||
}
|
}
|
||||||
|
|
||||||
ENTER_GL();
|
ENTER_GL();
|
||||||
TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g, pMaterial->Diffuse.b, pMaterial->Diffuse.a);
|
TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g,
|
||||||
TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g, pMaterial->Ambient.b, pMaterial->Ambient.a);
|
pMaterial->Diffuse.b, pMaterial->Diffuse.a);
|
||||||
TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g, pMaterial->Specular.b, pMaterial->Specular.a);
|
TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g,
|
||||||
TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g, pMaterial->Emissive.b, pMaterial->Emissive.a);
|
pMaterial->Ambient.b, pMaterial->Ambient.a);
|
||||||
|
TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g,
|
||||||
|
pMaterial->Specular.b, pMaterial->Specular.a);
|
||||||
|
TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g,
|
||||||
|
pMaterial->Emissive.b, pMaterial->Emissive.a);
|
||||||
TRACE("(%p) : Power (%f)\n", This, pMaterial->Power);
|
TRACE("(%p) : Power (%f)\n", This, pMaterial->Power);
|
||||||
|
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*) &This->updateStateBlock->material.Ambient);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*) &This->updateStateBlock->material.Ambient);
|
||||||
checkGLcall("glMaterialfv");
|
checkGLcall("glMaterialfv(GL_AMBIENT)");
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*) &This->updateStateBlock->material.Diffuse);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*) &This->updateStateBlock->material.Diffuse);
|
||||||
checkGLcall("glMaterialfv");
|
checkGLcall("glMaterialfv(GL_DIFFUSE)");
|
||||||
|
|
||||||
/* Only change material color if specular is enabled, otherwise it is set to black */
|
/* Only change material color if specular is enabled, otherwise it is set to black */
|
||||||
if (This->stateBlock->renderState[WINED3DRS_SPECULARENABLE]) {
|
if (This->stateBlock->renderState[WINED3DRS_SPECULARENABLE]) {
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*) &This->updateStateBlock->material.Specular);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*) &This->updateStateBlock->material.Specular);
|
||||||
checkGLcall("glMaterialfv");
|
checkGLcall("glMaterialfv(GL_SPECULAR");
|
||||||
} else {
|
} else {
|
||||||
float black[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
float black[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, &black[0]);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, &black[0]);
|
||||||
checkGLcall("glMaterialfv");
|
checkGLcall("glMaterialfv(GL_SPECULAR");
|
||||||
}
|
}
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*) &This->updateStateBlock->material.Emissive);
|
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*) &This->updateStateBlock->material.Emissive);
|
||||||
checkGLcall("glMaterialfv");
|
checkGLcall("glMaterialfv(GL_EMISSION)");
|
||||||
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, This->updateStateBlock->material.Power);
|
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, This->updateStateBlock->material.Power);
|
||||||
checkGLcall("glMaterialf");
|
checkGLcall("glMaterialf(GL_SHININESS");
|
||||||
|
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
|
@ -2323,11 +2343,16 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetMaterial(IWineD3DDevice *iface, CONST WINED
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_GetMaterial(IWineD3DDevice *iface, WINED3DMATERIAL* pMaterial) {
|
HRESULT WINAPI IWineD3DDeviceImpl_GetMaterial(IWineD3DDevice *iface, WINED3DMATERIAL* pMaterial) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
memcpy(pMaterial, &This->updateStateBlock->material, sizeof (WINED3DMATERIAL));
|
memcpy(pMaterial, &This->updateStateBlock->material, sizeof (WINED3DMATERIAL));
|
||||||
TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g, pMaterial->Diffuse.b, pMaterial->Diffuse.a);
|
TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g,
|
||||||
TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g, pMaterial->Ambient.b, pMaterial->Ambient.a);
|
pMaterial->Diffuse.b, pMaterial->Diffuse.a);
|
||||||
TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g, pMaterial->Specular.b, pMaterial->Specular.a);
|
TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g,
|
||||||
TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g, pMaterial->Emissive.b, pMaterial->Emissive.a);
|
pMaterial->Ambient.b, pMaterial->Ambient.a);
|
||||||
|
TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g,
|
||||||
|
pMaterial->Specular.b, pMaterial->Specular.a);
|
||||||
|
TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g,
|
||||||
|
pMaterial->Emissive.b, pMaterial->Emissive.a);
|
||||||
TRACE("(%p) : Power (%f)\n", This, pMaterial->Power);
|
TRACE("(%p) : Power (%f)\n", This, pMaterial->Power);
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2373,8 +2398,14 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetIndices(IWineD3DDevice *iface, IWineD3DInde
|
||||||
*ppIndexData = This->stateBlock->pIndexData;
|
*ppIndexData = This->stateBlock->pIndexData;
|
||||||
|
|
||||||
/* up ref count on ppindexdata */
|
/* up ref count on ppindexdata */
|
||||||
if (*ppIndexData) IWineD3DIndexBuffer_AddRef(*ppIndexData);
|
if (*ppIndexData) {
|
||||||
*pBaseVertexIndex = This->stateBlock->baseVertexIndex;
|
IWineD3DIndexBuffer_AddRef(*ppIndexData);
|
||||||
|
*pBaseVertexIndex = This->stateBlock->baseVertexIndex;
|
||||||
|
TRACE("(%p) index data set to %p + %u\n", This, ppIndexData, This->stateBlock->baseVertexIndex);
|
||||||
|
}else{
|
||||||
|
TRACE("(%p) No index data set\n", This);
|
||||||
|
}
|
||||||
|
TRACE("Returning %p %d \n",*ppIndexData, *pBaseVertexIndex);
|
||||||
|
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -3132,7 +3163,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, D3DRENDE
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WINED3DRS_ZBIAS :
|
case WINED3DRS_ZBIAS : /* D3D8 only */
|
||||||
{
|
{
|
||||||
if (Value) {
|
if (Value) {
|
||||||
tmpvalue.d = Value;
|
tmpvalue.d = Value;
|
||||||
|
@ -3283,6 +3314,17 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetRenderState(IWineD3DDevice *iface, D3DRENDE
|
||||||
case WINED3DRS_WRAP5 :
|
case WINED3DRS_WRAP5 :
|
||||||
case WINED3DRS_WRAP6 :
|
case WINED3DRS_WRAP6 :
|
||||||
case WINED3DRS_WRAP7 :
|
case WINED3DRS_WRAP7 :
|
||||||
|
/**
|
||||||
|
http://www.cosc.brocku.ca/Offerings/3P98/course/lectures/texture/
|
||||||
|
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/programmingguide/FixedFunction/Textures/texturewrapping.asp
|
||||||
|
http://www.gamedev.net/reference/programming/features/rendererdll3/page2.asp
|
||||||
|
Descussion that ways to turn on WRAPing to solve an opengl conversion problem.
|
||||||
|
http://www.flipcode.org/cgi-bin/fcmsg.cgi?thread_show=10248
|
||||||
|
|
||||||
|
so far as I can tell, wrapping and texture-coordinate generate go hand in hand,
|
||||||
|
*/
|
||||||
|
TRACE("(%p)->(%d,%ld) Texture wraping not yet supported\n",This, State, Value);
|
||||||
|
break;
|
||||||
case WINED3DRS_POINTSPRITEENABLE :
|
case WINED3DRS_POINTSPRITEENABLE :
|
||||||
case WINED3DRS_MULTISAMPLEANTIALIAS :
|
case WINED3DRS_MULTISAMPLEANTIALIAS :
|
||||||
case WINED3DRS_MULTISAMPLEMASK :
|
case WINED3DRS_MULTISAMPLEMASK :
|
||||||
|
@ -3450,9 +3492,14 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetVertexShader(IWineD3DDevice *iface, IWineD3
|
||||||
|
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_GetVertexShader(IWineD3DDevice *iface, IWineD3DVertexShader** ppShader) {
|
HRESULT WINAPI IWineD3DDeviceImpl_GetVertexShader(IWineD3DDevice *iface, IWineD3DVertexShader** ppShader) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
*ppShader = This->updateStateBlock->vertexShader;
|
|
||||||
if(*ppShader != NULL)
|
if (NULL == ppShader) {
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
|
}
|
||||||
|
*ppShader = This->stateBlock->vertexShader;
|
||||||
|
if( NULL != *ppShader)
|
||||||
IWineD3DVertexShader_AddRef(*ppShader);
|
IWineD3DVertexShader_AddRef(*ppShader);
|
||||||
|
|
||||||
TRACE("(%p) : returning %p\n", This, *ppShader);
|
TRACE("(%p) : returning %p\n", This, *ppShader);
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -3799,117 +3846,117 @@ static void WINAPI IWineD3DDeviceImpl_ApplyTextureUnitState(IWineD3DDevice *ifac
|
||||||
*/
|
*/
|
||||||
switch (Value & 0xFFFF0000) {
|
switch (Value & 0xFFFF0000) {
|
||||||
case D3DTSS_TCI_PASSTHRU:
|
case D3DTSS_TCI_PASSTHRU:
|
||||||
/*Use the specified texture coordinates contained within the vertex format. This value resolves to zero.*/
|
/*Use the specified texture coordinates contained within the vertex format. This value resolves to zero.*/
|
||||||
glDisable(GL_TEXTURE_GEN_S);
|
glDisable(GL_TEXTURE_GEN_S);
|
||||||
glDisable(GL_TEXTURE_GEN_T);
|
glDisable(GL_TEXTURE_GEN_T);
|
||||||
glDisable(GL_TEXTURE_GEN_R);
|
glDisable(GL_TEXTURE_GEN_R);
|
||||||
glDisable(GL_TEXTURE_GEN_Q);
|
glDisable(GL_TEXTURE_GEN_Q);
|
||||||
checkGLcall("glDisable(GL_TEXTURE_GEN_S,T,R)");
|
checkGLcall("glDisable(GL_TEXTURE_GEN_S,T,R,Q)");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case D3DTSS_TCI_CAMERASPACEPOSITION:
|
case D3DTSS_TCI_CAMERASPACEPOSITION:
|
||||||
/* CameraSpacePosition means use the vertex position, transformed to camera space,
|
/* CameraSpacePosition means use the vertex position, transformed to camera space,
|
||||||
as the input texture coordinates for this stage's texture transformation. This
|
as the input texture coordinates for this stage's texture transformation. This
|
||||||
equates roughly to EYE_LINEAR */
|
equates roughly to EYE_LINEAR */
|
||||||
{
|
{
|
||||||
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
||||||
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
||||||
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
||||||
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
||||||
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set eye plane\n");
|
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set eye plane\n");
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
||||||
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
||||||
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
||||||
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set GL_TEXTURE_GEN_x and GL_x, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR\n");
|
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set GL_TEXTURE_GEN_x and GL_x, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR\n");
|
||||||
glEnable(GL_TEXTURE_GEN_S);
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
||||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
||||||
glEnable(GL_TEXTURE_GEN_T);
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
||||||
glEnable(GL_TEXTURE_GEN_R);
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
||||||
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
|
||||||
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR)");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case D3DTSS_TCI_CAMERASPACENORMAL:
|
case D3DTSS_TCI_CAMERASPACENORMAL:
|
||||||
{
|
{
|
||||||
if (GL_SUPPORT(NV_TEXGEN_REFLECTION)) {
|
if (GL_SUPPORT(NV_TEXGEN_REFLECTION)) {
|
||||||
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
||||||
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
||||||
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
||||||
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
||||||
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set eye plane\n");
|
TRACE("WINED3DTSS_TCI_CAMERASPACENORMAL - Set eye plane\n");
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
||||||
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
||||||
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
||||||
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glEnable(GL_TEXTURE_GEN_S);
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
||||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
||||||
glEnable(GL_TEXTURE_GEN_T);
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
||||||
glEnable(GL_TEXTURE_GEN_R);
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
||||||
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_NV)");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR:
|
case D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR:
|
||||||
{
|
{
|
||||||
if (GL_SUPPORT(NV_TEXGEN_REFLECTION)) {
|
if (GL_SUPPORT(NV_TEXGEN_REFLECTION)) {
|
||||||
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
float s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
|
||||||
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
float t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
|
||||||
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
float r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
|
||||||
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
float q_plane[] = { 0.0, 0.0, 0.0, 1.0 };
|
||||||
TRACE("WINED3DTSS_TCI_CAMERASPACEPOSITION - Set eye plane\n");
|
TRACE("WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR - Set eye plane\n");
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
glTexGenfv(GL_S, GL_EYE_PLANE, s_plane);
|
||||||
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
glTexGenfv(GL_T, GL_EYE_PLANE, t_plane);
|
||||||
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
glTexGenfv(GL_R, GL_EYE_PLANE, r_plane);
|
||||||
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
glTexGenfv(GL_Q, GL_EYE_PLANE, q_plane);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
|
||||||
glEnable(GL_TEXTURE_GEN_S);
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_S);");
|
||||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
checkGLcall("glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
||||||
glEnable(GL_TEXTURE_GEN_T);
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_T);");
|
||||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
checkGLcall("glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
||||||
glEnable(GL_TEXTURE_GEN_R);
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
checkGLcall("glEnable(GL_TEXTURE_GEN_R);");
|
||||||
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV);
|
||||||
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
checkGLcall("glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_NV)");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
/* Unhandled types: */
|
/* Unhandled types: */
|
||||||
default:
|
default:
|
||||||
|
@ -3961,6 +4008,10 @@ static void WINAPI IWineD3DDeviceImpl_ApplyTextureUnitState(IWineD3DDevice *ifac
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****
|
||||||
|
* Get / Set Texture Stage States
|
||||||
|
* TODO: Verify against dx9 definitions
|
||||||
|
*****/
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *iface, DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
|
HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *iface, DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
|
|
||||||
|
@ -4004,6 +4055,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface, DWORD Stage,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Reject invalid texture units */
|
||||||
if (Stage >= GL_LIMITS(textures) || Stage < 0) {
|
if (Stage >= GL_LIMITS(textures) || Stage < 0) {
|
||||||
WARN("Attempt to access invalid texture rejected\n");
|
WARN("Attempt to access invalid texture rejected\n");
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
@ -4047,10 +4099,18 @@ HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface, DWORD Stage,
|
||||||
|
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_GetTexture(IWineD3DDevice *iface, DWORD Stage, IWineD3DBaseTexture** ppTexture) {
|
HRESULT WINAPI IWineD3DDeviceImpl_GetTexture(IWineD3DDevice *iface, DWORD Stage, IWineD3DBaseTexture** ppTexture) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
TRACE("(%p) : returning %p for stage %ld\n", This, This->updateStateBlock->textures[Stage], Stage);
|
TRACE("(%p) : (%ld /* Stage */,%p /* ppTexture */) \n", This, Stage, ppTexture);
|
||||||
*ppTexture = (IWineD3DBaseTexture *) This->updateStateBlock->textures[Stage];
|
|
||||||
|
/* Reject invalid texture units */
|
||||||
|
if (Stage >= GL_LIMITS(textures)) {
|
||||||
|
TRACE("Attempt to access invalid texture rejected\n");
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
|
}
|
||||||
|
*ppTexture=This->updateStateBlock->textures[Stage];
|
||||||
if (*ppTexture)
|
if (*ppTexture)
|
||||||
IWineD3DBaseTexture_AddRef(*ppTexture);
|
IWineD3DBaseTexture_AddRef(*ppTexture);
|
||||||
|
else
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4058,7 +4118,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetTexture(IWineD3DDevice *iface, DWORD Stage,
|
||||||
* Get Back Buffer
|
* Get Back Buffer
|
||||||
*****/
|
*****/
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_GetBackBuffer(IWineD3DDevice *iface, UINT iSwapChain, UINT BackBuffer, D3DBACKBUFFER_TYPE Type,
|
HRESULT WINAPI IWineD3DDeviceImpl_GetBackBuffer(IWineD3DDevice *iface, UINT iSwapChain, UINT BackBuffer, D3DBACKBUFFER_TYPE Type,
|
||||||
IWineD3DSurface** ppBackBuffer) {
|
IWineD3DSurface **ppBackBuffer) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DSwapChain *swapChain;
|
IWineD3DSwapChain *swapChain;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -4066,10 +4126,10 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetBackBuffer(IWineD3DDevice *iface, UINT iSwa
|
||||||
TRACE("(%p) : BackBuf %d Type %d SwapChain %d returning %p\n", This, BackBuffer, Type, iSwapChain, *ppBackBuffer);
|
TRACE("(%p) : BackBuf %d Type %d SwapChain %d returning %p\n", This, BackBuffer, Type, iSwapChain, *ppBackBuffer);
|
||||||
|
|
||||||
hr = IWineD3DDeviceImpl_GetSwapChain(iface, iSwapChain, &swapChain);
|
hr = IWineD3DDeviceImpl_GetSwapChain(iface, iSwapChain, &swapChain);
|
||||||
if(hr == D3D_OK) {
|
if (hr == D3D_OK) {
|
||||||
hr = IWineD3DSwapChain_GetBackBuffer(swapChain, BackBuffer, Type, ppBackBuffer);
|
hr = IWineD3DSwapChain_GetBackBuffer(swapChain, BackBuffer, Type, ppBackBuffer);
|
||||||
IWineD3DSwapChain_Release(swapChain);
|
IWineD3DSwapChain_Release(swapChain);
|
||||||
}else{
|
} else {
|
||||||
*ppBackBuffer = NULL;
|
*ppBackBuffer = NULL;
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -4090,7 +4150,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetDisplayMode(IWineD3DDevice *iface, UINT iSw
|
||||||
if (hr == D3D_OK) {
|
if (hr == D3D_OK) {
|
||||||
hr = IWineD3DSwapChain_GetDisplayMode(swapChain, pMode);
|
hr = IWineD3DSwapChain_GetDisplayMode(swapChain, pMode);
|
||||||
IWineD3DSwapChain_Release(swapChain);
|
IWineD3DSwapChain_Release(swapChain);
|
||||||
}else{
|
} else {
|
||||||
FIXME("(%p) Error getting display mode\n", This);
|
FIXME("(%p) Error getting display mode\n", This);
|
||||||
}
|
}
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -4099,12 +4159,12 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetDisplayMode(IWineD3DDevice *iface, UINT iSw
|
||||||
* Stateblock related functions
|
* Stateblock related functions
|
||||||
*****/
|
*****/
|
||||||
|
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_BeginStateBlock(IWineD3DDevice *iface) {
|
HRESULT WINAPI IWineD3DDeviceImpl_BeginStateBlock(IWineD3DDevice *iface) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DStateBlockImpl *object;
|
IWineD3DStateBlockImpl *object;
|
||||||
TRACE("(%p)", This);
|
TRACE("(%p)", This);
|
||||||
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DStateBlockImpl));
|
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DStateBlockImpl));
|
||||||
if(NULL == object ) {
|
if (NULL == object ) {
|
||||||
FIXME("(%p)Error allocating memory for stateblock\n", This);
|
FIXME("(%p)Error allocating memory for stateblock\n", This);
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
@ -4188,7 +4248,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_EndScene(IWineD3DDevice *iface) {
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_Present(IWineD3DDevice *iface,
|
HRESULT WINAPI IWineD3DDeviceImpl_Present(IWineD3DDevice *iface,
|
||||||
CONST RECT* pSourceRect, CONST RECT* pDestRect,
|
CONST RECT* pSourceRect, CONST RECT* pDestRect,
|
||||||
HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) {
|
HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
IWineD3DSwapChain *swapChain = NULL;
|
IWineD3DSwapChain *swapChain = NULL;
|
||||||
int i;
|
int i;
|
||||||
int swapchains = IWineD3DDeviceImpl_GetNumberOfSwapChains(iface);
|
int swapchains = IWineD3DDeviceImpl_GetNumberOfSwapChains(iface);
|
||||||
|
@ -4281,7 +4341,8 @@ HRESULT WINAPI IWineD3DDeviceImpl_Clear(IWineD3DDevice *iface, DWORD Count, CONS
|
||||||
checkGLcall("glScissor");
|
checkGLcall("glScissor");
|
||||||
} else {
|
} else {
|
||||||
glScissor(This->stateBlock->viewport.X,
|
glScissor(This->stateBlock->viewport.X,
|
||||||
(((IWineD3DSurfaceImpl *)This->renderTarget)->currentDesc.Height - (This->stateBlock->viewport.Y + This->stateBlock->viewport.Height)),
|
(((IWineD3DSurfaceImpl *)This->renderTarget)->currentDesc.Height -
|
||||||
|
(This->stateBlock->viewport.Y + This->stateBlock->viewport.Height)),
|
||||||
This->stateBlock->viewport.Width,
|
This->stateBlock->viewport.Width,
|
||||||
This->stateBlock->viewport.Height);
|
This->stateBlock->viewport.Height);
|
||||||
checkGLcall("glScissor");
|
checkGLcall("glScissor");
|
||||||
|
@ -4536,6 +4597,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_ValidateDevice(IWineD3DDevice *iface, DWORD*
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
/* return a sensible default */
|
/* return a sensible default */
|
||||||
*pNumPasses = 1;
|
*pNumPasses = 1;
|
||||||
|
/* TODO: If the window is minimized then validate device shold return something other than d3d_ok */
|
||||||
FIXME("(%p) : stub\n", This);
|
FIXME("(%p) : stub\n", This);
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
@ -4869,6 +4931,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_ColorFill(IWineD3DDevice *iface, IWineD3DSurfa
|
||||||
unsigned int u, v;
|
unsigned int u, v;
|
||||||
DWORD *data;
|
DWORD *data;
|
||||||
TRACE("(%p) Colour fill Surface: %p rect: %p color: %ld\n", This, pSurface, pRect, color);
|
TRACE("(%p) Colour fill Surface: %p rect: %p color: %ld\n", This, pSurface, pRect, color);
|
||||||
|
|
||||||
if (surface->resource.pool != D3DPOOL_DEFAULT) {
|
if (surface->resource.pool != D3DPOOL_DEFAULT) {
|
||||||
FIXME("call to colorfill with non D3DPOOL_DEFAULT surface\n");
|
FIXME("call to colorfill with non D3DPOOL_DEFAULT surface\n");
|
||||||
return D3DERR_INVALIDCALL;
|
return D3DERR_INVALIDCALL;
|
||||||
|
@ -5115,6 +5178,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_CleanRender(IWineD3DDevice* iface, IWineD3DSwa
|
||||||
}
|
}
|
||||||
return D3D_OK;
|
return D3D_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: move this off into a context manager so that GLX_ATI_render_texture and other types of surface can be used. */
|
/* TODO: move this off into a context manager so that GLX_ATI_render_texture and other types of surface can be used. */
|
||||||
HRESULT WINAPI IWineD3DDeviceImpl_FindGLContext(IWineD3DDevice *iface, IWineD3DSurface *pSurface, glContext **context) {
|
HRESULT WINAPI IWineD3DDeviceImpl_FindGLContext(IWineD3DDevice *iface, IWineD3DSurface *pSurface, glContext **context) {
|
||||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||||
|
@ -5338,7 +5402,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_ActiveRender(IWineD3DDevice* iface,
|
||||||
* In many cases I would expect that we can 'skip' some functions, such as preserving states,
|
* In many cases I would expect that we can 'skip' some functions, such as preserving states,
|
||||||
* and gain a good performance increase at the cost of compatibility.
|
* and gain a good performance increase at the cost of compatibility.
|
||||||
* I would suggest that, when this is the case, a user configurable flag be made
|
* I would suggest that, when this is the case, a user configurable flag be made
|
||||||
* available, allowing the user to choose the best emmulated experience for them.
|
* available, allowing the user to choose the best emulated experience for them.
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
XVisualInfo *visinfo;
|
XVisualInfo *visinfo;
|
||||||
|
@ -5823,7 +5887,6 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
|
||||||
IWineD3DDeviceImpl_CreateVertexDeclaration,
|
IWineD3DDeviceImpl_CreateVertexDeclaration,
|
||||||
IWineD3DDeviceImpl_CreateVertexShader,
|
IWineD3DDeviceImpl_CreateVertexShader,
|
||||||
IWineD3DDeviceImpl_CreatePixelShader,
|
IWineD3DDeviceImpl_CreatePixelShader,
|
||||||
|
|
||||||
/*** Odd functions **/
|
/*** Odd functions **/
|
||||||
IWineD3DDeviceImpl_EvictManagedResources,
|
IWineD3DDeviceImpl_EvictManagedResources,
|
||||||
IWineD3DDeviceImpl_GetAvailableTextureMem,
|
IWineD3DDeviceImpl_GetAvailableTextureMem,
|
||||||
|
@ -5933,8 +5996,8 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
|
||||||
IWineD3DDeviceImpl_GetFrontBufferData,
|
IWineD3DDeviceImpl_GetFrontBufferData,
|
||||||
/*** Internal use IWineD3DDevice methods ***/
|
/*** Internal use IWineD3DDevice methods ***/
|
||||||
IWineD3DDeviceImpl_SetupTextureStates,
|
IWineD3DDeviceImpl_SetupTextureStates,
|
||||||
IWineD3DDeviceImpl_SwapChainReleased,
|
|
||||||
/*** object tracking ***/
|
/*** object tracking ***/
|
||||||
|
IWineD3DDeviceImpl_SwapChainReleased,
|
||||||
IWineD3DDeviceImpl_ResourceReleased
|
IWineD3DDeviceImpl_ResourceReleased
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue