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

Commit deea2df0 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Fix OpenGL errors in various places."

parents 95ee9628 29d8997b
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -1584,11 +1584,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
        mAttachInfo.mRootView = null;
        mAttachInfo.mSurface = null;

        if (mHwRenderer != null) {
            mHwRenderer.destroy(true);
            mHwRenderer = null;
            mAttachInfo.mHardwareAccelerated = false;
        }
        destroyHardwareRenderer();

        mSurface.release();

@@ -2542,6 +2538,8 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
        if (LOCAL_LOGV) Log.v(TAG, "DIE in " + this + " of " + mSurface);
        synchronized (this) {
            if (mAdded && !mFirst) {
                destroyHardwareRenderer();

                int viewVisibility = mView.getVisibility();
                boolean viewVisibilityChanged = mViewVisibility != viewVisibility;
                if (mWindowAttributesChanged || viewVisibilityChanged) {
@@ -2566,6 +2564,14 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn
        }
    }

    private void destroyHardwareRenderer() {
        if (mHwRenderer != null) {
            mHwRenderer.destroy(true);
            mHwRenderer = null;
            mAttachInfo.mHardwareAccelerated = false;
        }
    }

    public void dispatchFinishedEvent(int seq, boolean handled) {
        Message msg = obtainMessage(FINISHED_EVENT);
        msg.arg1 = seq;
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include "ProgramCache.h"
#include "PathCache.h"
#include "TextDropShadowCache.h"
#include "Line.h"

namespace android {
namespace uirenderer {
@@ -64,6 +65,8 @@ public:
    PatchCache patchCache;
    TextDropShadowCache dropShadowCache;
    GammaFontRenderer fontRenderer;

    Line line;
}; // class Caches

}; // namespace uirenderer
+11 −6
Original line number Diff line number Diff line
@@ -133,6 +133,8 @@ OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()) {

OpenGLRenderer::~OpenGLRenderer() {
    LOGD("Destroy OpenGLRenderer");
    // The context has already been destroyed at this point, do not call
    // GL APIs. All GL state should be kept in Caches.h
}

///////////////////////////////////////////////////////////////////////////////
@@ -615,14 +617,14 @@ void OpenGLRenderer::drawLines(float* points, int count, const SkPaint* paint) {
    const bool isAA = paint->isAntiAlias();
    if (isAA) {
        GLuint textureUnit = 0;
        setupTextureAlpha8(mLine.getTexture(), 0, 0, textureUnit, 0.0f, 0.0f, r, g, b, a,
                mode, false, true, mLine.getVertices(), mLine.getTexCoords());
        setupTextureAlpha8(mCaches.line.getTexture(), 0, 0, textureUnit, 0.0f, 0.0f, r, g, b, a,
                mode, false, true, mCaches.line.getVertices(), mCaches.line.getTexCoords());
    } else {
        setupColorRect(0.0f, 0.0f, 1.0f, 1.0f, r, g, b, a, mode, false);
    }

    const float strokeWidth = paint->getStrokeWidth();
    const GLsizei elementsCount = isAA ? mLine.getElementsCount() : gMeshCount;
    const GLsizei elementsCount = isAA ? mCaches.line.getElementsCount() : gMeshCount;
    const GLenum drawMode = isAA ? GL_TRIANGLES : GL_TRIANGLE_STRIP;

    for (int i = 0; i < count; i += 4) {
@@ -630,7 +632,7 @@ void OpenGLRenderer::drawLines(float* points, int count, const SkPaint* paint) {
        float ty = 0.0f;

        if (isAA) {
            mLine.update(points[i], points[i + 1], points[i + 2], points[i + 3],
            mCaches.line.update(points[i], points[i + 1], points[i + 2], points[i + 3],
                    strokeWidth, tx, ty);
        } else {
            ty = strokeWidth <= 1.0f ? 0.0f : -strokeWidth * 0.5f;
@@ -647,7 +649,8 @@ void OpenGLRenderer::drawLines(float* points, int count, const SkPaint* paint) {
        }
        mModelView.translate(tx, ty, 0.0f);
        if (!isAA) {
            float length = mLine.getLength(points[i], points[i + 1], points[i + 2], points[i + 3]);
            float length = mCaches.line.getLength(points[i], points[i + 1],
                    points[i + 2], points[i + 3]);
            mModelView.scale(length, strokeWidth, 1.0f);
        }
        mCaches.currentProgram->set(mOrthoMatrix, mModelView, *mSnapshot->transform);
@@ -659,8 +662,10 @@ void OpenGLRenderer::drawLines(float* points, int count, const SkPaint* paint) {
        glDrawArrays(drawMode, 0, elementsCount);
    }

    if (isAA) {
        glDisableVertexAttribArray(mCaches.currentProgram->getAttrib("texCoords"));
    }
}

void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
    const Rect& clip = *mSnapshot->clipRect;
+0 −4
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@
#include "SkiaShader.h"
#include "SkiaColorFilter.h"
#include "Caches.h"
#include "Line.h"

namespace android {
namespace uirenderer {
@@ -420,9 +419,6 @@ private:
    // List of rectangles to clear due to calls to saveLayer()
    Vector<Rect*> mLayers;

    // Single object used to draw lines
    Line mLine;

    // Misc
    GLint mMaxTextureSize;

+6 −1
Original line number Diff line number Diff line
@@ -94,6 +94,11 @@ void SkiaBitmapShader::describe(ProgramDescription& description, const Extension
        description.isBitmapNpot = true;
        description.bitmapWrapS = gTileModes[mTileX];
        description.bitmapWrapT = gTileModes[mTileY];
        mWrapS = GL_CLAMP_TO_EDGE;
        mWrapT = GL_CLAMP_TO_EDGE;
    } else {
        mWrapS = gTileModes[mTileX];
        mWrapT = gTileModes[mTileY];
    }
}

@@ -121,7 +126,7 @@ void SkiaBitmapShader::setupProgram(Program* program, const mat4& modelView,
    }

    // Uniforms
    bindTexture(texture->id, gTileModes[mTileX], gTileModes[mTileY], textureSlot);
    bindTexture(texture->id, mWrapS, mWrapT, textureSlot);
    glUniform1i(program->getUniform("bitmapSampler"), textureSlot);
    glUniformMatrix4fv(program->getUniform("textureTransform"), 1,
            GL_FALSE, &textureTransform.data[0]);
Loading