зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1530471 - remove layers SkiaGL glue r=jrmuizel
Depends on D21054 Differential Revision: https://phabricator.services.mozilla.com/D21055 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
1ddc82c081
Коммит
7b51528692
|
@ -37,7 +37,6 @@ struct CanvasInitializeData {
|
||||||
mPreTransCallbackData(nullptr),
|
mPreTransCallbackData(nullptr),
|
||||||
mDidTransCallback(nullptr),
|
mDidTransCallback(nullptr),
|
||||||
mDidTransCallbackData(nullptr),
|
mDidTransCallbackData(nullptr),
|
||||||
mFrontbufferGLTex(0),
|
|
||||||
mSize(0, 0),
|
mSize(0, 0),
|
||||||
mHasAlpha(false),
|
mHasAlpha(false),
|
||||||
mIsGLAlphaPremult(true) {}
|
mIsGLAlphaPremult(true) {}
|
||||||
|
@ -54,9 +53,6 @@ struct CanvasInitializeData {
|
||||||
TransactionCallback mDidTransCallback;
|
TransactionCallback mDidTransCallback;
|
||||||
void* mDidTransCallbackData;
|
void* mDidTransCallbackData;
|
||||||
|
|
||||||
// Frontbuffer override
|
|
||||||
uint32_t mFrontbufferGLTex;
|
|
||||||
|
|
||||||
// The size of the canvas content
|
// The size of the canvas content
|
||||||
gfx::IntSize mSize;
|
gfx::IntSize mSize;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@ using namespace mozilla::gl;
|
||||||
CopyableCanvasRenderer::CopyableCanvasRenderer()
|
CopyableCanvasRenderer::CopyableCanvasRenderer()
|
||||||
: mGLContext(nullptr),
|
: mGLContext(nullptr),
|
||||||
mBufferProvider(nullptr),
|
mBufferProvider(nullptr),
|
||||||
mGLFrontbuffer(nullptr),
|
|
||||||
mAsyncRenderer(nullptr),
|
mAsyncRenderer(nullptr),
|
||||||
mIsAlphaPremultiplied(true),
|
mIsAlphaPremultiplied(true),
|
||||||
mOriginPos(gl::OriginPos::TopLeft),
|
mOriginPos(gl::OriginPos::TopLeft),
|
||||||
|
@ -60,12 +59,6 @@ void CopyableCanvasRenderer::Initialize(const CanvasInitializeData& aData) {
|
||||||
|
|
||||||
MOZ_ASSERT(mGLContext->IsOffscreen(), "canvas gl context isn't offscreen");
|
MOZ_ASSERT(mGLContext->IsOffscreen(), "canvas gl context isn't offscreen");
|
||||||
|
|
||||||
if (aData.mFrontbufferGLTex) {
|
|
||||||
gfx::IntSize size(aData.mSize.width, aData.mSize.height);
|
|
||||||
mGLFrontbuffer = SharedSurface_Basic::Wrap(
|
|
||||||
aData.mGLContext, size, aData.mHasAlpha, aData.mFrontbufferGLTex);
|
|
||||||
mBufferProvider = aData.mBufferProvider;
|
|
||||||
}
|
|
||||||
} else if (aData.mBufferProvider) {
|
} else if (aData.mBufferProvider) {
|
||||||
mBufferProvider = aData.mBufferProvider;
|
mBufferProvider = aData.mBufferProvider;
|
||||||
} else if (aData.mRenderer) {
|
} else if (aData.mRenderer) {
|
||||||
|
@ -130,9 +123,7 @@ already_AddRefed<SourceSurface> CopyableCanvasRenderer::ReadbackSurface() {
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedSurface* frontbuffer = nullptr;
|
SharedSurface* frontbuffer = nullptr;
|
||||||
if (mGLFrontbuffer) {
|
if (mGLContext->Screen()) {
|
||||||
frontbuffer = mGLFrontbuffer.get();
|
|
||||||
} else if (mGLContext->Screen()) {
|
|
||||||
const auto& front = mGLContext->Screen()->Front();
|
const auto& front = mGLContext->Screen()->Front();
|
||||||
if (front) {
|
if (front) {
|
||||||
frontbuffer = front->Surf();
|
frontbuffer = front->Surf();
|
||||||
|
|
|
@ -57,7 +57,6 @@ class CopyableCanvasRenderer : public CanvasRenderer {
|
||||||
protected:
|
protected:
|
||||||
RefPtr<gl::GLContext> mGLContext;
|
RefPtr<gl::GLContext> mGLContext;
|
||||||
RefPtr<PersistentBufferProvider> mBufferProvider;
|
RefPtr<PersistentBufferProvider> mBufferProvider;
|
||||||
UniquePtr<gl::SharedSurface> mGLFrontbuffer;
|
|
||||||
RefPtr<AsyncCanvasRenderer> mAsyncRenderer;
|
RefPtr<AsyncCanvasRenderer> mAsyncRenderer;
|
||||||
|
|
||||||
bool mIsAlphaPremultiplied;
|
bool mIsAlphaPremultiplied;
|
||||||
|
|
|
@ -41,16 +41,8 @@ void ShareableCanvasRenderer::Initialize(const CanvasInitializeData& aData) {
|
||||||
if (!mGLContext) return;
|
if (!mGLContext) return;
|
||||||
|
|
||||||
gl::GLScreenBuffer* screen = mGLContext->Screen();
|
gl::GLScreenBuffer* screen = mGLContext->Screen();
|
||||||
|
MOZ_ASSERT(screen);
|
||||||
gl::SurfaceCaps caps;
|
gl::SurfaceCaps caps = screen->mCaps;
|
||||||
if (mGLFrontbuffer) {
|
|
||||||
// The screen caps are irrelevant if we're using a separate frontbuffer.
|
|
||||||
caps = mGLFrontbuffer->mHasAlpha ? gl::SurfaceCaps::ForRGBA()
|
|
||||||
: gl::SurfaceCaps::ForRGB();
|
|
||||||
} else {
|
|
||||||
MOZ_ASSERT(screen);
|
|
||||||
caps = screen->mCaps;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto forwarder = GetForwarder();
|
auto forwarder = GetForwarder();
|
||||||
|
|
||||||
|
@ -61,17 +53,8 @@ void ShareableCanvasRenderer::Initialize(const CanvasInitializeData& aData) {
|
||||||
|
|
||||||
UniquePtr<gl::SurfaceFactory> factory =
|
UniquePtr<gl::SurfaceFactory> factory =
|
||||||
gl::GLScreenBuffer::CreateFactory(mGLContext, caps, forwarder, mFlags);
|
gl::GLScreenBuffer::CreateFactory(mGLContext, caps, forwarder, mFlags);
|
||||||
|
if (factory) {
|
||||||
if (mGLFrontbuffer) {
|
screen->Morph(std::move(factory));
|
||||||
// We're using a source other than the one in the default screen.
|
|
||||||
// (SkiaGL)
|
|
||||||
mFactory = std::move(factory);
|
|
||||||
if (!mFactory) {
|
|
||||||
// Absolutely must have a factory here, so create a basic one
|
|
||||||
mFactory = MakeUnique<gl::SurfaceFactory_Basic>(mGLContext, caps, mFlags);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (factory) screen->Morph(std::move(factory));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,14 +105,11 @@ bool ShareableCanvasRenderer::UpdateTarget(DrawTarget* aDestTarget) {
|
||||||
}
|
}
|
||||||
|
|
||||||
gl::SharedSurface* frontbuffer = nullptr;
|
gl::SharedSurface* frontbuffer = nullptr;
|
||||||
if (mGLFrontbuffer) {
|
|
||||||
frontbuffer = mGLFrontbuffer.get();
|
gl::GLScreenBuffer* screen = mGLContext->Screen();
|
||||||
} else {
|
const auto& front = screen->Front();
|
||||||
gl::GLScreenBuffer* screen = mGLContext->Screen();
|
if (front) {
|
||||||
const auto& front = screen->Front();
|
frontbuffer = front->Surf();
|
||||||
if (front) {
|
|
||||||
frontbuffer = front->Surf();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!frontbuffer) {
|
if (!frontbuffer) {
|
||||||
|
|
|
@ -385,14 +385,7 @@ void CanvasClientSharedSurface::UpdateRenderer(gfx::IntSize aSize,
|
||||||
RefPtr<TextureClient> newFront;
|
RefPtr<TextureClient> newFront;
|
||||||
|
|
||||||
mShSurfClient = nullptr;
|
mShSurfClient = nullptr;
|
||||||
if (canvasRenderer && canvasRenderer->mGLFrontbuffer) {
|
if (gl->Screen()) {
|
||||||
mShSurfClient = CloneSurface(canvasRenderer->mGLFrontbuffer.get(),
|
|
||||||
canvasRenderer->mFactory.get());
|
|
||||||
if (!mShSurfClient) {
|
|
||||||
gfxCriticalError() << "Invalid canvas front buffer";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if (gl->Screen()) {
|
|
||||||
mShSurfClient = gl->Screen()->Front();
|
mShSurfClient = gl->Screen()->Front();
|
||||||
if (mShSurfClient && mShSurfClient->GetAllocator() &&
|
if (mShSurfClient && mShSurfClient->GetAllocator() &&
|
||||||
mShSurfClient->GetAllocator() !=
|
mShSurfClient->GetAllocator() !=
|
||||||
|
|
Загрузка…
Ссылка в новой задаче