mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 901404. Support Azure with single buffered thebes layers. r=mattwoodrow
This commit is contained in:
parent
05b78d0697
commit
af23265853
@ -245,6 +245,8 @@ public:
|
||||
*/
|
||||
gfxASurface* GetBuffer() { return mBuffer; }
|
||||
gfxASurface* GetBufferOnWhite() { return mBufferOnWhite; }
|
||||
gfx::DrawTarget* GetDTBuffer() { return mDTBuffer; }
|
||||
gfx::DrawTarget* GetDTBufferOnWhite() { return mDTBufferOnWhite; }
|
||||
|
||||
/**
|
||||
* Complete the drawing operation. The region to draw must have been
|
||||
@ -271,11 +273,33 @@ protected:
|
||||
already_AddRefed<gfxASurface>
|
||||
SetBufferOnWhite(gfxASurface* aBuffer)
|
||||
{
|
||||
MOZ_ASSERT(!SupportsAzureContent());
|
||||
nsRefPtr<gfxASurface> tmp = mBufferOnWhite.forget();
|
||||
mBufferOnWhite = aBuffer;
|
||||
return tmp.forget();
|
||||
}
|
||||
|
||||
TemporaryRef<gfx::DrawTarget>
|
||||
SetDTBuffer(gfx::DrawTarget* aBuffer,
|
||||
const nsIntRect& aBufferRect, const nsIntPoint& aBufferRotation)
|
||||
{
|
||||
MOZ_ASSERT(SupportsAzureContent());
|
||||
RefPtr<gfx::DrawTarget> tmp = mDTBuffer.forget();
|
||||
mDTBuffer = aBuffer;
|
||||
mBufferRect = aBufferRect;
|
||||
mBufferRotation = aBufferRotation;
|
||||
return tmp.forget();
|
||||
}
|
||||
|
||||
TemporaryRef<gfx::DrawTarget>
|
||||
SetDTBufferOnWhite(gfx::DrawTarget* aBuffer)
|
||||
{
|
||||
MOZ_ASSERT(SupportsAzureContent());
|
||||
RefPtr<gfx::DrawTarget> tmp = mDTBufferOnWhite.forget();
|
||||
mDTBufferOnWhite = aBuffer;
|
||||
return tmp.forget();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the texture client only. This is used with surfaces that
|
||||
* require explicit lock/unlock, which |aClient| is used to do on
|
||||
|
@ -545,23 +545,42 @@ ContentClientSingleBuffered::SyncFrontBufferToBackBuffer()
|
||||
return;
|
||||
}
|
||||
|
||||
gfxASurface* backBuffer = GetBuffer();
|
||||
if (!backBuffer && mDeprecatedTextureClient) {
|
||||
backBuffer = mDeprecatedTextureClient->LockSurface();
|
||||
if (SupportsAzureContent()) {
|
||||
DrawTarget* backBuffer = GetDTBuffer();
|
||||
if (!backBuffer && mDeprecatedTextureClient) {
|
||||
backBuffer = mDeprecatedTextureClient->LockDrawTarget();
|
||||
}
|
||||
|
||||
RefPtr<DrawTarget> oldBuffer;
|
||||
oldBuffer = SetDTBuffer(backBuffer,
|
||||
mBufferRect,
|
||||
mBufferRotation);
|
||||
|
||||
backBuffer = GetDTBufferOnWhite();
|
||||
if (!backBuffer && mDeprecatedTextureClientOnWhite) {
|
||||
backBuffer = mDeprecatedTextureClientOnWhite->LockDrawTarget();
|
||||
}
|
||||
|
||||
oldBuffer = SetDTBufferOnWhite(backBuffer);
|
||||
} else {
|
||||
gfxASurface* backBuffer = GetBuffer();
|
||||
if (!backBuffer && mDeprecatedTextureClient) {
|
||||
backBuffer = mDeprecatedTextureClient->LockSurface();
|
||||
}
|
||||
|
||||
nsRefPtr<gfxASurface> oldBuffer;
|
||||
oldBuffer = SetBuffer(backBuffer,
|
||||
mBufferRect,
|
||||
mBufferRotation);
|
||||
|
||||
backBuffer = GetBufferOnWhite();
|
||||
if (!backBuffer && mDeprecatedTextureClientOnWhite) {
|
||||
backBuffer = mDeprecatedTextureClientOnWhite->LockSurface();
|
||||
}
|
||||
|
||||
oldBuffer = SetBufferOnWhite(backBuffer);
|
||||
}
|
||||
|
||||
nsRefPtr<gfxASurface> oldBuffer;
|
||||
oldBuffer = SetBuffer(backBuffer,
|
||||
mBufferRect,
|
||||
mBufferRotation);
|
||||
|
||||
backBuffer = GetBufferOnWhite();
|
||||
if (!backBuffer && mDeprecatedTextureClientOnWhite) {
|
||||
backBuffer = mDeprecatedTextureClientOnWhite->LockSurface();
|
||||
}
|
||||
|
||||
oldBuffer = SetBufferOnWhite(backBuffer);
|
||||
|
||||
mIsNewBuffer = false;
|
||||
mFrontAndBackBufferDiffer = false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user