DisplayListRenderer.h revision ed6fcb034b44d9a6ac2fc72fee6030417811f234
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 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkChunkAlloc.h> 214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkFlattenable.h> 224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkMatrix.h> 234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPaint.h> 244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkPath.h> 254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkRefCnt.h> 264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTDArray.h> 274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include <SkTSearch.h> 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "OpenGLRenderer.h" 307d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy#include "utils/Functor.h" 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy// Defines 374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#define MIN_WRITER_SIZE 16384 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 41ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy// Debug 42ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#if DEBUG_DISPLAY_LIST 43ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy #define DISPLAY_LIST_LOGD(...) LOGD(__VA_ARGS__) 44ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#else 45ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy #define DISPLAY_LIST_LOGD(...) 46ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy#endif 47ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 49b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Display list 504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/////////////////////////////////////////////////////////////////////////////// 514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 52b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer; 53b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy/** 55b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Replays recorded drawing commands. 564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy */ 57b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayList { 584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guypublic: 59b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayList(const DisplayListRenderer& recorder); 60b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayList(); 614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 62ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // IMPORTANT: Update the intialization of OP_NAMES in the .cpp file 63ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy // when modifying this file 644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy enum Op { 652b1847ea60650a9f68372abe860415f18b55081dRomain Guy Save = 0, 664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Restore, 674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy RestoreToCount, 684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SaveLayer, 695b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy SaveLayerAlpha, 704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Translate, 714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Rotate, 724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy Scale, 73807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy Skew, 744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetMatrix, 754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ConcatMatrix, 764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ClipRect, 770fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DrawDisplayList, 786c319ca1275c8db892c39b48fc54864c949f9171Romain Guy DrawLayer, 794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmap, 804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapMatrix, 814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawBitmapRect, 825a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy DrawBitmapMesh, 834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPatch, 844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawColor, 854aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawRect, 8601d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawRoundRect, 8701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy DrawCircle, 88c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy DrawOval, 898b2f5267f16c295f12faab810527cd6311997e34Romain Guy DrawArc, 904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawPath, 914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawLines, 92ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy DrawPoints, 934aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy DrawText, 944aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShader, 954aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupShader, 964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetColorFilter, 974aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SetupColorFilter, 984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy ResetShadow, 99ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy SetupShadow, 100daf98e941e140e8739458126640183b9f296a2abChet Haase DrawGLFunction, 1014aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy }; 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 103ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy static const char* OP_NAMES[]; 104ffac7fc5042296a459d0f5a450dbfe20917093dcRomain Guy 105d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); 1065977baa1fa24125c148a72699b53e62abaf08960Chet Haase 107cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy bool replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level = 0); 108b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 109b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyprivate: 110b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void init(); 111b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 112d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase void clearResources(); 113d63cbd10765e8f48e39b07b15f0a4b70bf853ec8Chet Haase 114b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy class TextContainer { 115b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy public: 116b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length() const { 117b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mByteLength; 118b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 119b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 120b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* text() const { 121b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (const char*) mText; 122b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 123b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 124b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t mByteLength; 125b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const char* mText; 126b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy }; 127b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 128b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkBitmap* getBitmap() { 1295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkBitmap*) getInt(); 1305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1325c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkiaShader* getShader() { 1335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkiaShader*) getInt(); 134b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 135b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 136ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase SkiaColorFilter* getColorFilter() { 137ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return (SkiaColorFilter*) getInt(); 138ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 139ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 140b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getIndex() { 141b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 142b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 143b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 144b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline int getInt() { 145b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readInt(); 146b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 147b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1487b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy inline uint32_t getUInt() { 1497b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy return mReader.readU32(); 1507b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy } 1517b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 152b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkMatrix* getMatrix() { 1535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkMatrix*) getInt(); 154b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 155b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 156b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPath* getPath() { 1572fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return (SkPath*) getInt(); 158b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 159b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 160b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy SkPaint* getPaint() { 1615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return (SkPaint*) getInt(); 162b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 163b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1640fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DisplayList* getDisplayList() { 1650fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy return (DisplayList*) getInt(); 1660fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 1670fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 168b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline float getFloat() { 169b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mReader.readScalar(); 170b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 171b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 172b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy int32_t* getInts(uint32_t& count) { 173b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 174b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (int32_t*) mReader.skip(count * sizeof(int32_t)); 175b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 176b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1774bb942083a0d4db746adf95349108dd8ef842e32Romain Guy uint32_t* getUInts(int8_t& count) { 1784bb942083a0d4db746adf95349108dd8ef842e32Romain Guy count = getInt(); 1794bb942083a0d4db746adf95349108dd8ef842e32Romain Guy return (uint32_t*) mReader.skip(count * sizeof(uint32_t)); 1804bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 1814bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 182b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy float* getFloats(int& count) { 183b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy count = getInt(); 184b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return (float*) mReader.skip(count * sizeof(float)); 185b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 186b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 187b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void getText(TextContainer* text) { 188b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy size_t length = text->mByteLength = getInt(); 189b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy text->mText = (const char*) mReader.skip(length); 190b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 191b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 1925c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 193ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 194b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 195d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 1962fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy Vector<SkPath*> mPaths; 197d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 19824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 199d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 200b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mutable SkFlattenableReadBuffer mReader; 201b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy}; 202b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 203b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 204b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy// Renderer 205b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/////////////////////////////////////////////////////////////////////////////// 206b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 207b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy/** 208b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy * Records drawing commands in a display list for latter playback. 209b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy */ 210b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyclass DisplayListRenderer: public OpenGLRenderer { 211b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guypublic: 212b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy DisplayListRenderer(); 213b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy ~DisplayListRenderer(); 214b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2155977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList* getDisplayList(); 2165977baa1fa24125c148a72699b53e62abaf08960Chet Haase 217b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy void setViewport(int width, int height); 2187d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy void prepareDirty(float left, float top, float right, float bottom, bool opaque); 21927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void finish(); 220b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 221cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy bool callDrawGLFunction(Functor *functor, Rect& dirty); 2224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 223daf98e941e140e8739458126640183b9f296a2abChet Haase void interrupt(); 224daf98e941e140e8739458126640183b9f296a2abChet Haase void resume(); 225daf98e941e140e8739458126640183b9f296a2abChet Haase 2264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int save(int flags); 2274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restore(); 2284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void restoreToCount(int saveCount); 2294aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy int saveLayer(float left, float top, float right, float bottom, 2315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase SkPaint* p, int flags); 2325b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int saveLayerAlpha(float left, float top, float right, float bottom, 2335b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy int alpha, int flags); 2344aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void translate(float dx, float dy); 2364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void rotate(float degrees); 2374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void scale(float sx, float sy); 238807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy void skew(float sx, float sy); 2394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setMatrix(SkMatrix* matrix); 2414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void concatMatrix(SkMatrix* matrix); 2424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op); 2444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2457b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy bool drawDisplayList(DisplayList* displayList, uint32_t width, uint32_t height, 2467b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy Rect& dirty, uint32_t level = 0); 247ada830f639591b99c3e40de22b07296c7932a33fRomain Guy void drawLayer(Layer* layer, float x, float y, SkPaint* paint); 2485c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint); 2495c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint); 2504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 2514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 2525c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float dstRight, float dstBottom, SkPaint* paint); 2535a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy void drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 2545a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy float* vertices, int* colors, SkPaint* paint); 2554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 2564bb942083a0d4db746adf95349108dd8ef842e32Romain Guy const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 2575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase float left, float top, float right, float bottom, SkPaint* paint); 2584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawColor(int color, SkXfermode::Mode mode); 2595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawRect(float left, float top, float right, float bottom, SkPaint* paint); 26001d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawRoundRect(float left, float top, float right, float bottom, 26101d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy float rx, float ry, SkPaint* paint); 26201d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy void drawCircle(float x, float y, float radius, SkPaint* paint); 263c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy void drawOval(float left, float top, float right, float bottom, SkPaint* paint); 2648b2f5267f16c295f12faab810527cd6311997e34Romain Guy void drawArc(float left, float top, float right, float bottom, 2658b2f5267f16c295f12faab810527cd6311997e34Romain Guy float startAngle, float sweepAngle, bool useCenter, SkPaint* paint); 2664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawPath(SkPath* path, SkPaint* paint); 2675c13d89c1332fcc499379b9064b891187b75ca32Chet Haase void drawLines(float* points, int count, SkPaint* paint); 268ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy void drawPoints(float* points, int count, SkPaint* paint); 2694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void drawText(const char* text, int bytesCount, int count, float x, float y, SkPaint* paint); 2704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShader(); 2724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShader(SkiaShader* shader); 2734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetColorFilter(); 2754aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupColorFilter(SkiaColorFilter* filter); 2764aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2774aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void resetShadow(); 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void setupShadow(float radius, float dx, float dy, int color); 2794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 2804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void reset(); 2814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 282b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy const SkWriter32& writeStream() const { 283b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy return mWriter; 284b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 285b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 2865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase const Vector<SkBitmap*>& getBitmapResources() const { 2875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return mBitmapResources; 288b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 289b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 29024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy const Vector<SkiaShader*>& getShaders() const { 29124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return mShaders; 292b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 293b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 294d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkPaint*>& getPaints() const { 295d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mPaints; 2965c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2975c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 2982fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy const Vector<SkPath*>& getPaths() const { 2992fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return mPaths; 3002fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 3012fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 302d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase const Vector<SkMatrix*>& getMatrices() const { 303d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return mMatrices; 304b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy } 305b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 306ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase const Vector<SkiaColorFilter*>& getFilterResources() const { 307ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return mFilterResources; 308ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 309ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 3104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyprivate: 31127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy void insertRestoreToCount() { 31227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy if (mRestoreSaveCount >= 0) { 31327454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mWriter.writeInt(DisplayList::RestoreToCount); 31427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy addInt(mRestoreSaveCount); 31527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 31627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 31727454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy } 31827454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 319b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy inline void addOp(DisplayList::Op drawOp) { 32027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 3214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(drawOp); 3224aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3234aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3244aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addInt(int value) { 3254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(value); 3264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3287b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy inline void addSize(uint32_t w, uint32_t h) { 3297b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mWriter.writeInt(w); 3307b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mWriter.writeInt(h); 3317b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy } 3327b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 3334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addInts(const int32_t* values, uint32_t count) { 334b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (uint32_t i = 0; i < count; i++) { 3364bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(values[i]); 3374bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3384bb942083a0d4db746adf95349108dd8ef842e32Romain Guy } 3394bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 3404bb942083a0d4db746adf95349108dd8ef842e32Romain Guy void addUInts(const uint32_t* values, int8_t count) { 3414bb942083a0d4db746adf95349108dd8ef842e32Romain Guy mWriter.writeInt(count); 3424bb942083a0d4db746adf95349108dd8ef842e32Romain Guy for (int8_t i = 0; i < count; i++) { 3434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(values[i]); 3444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addFloat(float value) { 3484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(value); 3494aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3504aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3514aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy void addFloats(const float* values, int count) { 352b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy mWriter.writeInt(count); 3534aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy for (int i = 0; i < count; i++) { 3544aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(values[i]); 3554aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addPoint(float x, float y) { 3594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(x); 3604aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(y); 3614aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addBounds(float left, float top, float right, float bottom) { 3644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(left); 3654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(top); 3664aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(right); 3674aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeScalar(bottom); 3684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy inline void addText(const void* text, size_t byteLength) { 3714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writeInt(byteLength); 3724aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy mWriter.writePad(text, byteLength); 3734aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3744aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3752fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy inline void addPath(SkPath* path) { 3762fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy if (!path) { 3772fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy addInt((int) NULL); 3782fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy return; 3792fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy } 3802fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 3812fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy SkPath* pathCopy = mPathMap.valueFor(path); 3822fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) { 383b29cfbf768eab959b31410aafc0a99e20249e9d7Romain Guy pathCopy = new SkPath(*path); 3842fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.add(path, pathCopy); 385b29cfbf768eab959b31410aafc0a99e20249e9d7Romain Guy mPaths.add(pathCopy); 3864aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3872fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 3882fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy addInt((int) pathCopy); 3894aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 3904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addPaint(SkPaint* paint) { 39224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!paint) { 3930fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) NULL); 394d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase return; 395d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 3960fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 39724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkPaint* paintCopy = mPaintMap.valueFor(paint); 398d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) { 399d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase paintCopy = new SkPaint(*paint); 400d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaintMap.add(paint, paintCopy); 401d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase mPaints.add(paintCopy); 402d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase } 4030fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4040fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) paintCopy); 4050fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy } 4060fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 4070fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy inline void addDisplayList(DisplayList* displayList) { 4080fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // TODO: To be safe, the display list should be ref-counted in the 4090fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // resources cache, but we rely on the caller (UI toolkit) to 4100fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy // do the right thing for now 4110fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) displayList); 4124aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addMatrix(SkMatrix* matrix) { 415d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Copying the matrix is cheap and prevents against the user changing the original 416d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // matrix before the operation that uses it 417d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase addInt((int) new SkMatrix(*matrix)); 4184aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addBitmap(SkBitmap* bitmap) { 421d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // Note that this assumes the bitmap is immutable. There are cases this won't handle 422d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // correctly, such as creating the bitmap from scratch, drawing with it, changing its 423d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // contents, and drawing again. The only fix would be to always copy it the first time, 424d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase // which doesn't seem worth the extra cycles for this unlikely case. 4250fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) bitmap); 4265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mBitmapResources.add(bitmap); 4275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Caches& caches = Caches::getInstance(); 4285c13d89c1332fcc499379b9064b891187b75ca32Chet Haase caches.resourceCache.incrementRefcount(bitmap); 4295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 4304aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase inline void addShader(SkiaShader* shader) { 43224c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy if (!shader) { 43324c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) NULL); 43424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy return; 43524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 43624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 43724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy SkiaShader* shaderCopy = mShaderMap.valueFor(shader); 43824c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy // TODO: We also need to handle generation ID changes in compose shaders 4391f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy if (shaderCopy == NULL || shaderCopy->getGenerationId() != shader->getGenerationId()) { 44024c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy shaderCopy = shader->copy(); 44124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy mShaderMap.add(shader, shaderCopy); 4421f1fcb70b6e43a6b4df0dbab75a34429d4744624Romain Guy mShaders.add(shaderCopy); 44343ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy Caches::getInstance().resourceCache.incrementRefcount(shaderCopy); 44424c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy } 44524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 44624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy addInt((int) shaderCopy); 4474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy } 4484aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 449ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase inline void addColorFilter(SkiaColorFilter* colorFilter) { 4500fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy addInt((int) colorFilter); 451ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase mFilterResources.add(colorFilter); 452ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Caches& caches = Caches::getInstance(); 453ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase caches.resourceCache.incrementRefcount(colorFilter); 454ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 455ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 4565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase Vector<SkBitmap*> mBitmapResources; 457ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase Vector<SkiaColorFilter*> mFilterResources; 4584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 459d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkPaint*> mPaints; 4600fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy DefaultKeyedVector<SkPaint*, SkPaint*> mPaintMap; 46124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 4622fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy Vector<SkPath*> mPaths; 4632fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy DefaultKeyedVector<SkPath*, SkPath*> mPathMap; 4642fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy 46524c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy Vector<SkiaShader*> mShaders; 46624c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy DefaultKeyedVector<SkiaShader*, SkiaShader*> mShaderMap; 46724c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 468d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase Vector<SkMatrix*> mMatrices; 469d98aa2de9ab18e09c2be1997f41212740f51f6e6Chet Haase 4704aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkWriter32 mWriter; 4714aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4725977baa1fa24125c148a72699b53e62abaf08960Chet Haase DisplayList *mDisplayList; 4735977baa1fa24125c148a72699b53e62abaf08960Chet Haase 47427454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy int mRestoreSaveCount; 47527454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 476b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy friend class DisplayList; 477b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 4784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // class DisplayListRenderer 4794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4804aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 4814aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 4824aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4835b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_DISPLAY_LIST_RENDERER_H 484