diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 19 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.h | 11 | ||||
-rw-r--r-- | libs/hwui/Snapshot.h | 32 |
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) { |