DisplayListRenderer.cpp revision 5a7b466a2b4b7ced739bd5c31e022de61650545a
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/////////////////////////////////////////////////////////////////////////////// 257975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy// Defines 267975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 277975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 287975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy#define PATH_HEAP_SIZE 64 297975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 307975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 317975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy// Helpers 327975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 337975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 347975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::PathHeap(): mHeap(PATH_HEAP_SIZE * sizeof(SkPath)) { 357975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 367975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 377975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::PathHeap(SkFlattenableReadBuffer& buffer): mHeap(PATH_HEAP_SIZE * sizeof(SkPath)) { 387975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy int count = buffer.readS32(); 397975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 407975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy mPaths.setCount(count); 417975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** ptr = mPaths.begin(); 427975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath* p = (SkPath*) mHeap.allocThrow(count * sizeof(SkPath)); 437975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 447975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy for (int i = 0; i < count; i++) { 457975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy new (p) SkPath; 467975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy p->unflatten(buffer); 477975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy *ptr++ = p; 487975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy p++; 497975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 507975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 517975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 527975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain GuyPathHeap::~PathHeap() { 537975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** iter = mPaths.begin(); 547975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** stop = mPaths.end(); 557975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy while (iter < stop) { 567975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy (*iter)->~SkPath(); 577975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy iter++; 587975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 597975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 607975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 617975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guyint PathHeap::append(const SkPath& path) { 627975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath* p = (SkPath*) mHeap.allocThrow(sizeof(SkPath)); 637975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy new (p) SkPath(path); 647975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy *mPaths.append() = p; 657975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy return mPaths.count(); 667975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 677975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 687975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guyvoid PathHeap::flatten(SkFlattenableWriteBuffer& buffer) const { 697975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy int count = mPaths.count(); 707975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 717975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy buffer.write32(count); 727975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** iter = mPaths.begin(); 737975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy SkPath** stop = mPaths.end(); 747975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy while (iter < stop) { 757975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy (*iter)->flatten(buffer); 767975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy iter++; 777975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy } 787975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy} 797975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy 807975fb6d12cb1eb96b75e3a563627cd4c4081bd6Romain Guy/////////////////////////////////////////////////////////////////////////////// 81b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 82b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 83b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 84ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyconst char* DisplayList::OP_NAMES[] = { 85ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "AcquireContext", 86ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ReleaseContext", 87ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Save", 88ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Restore", 89ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "RestoreToCount", 90ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayer", 91ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SaveLayerAlpha", 92ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Translate", 93ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Rotate", 94ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "Scale", 95ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 96ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 97ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 98ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 101ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 102ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 1035a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 104ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 106ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 10701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 10801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 109ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 110ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 111ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 117ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShadow" 118ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 119ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 120b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 1215977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1225977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1245977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1265977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1285977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase 13424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 13543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 1365977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 13724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1395977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1415977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mPathHeap) { 1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (int i = 0; i < mPathHeap->count(); i++) { 1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.pathCache.removeDeferred(&(*mPathHeap)[i]); 1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPathHeap->safeUnref(); 1545977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1555977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1565977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1575977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) { 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t size = writer.size(); 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void* buffer = sk_malloc_throw(size); 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.setMemory(buffer, size); 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.reset(&recorder.mRCRecorder); 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.setupBuffer(mReader); 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.reset(&recorder.mTFRecorder); 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.setupBuffer(mReader); 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1765c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 183b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 184d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 18524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 18624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 18743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy SkiaShader* shader = shaders.itemAt(i); 18843ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mShaders.add(shader); 18943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.incrementRefcount(shader); 190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 191b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 192d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 193d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 198d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 201d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = recorder.mPathHeap; 2039e10841c27d973b930e1b49a099c69d866659505Romain Guy if (mPathHeap) { 2049e10841c27d973b930e1b49a099c69d866659505Romain Guy mPathHeap->safeRef(); 2059e10841c27d973b930e1b49a099c69d866659505Romain Guy } 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = NULL; 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 212ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 216ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 217ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 218ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 219ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 220ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 222ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 223ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 224ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 225b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 226ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 2285b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 229ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 230ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 2315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 232b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case AcquireContext: { 233b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.acquireContext(); 234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ReleaseContext: { 237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.releaseContext(); 238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 241b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.save(getInt()); 242b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restoreToCount(saveCount + getInt()); 250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 253b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.saveLayer(getFloat(), getFloat(), getFloat(), getFloat(), 254b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getPaint(), getInt()); 255b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2575b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 2585b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy renderer.saveLayerAlpha(getFloat(), getFloat(), getFloat(), getFloat(), 2595b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy getInt(), getInt()); 2605b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 2615b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 262b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 263b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.translate(getFloat(), getFloat()); 264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 266b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.rotate(getFloat()); 268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 270b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 271b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.scale(getFloat(), getFloat()); 272b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 273b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 274807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 275807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy renderer.skew(getFloat(), getFloat()); 276807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 277807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 278b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 279b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setMatrix(getMatrix()); 280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 282b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 283b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.concatMatrix(getMatrix()); 284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.clipRect(getFloat(), getFloat(), getFloat(), getFloat(), 288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy (SkRegion::Op) getInt()); 289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 290b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2910fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 292ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy renderer.drawDisplayList(getDisplayList(), level + 1); 2930fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 2940fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 2956c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 296ada830f639591b99c3e40de22b07296c7932a33fRomain Guy renderer.drawLayer((Layer*) getInt(), getFloat(), getFloat(), getPaint()); 2976c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 2986c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 299b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 300b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getPaint()); 301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 303b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getMatrix(), getPaint()); 305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 306b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 307b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 308b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getFloat(), getFloat(), 309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 3125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 3135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 3145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 3155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 3175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 3185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 3195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 3205a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 3215a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 3225a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3235a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint()); 3245a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 325b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 326b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 327b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 3284bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 329b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 330b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 3314bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 333b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 335b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 336b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 3374bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 338b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 3394bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 3404bb942083a0d4db746adf95349108dd8ef842e32Romain Guy numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 341b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 342b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 343b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 344b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawColor(getInt(), (SkXfermode::Mode) getInt()); 345b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 346b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 347b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 348b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawRect(getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 349b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 350b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 35101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 35201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy renderer.drawRoundRect(getFloat(), getFloat(), getFloat(), getFloat(), 35301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy getFloat(), getFloat(), getPaint()); 35401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 35501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 35601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 35701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy renderer.drawCircle(getFloat(), getFloat(), getFloat(), getPaint()); 35801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 35901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 360b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 361b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawPath(getPath(), getPaint()); 362b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 363b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 364b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 365b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawLines(points, count, getPaint()); 368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 371b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 372b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawText(text.text(), text.length(), getInt(), 373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getPaint()); 374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 375b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 376b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 379b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 380b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 3815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase renderer.setupShader(getShader()); 382b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 383b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 384b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 385b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 386b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 387b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 388b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 389ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase renderer.setupColorFilter(getColorFilter()); 390b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 391b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 392b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 393b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 394b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 395b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 396b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 397b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setupShadow(getFloat(), getFloat(), getFloat(), getInt()); 398b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 399b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 400b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 401b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 402ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 403ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sDone", (char*) indent + 2); 404b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 405b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 406b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 4074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 4084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer(): 4114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) { 4124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 4135977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = NULL; 4144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 4174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 4214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap) { 4224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap->unref(); 4234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 4244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 4274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap.reset(); 4284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mRCRecorder.reset(); 4304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mTFRecorder.reset(); 4315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 4325c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 4345c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = mBitmapResources.itemAt(i); 4355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.decrementRefcount(resource); 4365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4375c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 438d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 43943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 44043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 44143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 44224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 44324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 44443ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 44543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 44643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 447d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 4484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 4524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4545977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() { 4555977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mDisplayList == NULL) { 4565977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = new DisplayList(*this); 4575977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 4585977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList->initFromDisplayListRenderer(*this); 4595977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 4605977baa1fa24125c148a72699b53e62abaf08960Chet Haase return mDisplayList; 4615977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 4625977baa1fa24125c148a72699b53e62abaf08960Chet Haase 463b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 464b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 465b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 466b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 467b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 468b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 469b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4706b7bd24659fb175fe1f0e97c86c18969918b496aRomain Guyvoid DisplayListRenderer::prepare(bool opaque) { 471b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 472b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 473b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 474b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 475b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 476b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() { 478b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::AcquireContext); 4794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::acquireContext(); 4804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() { 483b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ReleaseContext); 4844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::releaseContext(); 4854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 488b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 4894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 4904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 4914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 494b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Restore); 4954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 4964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 499b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::RestoreToCount); 5004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(saveCount); 5014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 5024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 5055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 506b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 5074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 5094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 510b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 5114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5135b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 5145b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 5155b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 5165b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 5175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 5185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 5195b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 5205b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 5215b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 5224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 523b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 5244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 5254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 5264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 529b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 5304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 5314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 5324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 535b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 5364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 5374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 5384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 540807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 541807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 542807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 543807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 544807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 545807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 5464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 547b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 5484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 5504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 553b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 5544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 5564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 5594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 560b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 5614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 5634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 5644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 566ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 5670fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 5680fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 5690fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 5700fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 571ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 5726c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 573ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 574ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 5756c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 5766c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 5776c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 5784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 5795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 580b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 5814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 5834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5865c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 5875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 588b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 5894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 5954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 5965c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 597b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 5984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 6055a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 6065a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 6075a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 6085a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 6095a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 6105a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 6115a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 6125a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 6135a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 6145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 6155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 6165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 6175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 6185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 6195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 6204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 6214bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 6225c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 623b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 6244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 6264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 6274bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 6284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 633b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 6344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 6354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 6364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 6395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 640b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 6414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 64501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 64601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 64701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 64801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 64901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 65001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 65101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 65201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 65301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 65401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 65501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 65601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 65701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 65801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 65901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 6604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 661b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 6624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 6634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6665c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 667b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 6684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 6694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 6734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 674b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 6754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 6764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 6774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 6784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 682b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 6834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 6865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 6875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 6884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 691b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 6924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 695ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 696ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 6974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 700b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 7014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 704b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 7054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 7064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 7074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 7084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 7114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 712