Glop SkiaShader support
Change-Id: I894a0b62701bd02367ab970813e4c332147351a2
diff --git a/libs/hwui/GlopBuilder.cpp b/libs/hwui/GlopBuilder.cpp
index 91e0f89..bdc5c5c2 100644
--- a/libs/hwui/GlopBuilder.cpp
+++ b/libs/hwui/GlopBuilder.cpp
@@ -39,7 +39,7 @@
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 @@
GlopBuilder::GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop)
: mRenderState(renderState)
, mCaches(caches)
+ , mShader(nullptr)
, mOutGlop(outGlop) {
mStageFlags = kInitialStage;
}
@@ -192,12 +193,7 @@
}
}
}
-
- 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 @@
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);