diff options
author | Chris Craik <ccraik@google.com> | 2015-03-03 09:54:14 -0800 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2015-03-03 09:54:14 -0800 |
commit | 0556d90253902ae797e4fcea79602a30ff16f82c (patch) | |
tree | ab516c46f81b1ae35a6803435197704e396f304f /libs | |
parent | a6b52198b9e73a4b7f80103116feeace74433246 (diff) | |
download | frameworks_base-0556d90253902ae797e4fcea79602a30ff16f82c.zip frameworks_base-0556d90253902ae797e4fcea79602a30ff16f82c.tar.gz frameworks_base-0556d90253902ae797e4fcea79602a30ff16f82c.tar.bz2 |
Glop DrawPatch support
Change-Id: Icaa78bdb2cf52c1fc2194ec4016634967d17fb6a
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/GlopBuilder.cpp | 15 | ||||
-rw-r--r-- | libs/hwui/GlopBuilder.h | 1 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 21 |
3 files changed, 36 insertions, 1 deletions
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp index 07d99ab..f94dc38 100644 --- a/libs/hwui/GlopBuilder.cpp +++ b/libs/hwui/GlopBuilder.cpp @@ -18,6 +18,7 @@ #include "Caches.h" #include "Glop.h" #include "Matrix.h" +#include "Patch.h" #include "renderstate/MeshState.h" #include "renderstate/RenderState.h" #include "SkiaShader.h" @@ -189,6 +190,20 @@ GlopBuilder& GlopBuilder::setMeshVertexBuffer(const VertexBuffer& vertexBuffer, return *this; } +GlopBuilder& GlopBuilder::setMeshPatchQuads(const Patch& patch) { + TRIGGER_STAGE(kMeshStage); + + mOutGlop->mesh.primitiveMode = GL_TRIANGLES; + mOutGlop->mesh.indices = { mRenderState.meshState().getQuadListIBO(), nullptr }; + mOutGlop->mesh.vertices = { + mCaches.patchCache.getMeshBuffer(), + VertexAttribFlags::kTextureCoord, + (void*)patch.offset, (void*)patch.textureOffset, nullptr, + kTextureVertexStride }; + mOutGlop->mesh.elementCount = patch.indexCount; + return *this; +} + //////////////////////////////////////////////////////////////////////////////// // Fill //////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/GlopBuilder.h b/libs/hwui/GlopBuilder.h index 8a5ce8a..74d4889 100644 --- a/libs/hwui/GlopBuilder.h +++ b/libs/hwui/GlopBuilder.h @@ -53,6 +53,7 @@ public: GlopBuilder& setMeshTexturedMesh(TextureVertex* vertexData, int elementCount); // TODO: use indexed quads GlopBuilder& setMeshColoredTexturedMesh(ColorTextureVertex* vertexData, int elementCount); // TODO: use indexed quads GlopBuilder& setMeshTexturedIndexedQuads(TextureVertex* vertexData, int elementCount); // TODO: take quadCount + GlopBuilder& setMeshPatchQuads(const Patch& patch); GlopBuilder& setFillPaint(const SkPaint& paint, float alphaScale); GlopBuilder& setFillTexturePaint(Texture& texture, int textureFillFlags, diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index d7f871c..eef4b73 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -2326,9 +2326,28 @@ void OpenGLRenderer::drawPatch(const SkBitmap* bitmap, const Patch* mesh, return; } - mCaches.textureState().activateTexture(0); Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap); if (!texture) return; + + if (USE_GLOPS) { + // 9 patches are built for stretching - always filter + int textureFillFlags = static_cast<int>(TextureFillFlags::kForceFilter); + if (bitmap->colorType() == kAlpha_8_SkColorType) { + textureFillFlags |= TextureFillFlags::kIsAlphaMaskTexture; + } + Glop glop; + GlopBuilder(mRenderState, mCaches, &glop) + .setMeshPatchQuads(*mesh) + .setFillTexturePaint(*texture, textureFillFlags, paint, currentSnapshot()->alpha) + .setTransform(currentSnapshot()->getOrthoMatrix(), *currentTransform(), false) + .setModelViewOffsetRectSnap(left, top, Rect(0, 0, right - left, bottom - top)) // TODO: get minimal bounds from patch + .setRoundRectClipState(currentSnapshot()->roundRectClipState) + .build(); + renderGlop(glop); + return; + } + + mCaches.textureState().activateTexture(0); const AutoTexture autoCleanup(texture); texture->setWrap(GL_CLAMP_TO_EDGE, true); |