1f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy/* 2f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * Copyright (C) 2010 The Android Open Source Project 3f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * 4f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * Licensed under the Apache License, Version 2.0 (the "License"); 5f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * you may not use this file except in compliance with the License. 6f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * You may obtain a copy of the License at 7f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * 8f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * http://www.apache.org/licenses/LICENSE-2.0 9f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * 10f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * Unless required by applicable law or agreed to in writing, software 11f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * distributed under the License is distributed on an "AS IS" BASIS, 12f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * See the License for the specific language governing permissions and 14f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * limitations under the License. 15f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy */ 16f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 17f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroypackage android.view; 18f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 19f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Bitmap; 20f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.BitmapShader; 21f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Matrix; 22f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Paint; 23f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Path; 24f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Rect; 25f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.RectF; 26f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroyimport android.graphics.Shader; 27162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport android.util.Pool; 28162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport android.util.Poolable; 29162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport android.util.PoolableManager; 30162a0217563f4665da6eb183dfce0fef740f641fJeff Brownimport android.util.Pools; 31f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 32f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy/** 33f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * An implementation of a GL canvas that records drawing operations. 34f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * This is intended for use with a DisplayList. This class keeps a list of all the Paint and 35f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * Bitmap objects that it draws, preventing the backing memory of Bitmaps from being freed while 36f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy * the DisplayList is still holding a native reference to the memory. 37f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy */ 38162a0217563f4665da6eb183dfce0fef740f641fJeff Brownclass GLES20RecordingCanvas extends GLES20Canvas implements Poolable<GLES20RecordingCanvas> { 39162a0217563f4665da6eb183dfce0fef740f641fJeff Brown // The recording canvas pool should be large enough to handle a deeply nested 40162a0217563f4665da6eb183dfce0fef740f641fJeff Brown // view hierarchy because display lists are generated recursively. 416d7475d666baefaa3ba9f0dcee25238739454241Romain Guy private static final int POOL_LIMIT = 25; 42162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 43162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private static final Pool<GLES20RecordingCanvas> sPool = Pools.synchronizedPool( 44162a0217563f4665da6eb183dfce0fef740f641fJeff Brown Pools.finitePool(new PoolableManager<GLES20RecordingCanvas>() { 45162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public GLES20RecordingCanvas newInstance() { 46162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return new GLES20RecordingCanvas(); 47162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 48162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 49162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public void onAcquired(GLES20RecordingCanvas element) { 50162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 51162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 52162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public void onReleased(GLES20RecordingCanvas element) { 53162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 54162a0217563f4665da6eb183dfce0fef740f641fJeff Brown }, POOL_LIMIT)); 55162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 56162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private GLES20RecordingCanvas mNextPoolable; 57162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private boolean mIsPooled; 58162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 59162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private GLES20DisplayList mDisplayList; 60f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 61162a0217563f4665da6eb183dfce0fef740f641fJeff Brown private GLES20RecordingCanvas() { 62162a0217563f4665da6eb183dfce0fef740f641fJeff Brown super(true /*record*/, true /*translucent*/); 63162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 64162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 65162a0217563f4665da6eb183dfce0fef740f641fJeff Brown static GLES20RecordingCanvas obtain(GLES20DisplayList displayList) { 66162a0217563f4665da6eb183dfce0fef740f641fJeff Brown GLES20RecordingCanvas canvas = sPool.acquire(); 67162a0217563f4665da6eb183dfce0fef740f641fJeff Brown canvas.mDisplayList = displayList; 68162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return canvas; 69162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 70162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 71162a0217563f4665da6eb183dfce0fef740f641fJeff Brown void recycle() { 72162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList = null; 73162a0217563f4665da6eb183dfce0fef740f641fJeff Brown resetDisplayListRenderer(); 74162a0217563f4665da6eb183dfce0fef740f641fJeff Brown sPool.release(this); 75162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 76162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 77162a0217563f4665da6eb183dfce0fef740f641fJeff Brown void start() { 78162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.clear(); 79ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase mDisplayList.mChildDisplayLists.clear(); 80162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 81162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 82162a0217563f4665da6eb183dfce0fef740f641fJeff Brown int end(int nativeDisplayList) { 83162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return getDisplayList(nativeDisplayList); 84f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 85f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 86f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy private void recordShaderBitmap(Paint paint) { 87f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy if (paint != null) { 88f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy final Shader shader = paint.getShader(); 89f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy if (shader instanceof BitmapShader) { 90162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(((BitmapShader) shader).mBitmap); 91f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 92f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 93f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 94f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 95f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 96f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPatch(Bitmap bitmap, byte[] chunks, RectF dst, Paint paint) { 97f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPatch(bitmap, chunks, dst, paint); 98162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 99f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 100f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 101f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 102f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 103f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) { 104f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(bitmap, left, top, paint); 105162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 106f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 107f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 108f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 109f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 110f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) { 111f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(bitmap, matrix, paint); 112162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 113f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 114f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 115f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 116f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 117f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) { 118f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(bitmap, src, dst, paint); 119162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 120f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 121f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 122f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 123f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 124f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) { 125f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(bitmap, src, dst, paint); 126162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 127f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 128f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 129f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 130f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 131f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, 132f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy int height, boolean hasAlpha, Paint paint) { 133f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(colors, offset, stride, x, y, width, height, hasAlpha, paint); 134f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 135f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 136f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 137f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 138f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, 139f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy int height, boolean hasAlpha, Paint paint) { 140f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawBitmap(colors, offset, stride, x, y, width, height, hasAlpha, paint); 141f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 142f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 143f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 144f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 145f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, 146f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy int vertOffset, int[] colors, int colorOffset, Paint paint) { 14733f6beb10f98e8ba96250e284876d607055d278dRomain Guy super.drawBitmapMesh(bitmap, meshWidth, meshHeight, verts, vertOffset, 14833f6beb10f98e8ba96250e284876d607055d278dRomain Guy colors, colorOffset, paint); 149162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mDisplayList.mBitmaps.add(bitmap); 150f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy // Shaders in the Paint are ignored when drawing a Bitmap 151f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 152f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 153f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 154f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawCircle(float cx, float cy, float radius, Paint paint) { 155f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawCircle(cx, cy, radius, paint); 156f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 157f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 158f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 159f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 160ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) { 161ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase int status = super.drawDisplayList(displayList, dirty, flags); 162ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase mDisplayList.mChildDisplayLists.add(displayList); 163ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase return status; 164ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase } 165ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase 166ca479d468be963661fd82634f4b57f21c13f1fe6Chet Haase @Override 167f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) { 168f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawLine(startX, startY, stopX, stopY, paint); 169f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 170f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 171f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 172f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 173f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawLines(float[] pts, int offset, int count, Paint paint) { 174f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawLines(pts, offset, count, paint); 175f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 176f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 177f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 178f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 179f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawLines(float[] pts, Paint paint) { 180f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawLines(pts, paint); 181f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 182f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 183f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 184f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 185f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawOval(RectF oval, Paint paint) { 186f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawOval(oval, paint); 187f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 188f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 189f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 190f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 191f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPaint(Paint paint) { 192f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPaint(paint); 193f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 194f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 195f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 196f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 197f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPath(Path path, Paint paint) { 198f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPath(path, paint); 199f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 200f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 201f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 202f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 203f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPoint(float x, float y, Paint paint) { 204f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPoint(x, y, paint); 205f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 206f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 207f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 208f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 209f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPoints(float[] pts, int offset, int count, Paint paint) { 210f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPoints(pts, offset, count, paint); 211f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 212f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 213f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 214f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 215f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPoints(float[] pts, Paint paint) { 216f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPoints(pts, paint); 217f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 218f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 219f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 220f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 221f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) { 222f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPosText(text, index, count, pos, paint); 223f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 224f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 225f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 226f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 227f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawPosText(String text, float[] pos, Paint paint) { 228f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawPosText(text, pos, paint); 229f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 230f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 231f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 232f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 233f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawRect(float left, float top, float right, float bottom, Paint paint) { 234f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawRect(left, top, right, bottom, paint); 235f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 236f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 237f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 238f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 239f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { 240f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawRoundRect(rect, rx, ry, paint); 241f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 242f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 243f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 244f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 245f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { 246f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawText(text, index, count, x, y, paint); 247f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 248f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 249f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 250f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 251f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawText(CharSequence text, int start, int end, float x, float y, Paint paint) { 252f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawText(text, start, end, x, y, paint); 253f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 254f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 255f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 256f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 257f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawText(String text, int start, int end, float x, float y, Paint paint) { 258f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawText(text, start, end, x, y, paint); 259f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 260f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 261f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 262f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 263f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawText(String text, float x, float y, Paint paint) { 264f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawText(text, x, y, paint); 265f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 266f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 267f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 268f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 269f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, 270f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy float vOffset, Paint paint) { 271f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawTextOnPath(text, index, count, path, hOffset, vOffset, paint); 272f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 273f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 274f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 275f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 276f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) { 277f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawTextOnPath(text, path, hOffset, vOffset, paint); 278f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 279f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 280f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 281f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 282f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount, 283f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy float x, float y, int dir, Paint paint) { 284f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawTextRun(text, index, count, contextIndex, contextCount, x, y, dir, paint); 285f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 286f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 287f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 288f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 289f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawTextRun(CharSequence text, int start, int end, int contextStart, 290f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy int contextEnd, float x, float y, int dir, Paint paint) { 291f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawTextRun(text, start, end, contextStart, contextEnd, x, y, dir, paint); 292f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 293f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 294f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy 295f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy @Override 296f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy public void drawVertices(VertexMode mode, int vertexCount, float[] verts, int vertOffset, 297f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, 298f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy int indexOffset, int indexCount, Paint paint) { 299f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy super.drawVertices(mode, vertexCount, verts, vertOffset, texs, texOffset, colors, 300f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy colorOffset, indices, indexOffset, indexCount, paint); 301f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy recordShaderBitmap(paint); 302f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy } 303162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 304162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 305162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public GLES20RecordingCanvas getNextPoolable() { 306162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return mNextPoolable; 307162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 308162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 309162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 310162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public void setNextPoolable(GLES20RecordingCanvas element) { 311162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mNextPoolable = element; 312162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 313162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 314162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 315162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public boolean isPooled() { 316162a0217563f4665da6eb183dfce0fef740f641fJeff Brown return mIsPooled; 317162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 318162a0217563f4665da6eb183dfce0fef740f641fJeff Brown 319162a0217563f4665da6eb183dfce0fef740f641fJeff Brown @Override 320162a0217563f4665da6eb183dfce0fef740f641fJeff Brown public void setPooled(boolean isPooled) { 321162a0217563f4665da6eb183dfce0fef740f641fJeff Brown mIsPooled = isPooled; 322162a0217563f4665da6eb183dfce0fef740f641fJeff Brown } 323f890fab5a6715548e520a6f010a3bfe7607ce56ePatrick Dubroy} 324