From 7fac2e18339f765320d759e8d4c090f92431959e Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Fri, 16 Jul 2010 17:10:13 -0700 Subject: Add plumbing to support gradients in OpenGL renderer. The LinearGradient class keeps a copy of the various parameters that define the gradient. The copies are native arrays to avoid copying Java arrays on every draw call. The gradient code path is implemented until OpenGLRenderer::drawRect() (see TODO.) The actual gradient implementation will be added in a latter change. Change-Id: I9300d250ef5e2e9c2e097c3116ee71dfc9d752d8 --- libs/hwui/OpenGLRenderer.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'libs/hwui/OpenGLRenderer.cpp') diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 0bf0e8942a40..143156331293 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; } -- cgit v1.2.3-59-g8ed1b