summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp19
-rw-r--r--libs/hwui/OpenGLRenderer.h11
-rw-r--r--libs/hwui/Snapshot.h32
3 files changed, 42 insertions, 20 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 0bf0e89..1431563 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -528,7 +528,7 @@ void OpenGLRenderer::resetShader() {
void OpenGLRenderer::setupBitmapShader(SkBitmap* bitmap, SkShader::TileMode tileX,
SkShader::TileMode tileY, SkMatrix* matrix, bool hasAlpha) {
- mShader = kShaderBitmap;
+ mShader = OpenGLRenderer::kShaderBitmap;
mShaderBlend = hasAlpha;
mShaderBitmap = bitmap;
mShaderTileX = tileX;
@@ -536,6 +536,18 @@ void OpenGLRenderer::setupBitmapShader(SkBitmap* bitmap, SkShader::TileMode tile
mShaderMatrix = matrix;
}
+void OpenGLRenderer::setupLinearGradientShader(float* bounds, uint32_t* colors,
+ float* positions, SkShader::TileMode tileMode, SkMatrix* matrix, bool hasAlpha) {
+ mShader = OpenGLRenderer::kShaderLinearGradient;
+ mShaderBlend = hasAlpha;
+ mShaderTileX = tileMode;
+ mShaderTileY = tileMode;
+ mShaderMatrix = matrix;
+ mShaderBounds = bounds;
+ mShaderColors = colors;
+ mShaderPositions = positions;
+}
+
///////////////////////////////////////////////////////////////////////////////
// Drawing implementation
///////////////////////////////////////////////////////////////////////////////
@@ -555,9 +567,12 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot
const GLfloat b = a * ((color ) & 0xFF) / 255.0f;
switch (mShader) {
- case kShaderBitmap:
+ case OpenGLRenderer::kShaderBitmap:
drawBitmapShader(left, top, right, bottom, a, mode);
return;
+ case OpenGLRenderer::kShaderLinearGradient:
+ // TODO: Generate gradient texture, set appropriate shader
+ break;
default:
break;
}
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 235931c..b3cef88 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -103,6 +103,8 @@ public:
void resetShader();
void setupBitmapShader(SkBitmap* bitmap, SkShader::TileMode tileX, SkShader::TileMode tileY,
SkMatrix* matrix, bool hasAlpha);
+ void setupLinearGradientShader(float* bounds, uint32_t* colors, float* positions,
+ SkShader::TileMode tileMode, SkMatrix* matrix, bool hasAlpha);
private:
/**
@@ -319,13 +321,18 @@ private:
GLenum mLastSrcMode;
GLenum mLastDstMode;
- // Skia shader
+ // Skia shaders
ShaderType mShader;
bool mShaderBlend;
- SkBitmap* mShaderBitmap;
SkShader::TileMode mShaderTileX;
SkShader::TileMode mShaderTileY;
SkMatrix* mShaderMatrix;
+ // Bitmaps
+ SkBitmap* mShaderBitmap;
+ // Gradients
+ float* mShaderBounds;
+ uint32_t* mShaderColors;
+ float* mShaderPositions;
// Various caches
TextureCache mTextureCache;
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 96dfab9..3316c7e 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -90,22 +90,22 @@ public:
transform.mapRect(r);
switch (op) {
- case SkRegion::kDifference_Op:
- break;
- case SkRegion::kIntersect_Op:
- clipped = clipRect.intersect(r);
- break;
- case SkRegion::kUnion_Op:
- clipped = clipRect.unionWith(r);
- break;
- case SkRegion::kXOR_Op:
- break;
- case SkRegion::kReverseDifference_Op:
- break;
- case SkRegion::kReplace_Op:
- clipRect.set(r);
- clipped = true;
- break;
+ case SkRegion::kDifference_Op:
+ break;
+ case SkRegion::kIntersect_Op:
+ clipped = clipRect.intersect(r);
+ break;
+ case SkRegion::kUnion_Op:
+ clipped = clipRect.unionWith(r);
+ break;
+ case SkRegion::kXOR_Op:
+ break;
+ case SkRegion::kReverseDifference_Op:
+ break;
+ case SkRegion::kReplace_Op:
+ clipRect.set(r);
+ clipped = true;
+ break;
}
if (clipped) {