wined3d: Remove AddDirtyRect() from the public interface.
This commit is contained in:
parent
fd90021666
commit
9440dfedf4
|
@ -136,9 +136,8 @@ static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface) {
|
|||
}
|
||||
}
|
||||
} else if (srgb_was_toggled) {
|
||||
/* Loop is repeated in the else block with the extra AddDirtyRect line to avoid the alternative of
|
||||
* checking srgb_was_toggled in every iteration, even when the texture is just dirty
|
||||
*/
|
||||
/* Loop is repeated in the else block with the extra surface_add_dirty_rect() line to avoid the
|
||||
* alternative of checking srgb_was_toggled in every iteration, even when the texture is just dirty */
|
||||
if (This->baseTexture.srgb_mode_change_count < 20)
|
||||
++This->baseTexture.srgb_mode_change_count;
|
||||
else
|
||||
|
@ -146,7 +145,7 @@ static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface) {
|
|||
|
||||
for (i = 0; i < This->baseTexture.levels; i++) {
|
||||
for (j = WINED3DCUBEMAP_FACE_POSITIVE_X; j <= WINED3DCUBEMAP_FACE_NEGATIVE_Z ; j++) {
|
||||
IWineD3DSurface_AddDirtyRect(This->surfaces[j][i], NULL);
|
||||
surface_add_dirty_rect(This->surfaces[j][i], NULL);
|
||||
surface_force_reload(This->surfaces[j][i]);
|
||||
IWineD3DSurface_LoadTexture(This->surfaces[j][i], srgb_mode);
|
||||
}
|
||||
|
@ -360,7 +359,8 @@ static HRESULT WINAPI IWineD3DCubeTextureImpl_AddDirtyRect(IWineD3DCubeTexture
|
|||
This->baseTexture.dirty = TRUE;
|
||||
TRACE("(%p) : dirtyfication of faceType(%d) Level (0)\n", This, FaceType);
|
||||
if (FaceType <= WINED3DCUBEMAP_FACE_NEGATIVE_Z) {
|
||||
hr = IWineD3DSurface_AddDirtyRect(This->surfaces[FaceType][0], pDirtyRect);
|
||||
surface_add_dirty_rect(This->surfaces[FaceType][0], pDirtyRect);
|
||||
hr = WINED3D_OK;
|
||||
} else {
|
||||
WARN("(%p) overflow FaceType(%d)\n", This, FaceType);
|
||||
}
|
||||
|
|
|
@ -764,7 +764,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateSurface(IWineD3DDevice *iface, U
|
|||
}
|
||||
|
||||
/* mark the texture as dirty so that it gets loaded first time around*/
|
||||
IWineD3DSurface_AddDirtyRect(*ppSurface, NULL);
|
||||
surface_add_dirty_rect(*ppSurface, NULL);
|
||||
TRACE("(%p) : w(%d) h(%d) fmt(%d,%s) lockable(%d) surf@%p, surfmem@%p, %d bytes\n",
|
||||
This, Width, Height, Format, debug_d3dformat(Format),
|
||||
(WINED3DFMT_D16_LOCKABLE == Format), *ppSurface, object->resource.allocatedMemory, object->resource.size);
|
||||
|
|
|
@ -476,6 +476,43 @@ GLenum surface_get_gl_buffer(IWineD3DSurface *iface, IWineD3DSwapChain *swapchai
|
|||
return GL_BACK;
|
||||
}
|
||||
|
||||
/* Slightly inefficient way to handle multiple dirty rects but it works :) */
|
||||
void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect)
|
||||
{
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
IWineD3DBaseTexture *baseTexture = NULL;
|
||||
|
||||
if (!(This->Flags & SFLAG_INSYSMEM) && (This->Flags & SFLAG_INTEXTURE))
|
||||
IWineD3DSurface_LoadLocation(iface, SFLAG_INSYSMEM, NULL /* no partial locking for textures yet */);
|
||||
|
||||
IWineD3DSurface_ModifyLocation(iface, SFLAG_INSYSMEM, TRUE);
|
||||
if (dirty_rect)
|
||||
{
|
||||
This->dirtyRect.left = min(This->dirtyRect.left, dirty_rect->left);
|
||||
This->dirtyRect.top = min(This->dirtyRect.top, dirty_rect->top);
|
||||
This->dirtyRect.right = max(This->dirtyRect.right, dirty_rect->right);
|
||||
This->dirtyRect.bottom = max(This->dirtyRect.bottom, dirty_rect->bottom);
|
||||
}
|
||||
else
|
||||
{
|
||||
This->dirtyRect.left = 0;
|
||||
This->dirtyRect.top = 0;
|
||||
This->dirtyRect.right = This->currentDesc.Width;
|
||||
This->dirtyRect.bottom = This->currentDesc.Height;
|
||||
}
|
||||
|
||||
TRACE("(%p) : Dirty: yes, Rect:(%d, %d, %d, %d)\n", This, This->dirtyRect.left,
|
||||
This->dirtyRect.top, This->dirtyRect.right, This->dirtyRect.bottom);
|
||||
|
||||
/* if the container is a basetexture then mark it dirty. */
|
||||
if (SUCCEEDED(IWineD3DSurface_GetContainer(iface, &IID_IWineD3DBaseTexture, (void **)&baseTexture)))
|
||||
{
|
||||
TRACE("Passing to container\n");
|
||||
IWineD3DBaseTexture_SetDirty(baseTexture, TRUE);
|
||||
IWineD3DBaseTexture_Release(baseTexture);
|
||||
}
|
||||
}
|
||||
|
||||
static ULONG WINAPI IWineD3DSurfaceImpl_Release(IWineD3DSurface *iface)
|
||||
{
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
|
@ -1193,7 +1230,7 @@ lock_end:
|
|||
* Dirtify on lock
|
||||
* as seen in msdn docs
|
||||
*/
|
||||
IWineD3DSurface_AddDirtyRect(iface, pRect);
|
||||
surface_add_dirty_rect(iface, pRect);
|
||||
|
||||
/** Dirtify Container if needed */
|
||||
if (SUCCEEDED(IWineD3DSurface_GetContainer(iface, &IID_IWineD3DBaseTexture, (void **)&pBaseTexture))) {
|
||||
|
@ -2503,40 +2540,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_SaveSnapshot(IWineD3DSurface *iface, c
|
|||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Slightly inefficient way to handle multiple dirty rects but it works :)
|
||||
*/
|
||||
static HRESULT WINAPI IWineD3DSurfaceImpl_AddDirtyRect(IWineD3DSurface *iface, CONST RECT* pDirtyRect)
|
||||
{
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
IWineD3DBaseTexture *baseTexture = NULL;
|
||||
|
||||
if (!(This->Flags & SFLAG_INSYSMEM) && (This->Flags & SFLAG_INTEXTURE))
|
||||
IWineD3DSurface_LoadLocation(iface, SFLAG_INSYSMEM, NULL /* no partial locking for textures yet */);
|
||||
|
||||
IWineD3DSurface_ModifyLocation(iface, SFLAG_INSYSMEM, TRUE);
|
||||
if (NULL != pDirtyRect) {
|
||||
This->dirtyRect.left = min(This->dirtyRect.left, pDirtyRect->left);
|
||||
This->dirtyRect.top = min(This->dirtyRect.top, pDirtyRect->top);
|
||||
This->dirtyRect.right = max(This->dirtyRect.right, pDirtyRect->right);
|
||||
This->dirtyRect.bottom = max(This->dirtyRect.bottom, pDirtyRect->bottom);
|
||||
} else {
|
||||
This->dirtyRect.left = 0;
|
||||
This->dirtyRect.top = 0;
|
||||
This->dirtyRect.right = This->currentDesc.Width;
|
||||
This->dirtyRect.bottom = This->currentDesc.Height;
|
||||
}
|
||||
TRACE("(%p) : Dirty: yes, Rect:(%d,%d,%d,%d)\n", This, This->dirtyRect.left,
|
||||
This->dirtyRect.top, This->dirtyRect.right, This->dirtyRect.bottom);
|
||||
/* if the container is a basetexture then mark it dirty. */
|
||||
if (IWineD3DSurface_GetContainer(iface, &IID_IWineD3DBaseTexture, (void **)&baseTexture) == WINED3D_OK) {
|
||||
TRACE("Passing to container\n");
|
||||
IWineD3DBaseTexture_SetDirty(baseTexture, TRUE);
|
||||
IWineD3DBaseTexture_Release(baseTexture);
|
||||
}
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IWineD3DSurfaceImpl_SetFormat(IWineD3DSurface *iface, WINED3DFORMAT format) {
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
|
||||
HRESULT hr;
|
||||
|
@ -4736,7 +4739,6 @@ const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl =
|
|||
IWineD3DBaseSurfaceImpl_SetClipper,
|
||||
IWineD3DBaseSurfaceImpl_GetClipper,
|
||||
/* Internal use: */
|
||||
IWineD3DSurfaceImpl_AddDirtyRect,
|
||||
IWineD3DSurfaceImpl_LoadTexture,
|
||||
IWineD3DSurfaceImpl_BindTexture,
|
||||
IWineD3DSurfaceImpl_SaveSnapshot,
|
||||
|
|
|
@ -540,14 +540,6 @@ static void WINAPI IWineGDISurfaceImpl_GetGlDesc(IWineD3DSurface *iface, glDescr
|
|||
*glDescription = NULL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IWineGDISurfaceImpl_AddDirtyRect(IWineD3DSurface *iface, CONST RECT* pDirtyRect) {
|
||||
/* GDI surface data can only be in one location, the system memory dib section. So they are
|
||||
* always clean by definition.
|
||||
*/
|
||||
TRACE("No dirtification in GDI surfaces\n");
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI IWineGDISurfaceImpl_SetMem(IWineD3DSurface *iface, void *Mem) {
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *) iface;
|
||||
|
||||
|
@ -673,7 +665,6 @@ const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl =
|
|||
IWineD3DBaseSurfaceImpl_SetClipper,
|
||||
IWineD3DBaseSurfaceImpl_GetClipper,
|
||||
/* Internal use: */
|
||||
IWineGDISurfaceImpl_AddDirtyRect,
|
||||
IWineGDISurfaceImpl_LoadTexture,
|
||||
IWineD3DBaseSurfaceImpl_BindTexture,
|
||||
IWineGDISurfaceImpl_SaveSnapshot,
|
||||
|
|
|
@ -137,7 +137,7 @@ static void WINAPI IWineD3DTextureImpl_PreLoad(IWineD3DTexture *iface) {
|
|||
FIXME("Texture (%p) has been reloaded at least 20 times due to WINED3DSAMP_SRGBTEXTURE changes on it\'s sampler\n", This);
|
||||
|
||||
for (i = 0; i < This->baseTexture.levels; i++) {
|
||||
IWineD3DSurface_AddDirtyRect(This->surfaces[i], NULL);
|
||||
surface_add_dirty_rect(This->surfaces[i], NULL);
|
||||
surface_force_reload(This->surfaces[i]);
|
||||
IWineD3DSurface_LoadTexture(This->surfaces[i], srgb_mode);
|
||||
}
|
||||
|
@ -360,7 +360,9 @@ static HRESULT WINAPI IWineD3DTextureImpl_AddDirtyRect(IWineD3DTexture *iface, C
|
|||
IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
|
||||
This->baseTexture.dirty = TRUE;
|
||||
TRACE("(%p) : dirtyfication of surface Level (0)\n", This);
|
||||
return IWineD3DSurface_AddDirtyRect(This->surfaces[0], pDirtyRect);
|
||||
surface_add_dirty_rect(This->surfaces[0], pDirtyRect);
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
const IWineD3DTextureVtbl IWineD3DTexture_Vtbl =
|
||||
|
|
|
@ -2038,6 +2038,7 @@ void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCo
|
|||
void state_fogstartend(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context);
|
||||
void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context);
|
||||
|
||||
void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect);
|
||||
void surface_force_reload(IWineD3DSurface *iface);
|
||||
GLenum surface_get_gl_buffer(IWineD3DSurface *iface, IWineD3DSwapChain *swapchain);
|
||||
void surface_load_ds_location(IWineD3DSurface *iface, DWORD location);
|
||||
|
|
|
@ -2453,9 +2453,6 @@ interface IWineD3DSurface : IWineD3DResource
|
|||
HRESULT GetClipper(
|
||||
[out] IWineD3DClipper **clipper
|
||||
);
|
||||
HRESULT AddDirtyRect(
|
||||
[in] const RECT *dirty_rect
|
||||
);
|
||||
HRESULT LoadTexture(
|
||||
[in] BOOL srgb_mode
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue