wined3d: Catch nop sampler changes.
This commit is contained in:
parent
666b507766
commit
8365b2819a
|
@ -3368,6 +3368,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetRenderState(IWineD3DDevice *iface, W
|
|||
|
||||
static HRESULT WINAPI IWineD3DDeviceImpl_SetSamplerState(IWineD3DDevice *iface, DWORD Sampler, WINED3DSAMPLERSTATETYPE Type, DWORD Value) {
|
||||
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
|
||||
DWORD oldValue = This->stateBlock->samplerState[Sampler][Type];
|
||||
|
||||
/**
|
||||
* SetSampler is designed to allow for more than the standard up to 8 textures
|
||||
* and Geforce has stopped supporting more than 6 standard textures in openGL.
|
||||
|
@ -3401,6 +3403,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetSamplerState(IWineD3DDevice *iface,
|
|||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
if(oldValue == Value) {
|
||||
TRACE("Application is setting the old value over, nothing to do\n");
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SAMPLER(Sampler));
|
||||
|
||||
return WINED3D_OK;
|
||||
|
@ -4487,7 +4494,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface, DWORD
|
|||
This->stateBlock->textureDimensions[Stage] = IWineD3DBaseTexture_GetTextureDimensions(pTexture);
|
||||
}
|
||||
|
||||
oldTexture = This->updateStateBlock->textures[Stage];
|
||||
TRACE("GL_LIMITS %d\n",GL_LIMITS(sampler_stages));
|
||||
TRACE("(%p) : oldtexture(%p)\n", This,oldTexture);
|
||||
|
||||
|
@ -4502,6 +4508,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface, DWORD
|
|||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
if(oldTexture == pTexture) {
|
||||
TRACE("App is setting the same texture again, nothing to do\n");
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
/** NOTE: MSDN says that setTexture increases the reference count,
|
||||
* and the the application nust set the texture back to null (or have a leaky application),
|
||||
* This means we should pass the refcount up to the parent
|
||||
|
|
|
@ -756,7 +756,8 @@ should really perform a delta so that only the changes get updated*/
|
|||
((IWineD3DDeviceImpl *)pDevice)->stateBlock->changed.samplerState[j][i] = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* SetTexture catches nop changes, so the above call does not assure that the sampler is updated */
|
||||
IWineD3DDeviceImpl_MarkStateDirty((IWineD3DDeviceImpl *)pDevice, STATE_SAMPLER(j));
|
||||
}
|
||||
|
||||
} else if (This->blockType == WINED3DSBT_PIXELSTATE) {
|
||||
|
|
Loading…
Reference in New Issue