DisplayListRenderer.cpp revision 4aa90573bbf86db0d33a3a790c5dbd0d93b95cfe
14aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/* 24aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Copyright (C) 2010 The Android Open Source Project 34aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 44aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 54aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * you may not use this file except in compliance with the License. 64aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * You may obtain a copy of the License at 74aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 84aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 94aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * 104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * Unless required by applicable law or agreed to in writing, software 114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * See the License for the specific language governing permissions and 144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy * limitations under the License. 154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define LOG_TAG "OpenGLRenderer" 184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "DisplayListRenderer.h" 204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer(): 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) { 304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mBitmapIndex = mMatrixIndex = mPaintIndex = 1; 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap) { 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap->unref(); 414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mBitmaps.reset(); 454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mMatrices.reset(); 464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPaints.reset(); 474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap.reset(); 504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mRCRecorder.reset(); 524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mTFRecorder.reset(); 534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() { 604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(AcquireContext); 614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::acquireContext(); 624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() { 654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ReleaseContext); 664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::releaseContext(); 674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(Save); 714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(Restore); 774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(RestoreToCount); 824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(saveCount); 834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* p, int flags) { 884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(SaveLayer); 894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::saveLayer(left, top, right, bottom, p, flags); 934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(Translate); 974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(Rotate); 1034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 1044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 1054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(Scale); 1094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 1104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 1114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 1144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(SetMatrix); 1154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 1164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 1174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 1204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ConcatMatrix); 1214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 1224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 1234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 1264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ClipRect); 1284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 1294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 1304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 1314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 1344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* paint) { 1354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawBitmap); 1364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 1374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 1384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawBitmap(bitmap, left, top, paint); 1404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, const SkMatrix* matrix, 1434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* paint) { 1444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawBitmapMatrix); 1454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 1464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 1474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawBitmap(bitmap, matrix, paint); 1494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 1524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 1534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float dstRight, float dstBottom, const SkPaint* paint) { 1544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawBitmapRect); 1554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 1564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 1574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 1584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawBitmap(bitmap, srcLeft, srcTop, srcRight, srcBottom, 1604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy dstLeft, dstTop, dstRight, dstBottom, paint); 1614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 1644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy uint32_t width, uint32_t height, float left, float top, float right, float bottom, 1654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* paint) { 1664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawPatch); 1674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 1684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 1694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 1704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 1714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawPatch(bitmap, xDivs, yDivs, width, height, 1734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy left, top, right, bottom, paint); 1744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 1774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawColor); 1784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 1794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 1804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawColor(color, mode); 1814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 1844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy const SkPaint* paint) { 1854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawRect); 1864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 1874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawRect(left, top, right, bottom, paint); 1894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 1924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawPath); 1934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 1944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 1954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawPath(path, paint); 1964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawLines(float* points, int count, const SkPaint* paint) { 1994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawLines); 2004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 2014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 2024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawLines(points, count, paint); 2034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 2064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 2074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(DrawText); 2084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 2094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 2104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 2114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 2124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::drawText(text, bytesCount, count, x, y, paint); 2134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 2164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ResetShader); 2174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::resetShader(); 2184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 2214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy // TODO: Implement 2224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setupShader(shader); 2234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 2264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ResetColorFilter); 2274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::resetColorFilter(); 2284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 2314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy // TODO: Implement 2324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setupColorFilter(filter); 2334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 2364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(ResetShadow); 2374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::resetShadow(); 2384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 2414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addOp(SetupShadow); 2424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 2434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 2444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 2454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setupShadow(radius, dx, dy, color); 2464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 2494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Recording management 2504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 2514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::find(SkTDArray<const SkFlatPaint*>& paints, const SkPaint* paint) { 2534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (paint == NULL) { 2544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return 0; 2554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkFlatPaint* flat = SkFlatPaint::Flatten(&mHeap, *paint, mPaintIndex, 2584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy &mRCRecorder, &mTFRecorder); 2594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int index = SkTSearch<SkFlatData>((const SkFlatData**) paints.begin(), 2604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy paints.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); 2614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (index >= 0) { 2624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy (void) mHeap.unalloc(flat); 2634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return paints[index]->index(); 2644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy index = ~index; 2674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy *paints.insert(index) = flat; 2684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return mPaintIndex++; 2694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::find(SkTDArray<const SkFlatMatrix*>& matrices, const SkMatrix* matrix) { 2724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (matrix == NULL) { 2734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return 0; 2744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkFlatMatrix* flat = SkFlatMatrix::Flatten(&mHeap, *matrix, mMatrixIndex); 2774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int index = SkTSearch<SkFlatData>((const SkFlatData**) matrices.begin(), 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy matrices.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); 2794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (index >= 0) { 2804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy (void) mHeap.unalloc(flat); 2814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return matrices[index]->index(); 2824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy index = ~index; 2844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy *matrices.insert(index) = flat; 2854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return mMatrixIndex++; 2864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::find(SkTDArray<const SkFlatBitmap*>& bitmaps, const SkBitmap& bitmap) { 2894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkFlatBitmap* flat = SkFlatBitmap::Flatten(&mHeap, bitmap, mBitmapIndex, &mRCRecorder); 2904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int index = SkTSearch<SkFlatData>((const SkFlatData**) bitmaps.begin(), 2914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy bitmaps.count(), (SkFlatData*) flat, sizeof(flat), &SkFlatData::Compare); 2924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (index >= 0) { 2934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy (void) mHeap.unalloc(flat); 2944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return bitmaps[index]->index(); 2954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 2964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy index = ~index; 2974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy *bitmaps.insert(index) = flat; 2984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return mBitmapIndex++; 2994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 3024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 303