Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e788aa45 authored by Brian Salomon's avatar Brian Salomon
Browse files

Use new method of getting top layer FBO details from SkCanvas.

This avoids having to peer through multiple layers of private Skia
abstractions to get the FBO ID and size.

Also use framework-only SkCanvas method to get top layer bounds.

Test: Presubmit checks will test this change.

Bug: skia:11019

Change-Id: I62095162e80c4837485f0f89bd40372846303309
parent 18b99c52
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@
#include <private/hwui/DrawGlInfo.h>
#include "FunctorDrawable.h"
#include "GrBackendSurface.h"
#include "GrRenderTarget.h"
#include "GrRenderTargetContext.h"
#include "RenderNode.h"
#include "SkAndroidFrameworkUtils.h"
#include "SkClipStack.h"
@@ -40,19 +38,13 @@ static void setScissor(int viewportHeight, const SkIRect& clip) {
}

static void GetFboDetails(SkCanvas* canvas, GLuint* outFboID, SkISize* outFboSize) {
    GrRenderTargetContext* renderTargetContext =
            canvas->internal_private_accessTopLayerRenderTargetContext();
    LOG_ALWAYS_FATAL_IF(!renderTargetContext, "Failed to retrieve GrRenderTargetContext");

    GrRenderTarget* renderTarget = renderTargetContext->accessRenderTarget();
    LOG_ALWAYS_FATAL_IF(!renderTarget, "accessRenderTarget failed");

    GrBackendRenderTarget renderTarget = canvas->topLayerBackendRenderTarget();
    GrGLFramebufferInfo fboInfo;
    LOG_ALWAYS_FATAL_IF(!renderTarget->getBackendRenderTarget().getGLFramebufferInfo(&fboInfo),
    LOG_ALWAYS_FATAL_IF(!renderTarget.getGLFramebufferInfo(&fboInfo),
        "getGLFrameBufferInfo failed");

    *outFboID = fboInfo.fFBOID;
    *outFboSize = SkISize::Make(renderTargetContext->width(), renderTargetContext->height());
    *outFboSize = renderTarget.dimensions();
}

void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
@@ -75,7 +67,7 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
    SkISize fboSize;
    GetFboDetails(canvas, &fboID, &fboSize);

    SkIRect surfaceBounds = canvas->internal_private_getTopLayerBounds();
    SkIRect surfaceBounds = canvas->topLayerBounds();
    SkIRect clipBounds = canvas->getDeviceClipBounds();
    SkM44 mat4(canvas->getLocalToDevice());
    SkRegion clipRegion;