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