DisplayListRenderer.cpp revision c1cd9ba335b293f11e1082447ef08e474710a05f
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", 954cf6e2f34994f160e1baba205a43c12784dd3e0dRomain Guy "Skew", 96ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetMatrix", 97ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ConcatMatrix", 98ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ClipRect", 99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawDisplayList", 100ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLayer", 101ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmap", 102ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapMatrix", 103ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawBitmapRect", 1045a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy "DrawBitmapMesh", 105ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPatch", 106ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawColor", 107ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawRect", 10801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawRoundRect", 10901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy "DrawCircle", 110c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy "DrawOval", 111ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawPath", 112ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawLines", 113ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "DrawText", 114ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShader", 115ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShader", 116ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetColorFilter", 117ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupColorFilter", 118ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "ResetShadow", 119ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy "SetupShadow" 120ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy}; 121ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 122b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain GuyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 1235977baa1fa24125c148a72699b53e62abaf08960Chet Haase initFromDisplayListRenderer(recorder); 1245977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1255977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1265977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList::~DisplayList() { 1275977baa1fa24125c148a72699b53e62abaf08960Chet Haase sk_free((void*) mReader.base()); 1285977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1295977baa1fa24125c148a72699b53e62abaf08960Chet Haase Caches& caches = Caches::getInstance(); 1305977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1315977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 1325977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 1335977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1345977baa1fa24125c148a72699b53e62abaf08960Chet Haase mBitmapResources.clear(); 1355977baa1fa24125c148a72699b53e62abaf08960Chet Haase 13624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 13743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 1385977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 13924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 1405977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1415977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mPaints.size(); i++) { 1425977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mPaints.itemAt(i); 1435977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1445977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPaints.clear(); 1455977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1465977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (size_t i = 0; i < mMatrices.size(); i++) { 1475977baa1fa24125c148a72699b53e62abaf08960Chet Haase delete mMatrices.itemAt(i); 1485977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1495977baa1fa24125c148a72699b53e62abaf08960Chet Haase mMatrices.clear(); 1505977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1515977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mPathHeap) { 1525977baa1fa24125c148a72699b53e62abaf08960Chet Haase for (int i = 0; i < mPathHeap->count(); i++) { 1535977baa1fa24125c148a72699b53e62abaf08960Chet Haase caches.pathCache.removeDeferred(&(*mPathHeap)[i]); 1545977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1555977baa1fa24125c148a72699b53e62abaf08960Chet Haase mPathHeap->safeUnref(); 1565977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 1575977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 1585977baa1fa24125c148a72699b53e62abaf08960Chet Haase 1595977baa1fa24125c148a72699b53e62abaf08960Chet Haasevoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) { 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writer = recorder.writeStream(); 161b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy init(); 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy if (writer.size() == 0) { 164b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return; 165b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 166b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 167b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t size = writer.size(); 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void* buffer = sk_malloc_throw(size); 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy writer.flatten(buffer); 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.setMemory(buffer, size); 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.reset(&recorder.mRCRecorder); 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mRCPlayback.setupBuffer(mReader); 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.reset(&recorder.mTFRecorder); 176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mTFPlayback.setupBuffer(mReader); 177b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 179b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 1815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < bitmapResources.size(); i++) { 1825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = bitmapResources.itemAt(i); 1835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(resource); 1845c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(resource); 185b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 186d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 18724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*> &shaders = recorder.getShaders(); 18824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy for (size_t i = 0; i < shaders.size(); i++) { 18943ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy SkiaShader* shader = shaders.itemAt(i); 19043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mShaders.add(shader); 19143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.incrementRefcount(shader); 192b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 193b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 194d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*> &paints = recorder.getPaints(); 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < paints.size(); i++) { 196d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paints.itemAt(i)); 197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 198d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 200d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase for (size_t i = 0; i < matrices.size(); i++) { 201d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.add(matrices.itemAt(i)); 202d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 203d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = recorder.mPathHeap; 2059e10841c27d973b930e1b49a099c69d866659505Romain Guy if (mPathHeap) { 2069e10841c27d973b930e1b49a099c69d866659505Romain Guy mPathHeap->safeRef(); 2079e10841c27d973b930e1b49a099c69d866659505Romain Guy } 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayList::init() { 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mPathHeap = NULL; 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 214ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 215b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy TextContainer text; 216b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mReader.rewind(); 217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 218ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 219ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy uint32_t count = (level + 1) * 2; 220ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy char indent[count + 1]; 221ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy for (uint32_t i = 0; i < count; i++) { 222ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[i] = ' '; 223ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy } 224ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy indent[count] = '\0'; 225ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 226ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 227b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 228ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy int saveCount = renderer.getSaveCount() - 1; 229b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy while (!mReader.eof()) { 2305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int op = mReader.readInt(); 231ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 232ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 2335b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy switch (op) { 234b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case AcquireContext: { 235b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.acquireContext(); 236b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 237b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 238b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ReleaseContext: { 239b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.releaseContext(); 240b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 241b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 242b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Save: { 243b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.save(getInt()); 244b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 245b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 246b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Restore: { 247b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restore(); 248b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 249b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 250b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case RestoreToCount: { 251b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.restoreToCount(saveCount + getInt()); 252b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 253b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 254b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SaveLayer: { 255b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.saveLayer(getFloat(), getFloat(), getFloat(), getFloat(), 256b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getPaint(), getInt()); 257b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 258b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2595b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy case SaveLayerAlpha: { 2605b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy renderer.saveLayerAlpha(getFloat(), getFloat(), getFloat(), getFloat(), 2615b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy getInt(), getInt()); 2625b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy } 2635b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy break; 264b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Translate: { 265b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.translate(getFloat(), getFloat()); 266b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 267b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 268b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Rotate: { 269b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.rotate(getFloat()); 270b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 271b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 272b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case Scale: { 273b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.scale(getFloat(), getFloat()); 274b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 275b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 276807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy case Skew: { 277807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy renderer.skew(getFloat(), getFloat()); 278807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy } 279807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy break; 280b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetMatrix: { 281b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setMatrix(getMatrix()); 282b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 283b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ConcatMatrix: { 285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.concatMatrix(getMatrix()); 286b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 287b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ClipRect: { 289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.clipRect(getFloat(), getFloat(), getFloat(), getFloat(), 290b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy (SkRegion::Op) getInt()); 291b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 2930fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy case DrawDisplayList: { 294ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy renderer.drawDisplayList(getDisplayList(), level + 1); 2950fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 2960fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy break; 2976c319ca1275c8db892c39b48fc54864c949f9171Romain Guy case DrawLayer: { 298ada830f639591b99c3e40de22b07296c7932a33fRomain Guy renderer.drawLayer((Layer*) getInt(), getFloat(), getFloat(), getPaint()); 2996c319ca1275c8db892c39b48fc54864c949f9171Romain Guy } 3006c319ca1275c8db892c39b48fc54864c949f9171Romain Guy break; 301b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmap: { 302b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getPaint()); 303b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapMatrix: { 306b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getMatrix(), getPaint()); 307b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 308b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 309b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawBitmapRect: { 310b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawBitmap(getBitmap(), getFloat(), getFloat(), getFloat(), getFloat(), 311b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 312b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 313b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 3145a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy case DrawBitmapMesh: { 3155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int verticesCount = 0; 3165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t colorsCount = 0; 3175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy SkBitmap* bitmap = getBitmap(); 3195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshWidth = getInt(); 3205a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy uint32_t meshHeight = getInt(); 3215a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices = getFloats(verticesCount); 3225a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy bool hasColors = getInt(); 3235a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy int* colors = hasColors ? getInts(colorsCount) : NULL; 3245a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 3255a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint()); 3265a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 327b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPatch: { 328b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* xDivs = NULL; 329b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* yDivs = NULL; 3304bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* colors = NULL; 331b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t xDivsCount = 0; 332b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy uint32_t yDivsCount = 0; 3334bb942083a0d4db746adf95349108dd8ef842e32Romain Guy int8_t numColors = 0; 334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 335b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* bitmap = getBitmap(); 336b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 337b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy xDivs = getInts(xDivsCount); 338b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy yDivs = getInts(yDivsCount); 3394bb942083a0d4db746adf95349108dd8ef842e32Romain Guy colors = getUInts(numColors); 340b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 3414bb942083a0d4db746adf95349108dd8ef842e32Romain Guy renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 3424bb942083a0d4db746adf95349108dd8ef842e32Romain Guy numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 343b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 344b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 345b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawColor: { 346b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawColor(getInt(), (SkXfermode::Mode) getInt()); 347b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 348b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 349b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawRect: { 350b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawRect(getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 351b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 352b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 35301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawRoundRect: { 35401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy renderer.drawRoundRect(getFloat(), getFloat(), getFloat(), getFloat(), 35501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy getFloat(), getFloat(), getPaint()); 35601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 35701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 35801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy case DrawCircle: { 35901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy renderer.drawCircle(getFloat(), getFloat(), getFloat(), getPaint()); 36001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy } 36101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy break; 362c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy case DrawOval: { 363c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy renderer.drawOval(getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 364c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy } 365c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy break; 366b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawPath: { 367b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawPath(getPath(), getPaint()); 368b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 369b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 370b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawLines: { 371b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int count = 0; 372b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* points = getFloats(count); 373b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawLines(points, count, getPaint()); 374b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 375b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 376b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case DrawText: { 377b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getText(&text); 378b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.drawText(text.text(), text.length(), getInt(), 379b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy getFloat(), getFloat(), getPaint()); 380b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 381b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 382b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShader: { 383b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShader(); 384b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 385b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 386b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShader: { 3875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase renderer.setupShader(getShader()); 388b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 389b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 390b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetColorFilter: { 391b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetColorFilter(); 392b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 393b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 394b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupColorFilter: { 395ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase renderer.setupColorFilter(getColorFilter()); 396b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 397b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 398b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case ResetShadow: { 399b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.resetShadow(); 400b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 401b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 402b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy case SetupShadow: { 403b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy renderer.setupShadow(getFloat(), getFloat(), getFloat(), getInt()); 404b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 405b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy break; 406b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 407b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 408ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 409ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy DISPLAY_LIST_LOGD("%sDone", (char*) indent + 2); 410b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 411b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 412b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 4134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Base structure 4144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::DisplayListRenderer(): 4174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap(HEAP_BLOCK_SIZE), mWriter(MIN_WRITER_SIZE) { 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 4195977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = NULL; 4204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 4234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy reset(); 4244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::reset() { 4274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy if (mPathHeap) { 4284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap->unref(); 4294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mPathHeap = NULL; 4304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.reset(); 4334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mHeap.reset(); 4344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mRCRecorder.reset(); 4364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mTFRecorder.reset(); 4375c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 4385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mBitmapResources.size(); i++) { 4405c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkBitmap* resource = mBitmapResources.itemAt(i); 4415c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.decrementRefcount(resource); 4425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4435c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.clear(); 444d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 44543ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy for (size_t i = 0; i < mShaders.size(); i++) { 44643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 44743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy } 44824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaders.clear(); 44924c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.clear(); 45043ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy 45143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaints.clear(); 45243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 453d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mMatrices.clear(); 4544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Operations 4584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 4594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4605977baa1fa24125c148a72699b53e62abaf08960Chet HaaseDisplayList* DisplayListRenderer::getDisplayList() { 4615977baa1fa24125c148a72699b53e62abaf08960Chet Haase if (mDisplayList == NULL) { 4625977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList = new DisplayList(*this); 4635977baa1fa24125c148a72699b53e62abaf08960Chet Haase } else { 4645977baa1fa24125c148a72699b53e62abaf08960Chet Haase mDisplayList->initFromDisplayListRenderer(*this); 4655977baa1fa24125c148a72699b53e62abaf08960Chet Haase } 4665977baa1fa24125c148a72699b53e62abaf08960Chet Haase return mDisplayList; 4675977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 4685977baa1fa24125c148a72699b53e62abaf08960Chet Haase 469b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 470b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 471b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 472b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWidth = width; 473b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mHeight = height; 474b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 475b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4766b7bd24659fb175fe1f0e97c86c18969918b496aRomain Guyvoid DisplayListRenderer::prepare(bool opaque) { 477b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot = new Snapshot(mFirstSnapshot, 478b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 479b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSaveCount = 1; 480b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 48127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 48227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 48327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 48427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 48527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 48627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy OpenGLRenderer::finish(); 487b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 488b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::acquireContext() { 490b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::AcquireContext); 4914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::acquireContext(); 4924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::releaseContext() { 495b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ReleaseContext); 4964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::releaseContext(); 4974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 500b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Save); 5014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 5024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::save(flags); 5034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 506b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Restore); 5074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restore(); 5084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 51127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 5124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::restoreToCount(saveCount); 5134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 5165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags) { 517b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SaveLayer); 5184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(p); 5204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(flags); 521b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return OpenGLRenderer::save(flags); 5224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5245b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 5255b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags) { 5265b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addOp(DisplayList::SaveLayerAlpha); 5275b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addBounds(left, top, right, bottom); 5285b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(alpha); 5295b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy addInt(flags); 5305b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy return OpenGLRenderer::save(flags); 5315b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 5325b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 5334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::translate(float dx, float dy) { 534b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Translate); 5354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 5364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::translate(dx, dy); 5374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 540b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Rotate); 5414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(degrees); 5424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::rotate(degrees); 5434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 546b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::Scale); 5474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(sx, sy); 5484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::scale(sx, sy); 5494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 551807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 552807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addOp(DisplayList::Skew); 553807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy addPoint(sx, sy); 554807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy OpenGLRenderer::skew(sx, sy); 555807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 556807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 5574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 558b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetMatrix); 5594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::setMatrix(matrix); 5614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 564b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ConcatMatrix); 5654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 5664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy OpenGLRenderer::concatMatrix(matrix); 5674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 5704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 571b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ClipRect); 5724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 5734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(op); 5744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy return OpenGLRenderer::clipRect(left, top, right, bottom, op); 5754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 577ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guyvoid DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 5780fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addOp(DisplayList::DrawDisplayList); 5790fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addDisplayList(displayList); 5800fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 5810fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 582ada830f639591b99c3e40de22b07296c7932a33fRomain Guyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 5836c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addOp(DisplayList::DrawLayer); 584ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addInt((int) layer); 585ada830f639591b99c3e40de22b07296c7932a33fRomain Guy addPoint(x, y); 5866c319ca1275c8db892c39b48fc54864c949f9171Romain Guy addPaint(paint); 5876c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 5886c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 5894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 5905c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 591b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmap); 5924aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 5934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(left, top); 5944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 5954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 5964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 5975c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 5985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 599b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapMatrix); 6004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addMatrix(matrix); 6024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 6064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 6075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint) { 608b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawBitmapRect); 6094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(srcLeft, srcTop, srcRight, srcBottom); 6114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(dstLeft, dstTop, dstRight, dstBottom); 6124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6155a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 6165a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint) { 6175a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addOp(DisplayList::DrawBitmapMesh); 6185a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addBitmap(bitmap); 6195a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshWidth); 6205a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(meshHeight); 6215a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 6225a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy if (colors) { 6235a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(1); 6245a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 6255a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } else { 6265a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addInt(0); 6275a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy } 6285a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy addPaint(paint); 6295a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 6305a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 6314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 6324bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 6335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint) { 634b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPatch); 6354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBitmap(bitmap); 6364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(xDivs, width); 6374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInts(yDivs, height); 6384bb942083a0d4db746adf95349108dd8ef842e32Romain Guy addUInts(colors, numColors); 6394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 644b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawColor); 6454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 6464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(mode); 6474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 6505c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* paint) { 651b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawRect); 6524aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addBounds(left, top, right, bottom); 6534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 65601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 65701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint) { 65801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawRoundRect); 65901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addBounds(left, top, right, bottom); 66001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(rx, ry); 66101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 66201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 66301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 66401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 66501d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addOp(DisplayList::DrawCircle); 66601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPoint(x, y); 66701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addFloat(radius); 66801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy addPaint(paint); 66901d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 67001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 671c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 672c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy SkPaint* paint) { 673c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addOp(DisplayList::DrawOval); 674c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addBounds(left, top, right, bottom); 675c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy addPaint(paint); 676c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 677c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 6784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 679b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawPath); 6804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPath(path); 6814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6845c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 685b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawLines); 6864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloats(points, count); 6874aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6884aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 6914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float x, float y, SkPaint* paint) { 692b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::DrawText); 6934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addText(text, bytesCount); 6944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(count); 6954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(x, y); 6964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPaint(paint); 6974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 6984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 6994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 700b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShader); 7014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 7045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addOp(DisplayList::SetupShader); 7055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase addShader(shader); 7064aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7074aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetColorFilter() { 709b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetColorFilter); 7104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7114aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 713ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addOp(DisplayList::SetupColorFilter); 714ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase addColorFilter(filter); 7154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7174aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 718b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::ResetShadow); 7194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 722b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy addOp(DisplayList::SetupShadow); 7234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addFloat(radius); 7244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addPoint(dx, dy); 7254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy addInt(color); 7264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 7274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 7284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 7294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 730