DisplayListRenderer.cpp revision d63cbd10765e8f48e39b07b15f0a4b70bf853ec8
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/////////////////////////////////////////////////////////////////////////////// 25b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 26b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 27b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 28ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyconst char* DisplayList::OP_NAMES[] = { 29ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 30ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 31ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 32ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 33ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 34ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 35ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 36ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 374cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy "Skew", 38ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 39ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 40ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 41ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 42ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 43ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 44ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 45ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 465a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 47ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 48ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 49ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 5001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 5101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 52c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 538b2f5267f16c295f12faab810527cd6311997e34Romain Guy "DrawArc", 54ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 55ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 56ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 57ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 58ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 59ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 60ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 61ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 62daf98e941e140e8739458126640183b9f296a2abChet Haase "SetupShadow", 63daf98e941e140e8739458126640183b9f296a2abChet Haase "DrawGLFunction" 64ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 65ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 66b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 675977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 685977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 695977baa1fa24125c148a72699b53e62abaf08960Chet Haase 705977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 71d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 72d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase} 73d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 74d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::clearResources() { 755977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 765977baa1fa24125c148a72699b53e62abaf08960Chet Haase 775977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 785977baa1fa24125c148a72699b53e62abaf08960Chet Haase 795977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 805977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 815977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 825977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 835977baa1fa24125c148a72699b53e62abaf08960Chet Haase 8424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 8543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 865977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 8724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 885977baa1fa24125c148a72699b53e62abaf08960Chet Haase 895977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 905977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 915977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 925977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 935977baa1fa24125c148a72699b53e62abaf08960Chet Haase 942fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < mPaths.size(); i++) { 952fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy delete mPaths.itemAt(i); 962fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 972fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 982fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 995977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1005977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1015977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1025977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1035977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1045977baa1fa24125c148a72699b53e62abaf08960Chet Haase 105d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) { 106b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 107b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 108b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 109b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 110b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 111b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 112b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 113d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase if (reusing) { 114d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase // re-using display list - clear out previous allocations 115d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase clearResources(); 116d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase } 117d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 118b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t size = writer.size(); 119b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void* buffer = sk_malloc_throw(size); 120b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 121b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.setMemory(buffer, size); 122b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1235c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 124b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1285c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 130b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 131d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 13224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 13324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 13443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy SkiaShader* shader = shaders.itemAt(i); 13543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mShaders.add(shader); 13643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.incrementRefcount(shader); 137b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 138b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 139d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 140d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 141d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 142d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 143d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 1442fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*> &paths = recorder.getPaths(); 1452fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy for (size_t i = 0; i < paths.size(); i++) { 1462fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.add(paths.itemAt(i)); 1472fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 1482fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 149d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 150d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 151d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 152d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 153b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 154b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 155b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 156b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 157b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 158daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 159daf98e941e140e8739458126640183b9f296a2abChet Haase bool needsInvalidate = false; 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 163ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 164ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 165ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 166ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 167ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 168ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 169ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 170ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 171ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 173ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 1755b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 176ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 1775b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 178daf98e941e140e8739458126640183b9f296a2abChet Haase case DrawGLFunction: { 179daf98e941e140e8739458126640183b9f296a2abChet Haase Functor *functor = (Functor *) getInt(); 180daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 181daf98e941e140e8739458126640183b9f296a2abChet Haase needsInvalidate |= renderer.callDrawGLFunction(functor); 182daf98e941e140e8739458126640183b9f296a2abChet Haase } 183daf98e941e140e8739458126640183b9f296a2abChet Haase break; 184b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 185daf98e941e140e8739458126640183b9f296a2abChet Haase int rendererNum = getInt(); 186daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 187daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.save(rendererNum); 188b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 189b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 191daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 195b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 196daf98e941e140e8739458126640183b9f296a2abChet Haase int restoreCount = saveCount + getInt(); 197daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 198daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.restoreToCount(restoreCount); 199b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 200b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 202daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 203daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 204daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 205daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 206daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 207daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 208daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 209daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, paint, flags); 210daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayer(f1, f2, f3, f4, paint, flags); 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 214daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 215daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 216daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 217daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 218daf98e941e140e8739458126640183b9f296a2abChet Haase int alpha = getInt(); 219daf98e941e140e8739458126640183b9f296a2abChet Haase int flags = getInt(); 220daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 221daf98e941e140e8739458126640183b9f296a2abChet Haase OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 222daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 2235b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 2245b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 225b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 226daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 227daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 228daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 229daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.translate(f1, f2); 230b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 231b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 233daf98e941e140e8739458126640183b9f296a2abChet Haase float rotation = getFloat(); 234daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 235daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.rotate(rotation); 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 239daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 240daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 241daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 242daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.scale(sx, sy); 243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 245807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 246daf98e941e140e8739458126640183b9f296a2abChet Haase float sx = getFloat(); 247daf98e941e140e8739458126640183b9f296a2abChet Haase float sy = getFloat(); 248daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 249daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.skew(sx, sy); 250807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 251807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 253daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 254daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 255daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setMatrix(matrix); 256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 258b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 259daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 260daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 261daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.concatMatrix(matrix); 262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 265daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 266daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 267daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 268daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 269daf98e941e140e8739458126640183b9f296a2abChet Haase int regionOp = getInt(); 270daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 271daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, regionOp); 272daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 273b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 274b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2750fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 276daf98e941e140e8739458126640183b9f296a2abChet Haase DisplayList* displayList = getDisplayList(); 277daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %d", (char*) indent, OP_NAMES[op], 278daf98e941e140e8739458126640183b9f296a2abChet Haase displayList, level + 1); 279daf98e941e140e8739458126640183b9f296a2abChet Haase needsInvalidate |= renderer.drawDisplayList(displayList, level + 1); 2800fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 2810fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 2826c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 283daf98e941e140e8739458126640183b9f296a2abChet Haase Layer* layer = (Layer*) getInt(); 284daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 285daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 286daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 287daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 288daf98e941e140e8739458126640183b9f296a2abChet Haase layer, x, y, paint); 289daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawLayer(layer, x, y, paint); 2906c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 2916c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 293daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 294daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 295daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 296daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 297daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 298daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, x, y, paint); 299daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, x, y, paint); 300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 303daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 304daf98e941e140e8739458126640183b9f296a2abChet Haase SkMatrix* matrix = getMatrix(); 305daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 306daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 307daf98e941e140e8739458126640183b9f296a2abChet Haase bitmap, matrix, paint); 308daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, matrix, paint); 309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 312daf98e941e140e8739458126640183b9f296a2abChet Haase SkBitmap* bitmap = getBitmap(); 313daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 314daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 315daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 316daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 317daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 318daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 319daf98e941e140e8739458126640183b9f296a2abChet Haase float f7 = getFloat(); 320daf98e941e140e8739458126640183b9f296a2abChet Haase float f8 = getFloat(); 321daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 322daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 323daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 324daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 3275a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 3285a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 3295a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 3305a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3315a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 3325a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 3335a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 3345a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 3355a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 3365a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 3375a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 338daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 3395a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint()); 3405a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 341a566b7c3aada08d37cf08096c972e3e641bed773Romain Guy break; 342b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 343b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 344b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 3454bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 346b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 347b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 3484bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 349b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 350b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 351b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 352b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 353b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 3544bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 355b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 356daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 3574bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 3584bb942083a0d4db746adf95349108dd8ef842e32Romain Guy numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 359b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 361b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 362daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 363daf98e941e140e8739458126640183b9f296a2abChet Haase int xferMode = getInt(); 364daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 365daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawColor(color, (SkXfermode::Mode) xferMode); 366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 369daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 370daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 371daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 372daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 373daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 374daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 375daf98e941e140e8739458126640183b9f296a2abChet Haase f1, f2, f3, f4, paint); 376daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRect(f1, f2, f3, f4, paint); 377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 37901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 380daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 381daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 382daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 383daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 384daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 385daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 386daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 387daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 388daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 389daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 39001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 39101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 39201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 393daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 394daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 395daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 396daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 397daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 398daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 399daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawCircle(f1, f2, f3, paint); 40001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 40101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 402c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 403daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 404daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 405daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 406daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 407daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 408daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 409daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 410daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawOval(f1, f2, f3, f4, paint); 411c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 412c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 4138b2f5267f16c295f12faab810527cd6311997e34Romain Guy case DrawArc: { 414daf98e941e140e8739458126640183b9f296a2abChet Haase float f1 = getFloat(); 415daf98e941e140e8739458126640183b9f296a2abChet Haase float f2 = getFloat(); 416daf98e941e140e8739458126640183b9f296a2abChet Haase float f3 = getFloat(); 417daf98e941e140e8739458126640183b9f296a2abChet Haase float f4 = getFloat(); 418daf98e941e140e8739458126640183b9f296a2abChet Haase float f5 = getFloat(); 419daf98e941e140e8739458126640183b9f296a2abChet Haase float f6 = getFloat(); 420daf98e941e140e8739458126640183b9f296a2abChet Haase int i1 = getInt(); 421daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 422daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 423daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 424daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 4258b2f5267f16c295f12faab810527cd6311997e34Romain Guy } 4268b2f5267f16c295f12faab810527cd6311997e34Romain Guy break; 427b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 428daf98e941e140e8739458126640183b9f296a2abChet Haase SkPath* path = getPath(); 429daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 430daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 431daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawPath(path, paint); 432b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 433b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 434b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 435b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 436b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 437daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 438b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawLines(points, count, getPaint()); 439b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 440b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 441b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 442b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 443daf98e941e140e8739458126640183b9f296a2abChet Haase int count = getInt(); 444daf98e941e140e8739458126640183b9f296a2abChet Haase float x = getFloat(); 445daf98e941e140e8739458126640183b9f296a2abChet Haase float y = getFloat(); 446daf98e941e140e8739458126640183b9f296a2abChet Haase SkPaint* paint = getPaint(); 447daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 448daf98e941e140e8739458126640183b9f296a2abChet Haase text.text(), text.length(), count, x, y, paint); 449daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.drawText(text.text(), text.length(), count, x, y, paint); 450b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 451b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 452b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 453daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 454b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 455b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 456b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 457b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 458daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaShader* shader = getShader(); 459daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 460daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShader(shader); 461b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 462b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 463b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 464daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 465b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 466b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 467b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 468b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 469daf98e941e140e8739458126640183b9f296a2abChet Haase SkiaColorFilter *colorFilter = getColorFilter(); 470daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 471daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupColorFilter(colorFilter); 472b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 473b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 474b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 475daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 476b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 477b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 478b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 479b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 480daf98e941e140e8739458126640183b9f296a2abChet Haase float radius = getFloat(); 481daf98e941e140e8739458126640183b9f296a2abChet Haase float dx = getFloat(); 482daf98e941e140e8739458126640183b9f296a2abChet Haase float dy = getFloat(); 483daf98e941e140e8739458126640183b9f296a2abChet Haase int color = getInt(); 484daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 485daf98e941e140e8739458126640183b9f296a2abChet Haase radius, dx, dy, color); 486daf98e941e140e8739458126640183b9f296a2abChet Haase renderer.setupShadow(radius, dx, dy, color); 487daf98e941e140e8739458126640183b9f296a2abChet Haase } 488daf98e941e140e8739458126640183b9f296a2abChet Haase break; 489daf98e941e140e8739458126640183b9f296a2abChet Haase default: 490daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 491daf98e941e140e8739458126640183b9f296a2abChet Haase (char*) indent, OP_NAMES[op]); 492daf98e941e140e8739458126640183b9f296a2abChet Haase break; 493b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 494b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 495ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 496daf98e941e140e8739458126640183b9f296a2abChet Haase DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 497daf98e941e140e8739458126640183b9f296a2abChet Haase return needsInvalidate; 498b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 499b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 500b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 5014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 5024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 5034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5042fc941e4650d618ff6e122f28b616d9032ffa134Romain GuyDisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE) { 5055977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = NULL; 5064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 5094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 5104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 5134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 5145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 5155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 5165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 5175c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = mBitmapResources.itemAt(i); 5185c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.decrementRefcount(resource); 5195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 5205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 521d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 52243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 52343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 52443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 52524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 52624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 52743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 52843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 52943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 5302fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPaths.clear(); 5312fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 532d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 5334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 5364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 5374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 5384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5395977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() { 5405977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mDisplayList == NULL) { 5415977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = new DisplayList(*this); 5425977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 543d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase mDisplayList->initFromDisplayListRenderer(*this, true); 5445977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 5455977baa1fa24125c148a72699b53e62abaf08960Chet Haase return mDisplayList; 5465977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 5475977baa1fa24125c148a72699b53e62abaf08960Chet Haase 548b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 549b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 550b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 551b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 552b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 553b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 554b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 5557d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guyvoid DisplayListRenderer::prepareDirty(float left, float top, 5567d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 557b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 558b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 559b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 560b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 56127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 56227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 56327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 56427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 56527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 56627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 567b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 568b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 569daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 570daf98e941e140e8739458126640183b9f296a2abChet Haase} 571daf98e941e140e8739458126640183b9f296a2abChet Haase 5722b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 5734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 575daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::callDrawGLFunction(Functor *functor) { 576daf98e941e140e8739458126640183b9f296a2abChet Haase addOp(DisplayList::DrawGLFunction); 577daf98e941e140e8739458126640183b9f296a2abChet Haase addInt((int) functor); 578daf98e941e140e8739458126640183b9f296a2abChet Haase return false; // No invalidate needed at record-time 579daf98e941e140e8739458126640183b9f296a2abChet Haase} 580daf98e941e140e8739458126640183b9f296a2abChet Haase 5814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 582b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 5834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 5844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 5854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 588b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Restore); 5894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 5904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 59327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 5944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 5954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 5985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 599b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 6024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 603b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 6044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6065b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 6075b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 6085b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 6095b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 6105b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 6115b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 6125b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 6135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 6145b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 6154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 616b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 6174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 6184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 6194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 622b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 6234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 6244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 6254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 628b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 6294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 6304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 6314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 633807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 634807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 635807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 636807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 637807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 638807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 6394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 640b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 6414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 6424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 6434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 646b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 6474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 6484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 6494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 6524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 653b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 6544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 6564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 6574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 659daf98e941e140e8739458126640183b9f296a2abChet Haasebool DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 6600fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 6610fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 662daf98e941e140e8739458126640183b9f296a2abChet Haase return false; 6630fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 6640fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 665ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 6666c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 667ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 668ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 6696c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 6706c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 6716c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 6724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 6735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 674b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 6754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 6774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6805c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 6815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 682b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 6834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 6854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 6894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 6905c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 691b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 6924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 6944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 6954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6985a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 6995a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 7005a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 7015a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 7025a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 7035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 7045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 7055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 7065a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 7075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 7085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 7095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 7105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 7115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 7125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 7135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 7144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 7154bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 7165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 717b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 7184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 7194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 7204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 7214bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 7224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 7234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 727b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 7284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 7294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 7304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 7335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 734b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 7354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 7364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 73901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 74001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 74101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 74201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 74301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 74401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 74501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 74601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 74701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 74801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 74901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 75001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 75101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 75201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 75301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 754c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 755c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 756c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 757c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 758c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 759c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 760c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 7618b2f5267f16c295f12faab810527cd6311997e34Romain Guyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 7628b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 76382d41a515368236e56454bd84023bebd6306f6b7Romain Guy addOp(DisplayList::DrawArc); 7648b2f5267f16c295f12faab810527cd6311997e34Romain Guy addBounds(left, top, right, bottom); 7658b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPoint(startAngle, sweepAngle); 7668b2f5267f16c295f12faab810527cd6311997e34Romain Guy addInt(useCenter ? 1 : 0); 7678b2f5267f16c295f12faab810527cd6311997e34Romain Guy addPaint(paint); 7688b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 7698b2f5267f16c295f12faab810527cd6311997e34Romain Guy 7704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 771b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 7724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 7734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7765c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 777b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 7784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 7794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 7834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 784b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 7854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 7864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 7874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 7884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 7894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 792b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 7934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 7965c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 7975c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 7984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 801b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 8024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 805ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 806ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 8074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 810b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 8114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 814b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 8154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 8164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 8174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 8184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 8194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 8204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 8214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 822