summaryrefslogtreecommitdiff
path: root/libs/hwui/GlopBuilder.cpp
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2015-02-13 17:47:21 -0800
committer Chris Craik <ccraik@google.com> 2015-02-17 15:45:46 -0800
commit922d3a7f6f8c1c05a996ee3e91e8cbadfff560c9 (patch)
tree9b8acab9755321ae0e7564d2250f2106117412cb /libs/hwui/GlopBuilder.cpp
parent91d415d863de73430af100ebd1b4f5b3b795e8d1 (diff)
Glop SkiaShader support
Change-Id: I894a0b62701bd02367ab970813e4c332147351a2
Diffstat (limited to 'libs/hwui/GlopBuilder.cpp')
-rw-r--r--libs/hwui/GlopBuilder.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 91e0f8916f6e..bdc5c5c27552 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -39,7 +39,7 @@ namespace uirenderer {
LOG_ALWAYS_FATAL_IF((mStageFlags & (requiredFlags)) != (requiredFlags), \
"not prepared for current stage")
-static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {;
+static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {
TextureVertex::setUV(quadVertex++, uvs.left, uvs.top);
TextureVertex::setUV(quadVertex++, uvs.right, uvs.top);
TextureVertex::setUV(quadVertex++, uvs.left, uvs.bottom);
@@ -49,6 +49,7 @@ static void setUnitQuadTextureCoords(Rect uvs, TextureVertex* quadVertex) {;
GlopBuilder::GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop)
: mRenderState(renderState)
, mCaches(caches)
+ , mShader(nullptr)
, mOutGlop(outGlop) {
mStageFlags = kInitialStage;
}
@@ -192,12 +193,7 @@ void GlopBuilder::setFill(int color, float alphaScale, SkXfermode::Mode mode,
}
}
}
-
- if (shader) {
- SkiaShader::describe(&mCaches, mDescription, mCaches.extensions(), *shader);
- // TODO: store shader data
- LOG_ALWAYS_FATAL("shaders not yet supported");
- }
+ mShader = shader; // shader resolved in ::build()
if (colorFilter) {
SkColor color;
@@ -394,6 +390,11 @@ GlopBuilder& GlopBuilder::setRoundRectClipState(const RoundRectClipState* roundR
void GlopBuilder::build() {
REQUIRE_STAGES(kAllStages);
+ // serialize shader info into ShaderData
+ GLuint textureUnit = mOutGlop->fill.texture ? 1 : 0;
+ SkiaShader::store(mCaches, mShader, mOutGlop->transform.modelView,
+ &textureUnit, &mDescription, &(mOutGlop->fill.skiaShaderData));
+
mOutGlop->fill.program = mCaches.programCache.get(mDescription);
mOutGlop->transform.canvas.mapRect(mOutGlop->bounds);