DisplayListRenderer.cpp revision 113e0824d6bddf4376240681f9cf6a2deded9498
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 19d5a85fb63d91a9297e8d9a11016f3b3ed60dfbabRomain Guy#include <SkCamera.h> 20c46d07a29e94807e768f8b162ce9f77a88ba6f46Romain Guy#include <SkCanvas.h> 219c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase 226554943a1dd6854c0f4976900956e556767b49e1Romain Guy#include <private/hwui/DrawGlInfo.h> 236554943a1dd6854c0f4976900956e556767b49e1Romain Guy 24113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "Caches.h" 25c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craik#include "DeferredDisplayList.h" 269c1e23baf5bfbebd1aebbd6d9a18c225325567ceChet Haase#include "DisplayListLogBuffer.h" 272af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik#include "DisplayListOp.h" 284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy#include "DisplayListRenderer.h" 29113e0824d6bddf4376240681f9cf6a2deded9498John Reck#include "RenderNode.h" 3013631f3da855f200a151e7837ed9f6b079622b58Romain Guy 314aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace android { 324aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guynamespace uirenderer { 334aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 3458ecc204fbcacef34806290492384677a330d4d4Romain GuyDisplayListRenderer::DisplayListRenderer(): 35eea6ef9c767c734797912022113191dd255c4ae6Chris Craik mCaches(Caches::getInstance()), mDisplayListData(0), 3654c1a64d5441a964890b44280e4457e11f4f924aRomain Guy mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false), 37eea6ef9c767c734797912022113191dd255c4ae6Chris Craik mRestoreSaveCount(-1) { 384aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 394aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain GuyDisplayListRenderer::~DisplayListRenderer() { 4144fd8d24f761f82d21e9b00932648a1b6bf91449John Reck LOG_ALWAYS_FATAL_IF(mDisplayListData, 4244fd8d24f761f82d21e9b00932648a1b6bf91449John Reck "Destroyed a DisplayListRenderer during a record!"); 434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 444aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4544fd8d24f761f82d21e9b00932648a1b6bf91449John Reck/////////////////////////////////////////////////////////////////////////////// 4644fd8d24f761f82d21e9b00932648a1b6bf91449John Reck// Operations 4744fd8d24f761f82d21e9b00932648a1b6bf91449John Reck/////////////////////////////////////////////////////////////////////////////// 48d34dd71800d9a1077e58c3b7f2511c46848da417Chet Haase 4944fd8d24f761f82d21e9b00932648a1b6bf91449John ReckDisplayListData* DisplayListRenderer::finishRecording() { 5058ecc204fbcacef34806290492384677a330d4d4Romain Guy mShaderMap.clear(); 5143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy mPaintMap.clear(); 52735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy mRegionMap.clear(); 532fc941e4650d618ff6e122f28b616d9032ffa134Romain Guy mPathMap.clear(); 5444fd8d24f761f82d21e9b00932648a1b6bf91449John Reck DisplayListData* data = mDisplayListData; 5544fd8d24f761f82d21e9b00932648a1b6bf91449John Reck mDisplayListData = 0; 5644fd8d24f761f82d21e9b00932648a1b6bf91449John Reck return data; 575977baa1fa24125c148a72699b53e62abaf08960Chet Haase} 585977baa1fa24125c148a72699b53e62abaf08960Chet Haase 59b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guyvoid DisplayListRenderer::setViewport(int width, int height) { 60f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik // TODO: DisplayListRenderer shouldn't have a projection matrix, as it should never be used 61f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik mViewProjMatrix.loadOrtho(0, width, height, 0, -1, 1); 62b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 6314e513058ed4168c94e015638d16f5f87fd8063aChris Craik initializeViewport(width, height); 64b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 65b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 667c25aab491707f7324f9941b8cfa9bd2b4b97e76Romain Guystatus_t DisplayListRenderer::prepareDirty(float left, float top, 677d7b5490a0b0763e831b31bc11f17d8159b5914aRomain Guy float right, float bottom, bool opaque) { 6844fd8d24f761f82d21e9b00932648a1b6bf91449John Reck 6944fd8d24f761f82d21e9b00932648a1b6bf91449John Reck LOG_ALWAYS_FATAL_IF(mDisplayListData, 7044fd8d24f761f82d21e9b00932648a1b6bf91449John Reck "prepareDirty called a second time during a recording!"); 7144fd8d24f761f82d21e9b00932648a1b6bf91449John Reck mDisplayListData = new DisplayListData(); 7244fd8d24f761f82d21e9b00932648a1b6bf91449John Reck 7314e513058ed4168c94e015638d16f5f87fd8063aChris Craik initializeSaveStack(0, 0, getWidth(), getHeight()); 7445e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy 7545e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy mDirtyClip = opaque; 7627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = -1; 7745e4c3df6c00ac98ff6144de9af574877d4fff19Romain Guy 7844b2fe3fc114ee5f7273c6b0fee2cc999bf244a2Chet Haase return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 7927454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy} 8027454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy 8127454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guyvoid DisplayListRenderer::finish() { 8227454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy insertRestoreToCount(); 832af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik insertTranslate(); 84b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy} 85b051e895ccb696604349c6c5efe7c4747e1d1ab6Romain Guy 86daf98e941e140e8739458126640183b9f296a2abChet Haasevoid DisplayListRenderer::interrupt() { 87daf98e941e140e8739458126640183b9f296a2abChet Haase} 88daf98e941e140e8739458126640183b9f296a2abChet Haase 892b1847ea60650a9f68372abe860415f18b55081dRomain Guyvoid DisplayListRenderer::resume() { 904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 926554943a1dd6854c0f4976900956e556767b49e1Romain Guystatus_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { 93cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // Ignore dirty during recording, it matters only when we replay 942af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawFunctorOp(functor)); 9544fd8d24f761f82d21e9b00932648a1b6bf91449John Reck mDisplayListData->functorCount++; 966554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; // No invalidate needed at record-time 97daf98e941e140e8739458126640183b9f296a2abChet Haase} 98daf98e941e140e8739458126640183b9f296a2abChet Haase 994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::save(int flags) { 1002af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SaveOp(flags)); 10114e513058ed4168c94e015638d16f5f87fd8063aChris Craik return StatefulBaseRenderer::save(flags); 1024aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restore() { 10504c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy if (mRestoreSaveCount < 0) { 10633f6beb10f98e8ba96250e284876d607055d278dRomain Guy restoreToCount(getSaveCount() - 1); 10733f6beb10f98e8ba96250e284876d607055d278dRomain Guy return; 10804c9d8c2ffd028c35c750bac0a4a7b79e48059b5Romain Guy } 10933f6beb10f98e8ba96250e284876d607055d278dRomain Guy 11033f6beb10f98e8ba96250e284876d607055d278dRomain Guy mRestoreSaveCount--; 1112af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik insertTranslate(); 11214e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::restore(); 1134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::restoreToCount(int saveCount) { 11627454a42de8b3c54cdd3b2b2a12446c2c10c8cb9Romain Guy mRestoreSaveCount = saveCount; 1172af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik insertTranslate(); 11814e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::restoreToCount(saveCount); 1194aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1204aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1214aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 122d44fbe55a9f434cb5bb0e34c143ba1445141990dDerek Sollenberger const SkPaint* paint, int flags) { 123d44fbe55a9f434cb5bb0e34c143ba1445141990dDerek Sollenberger paint = refPaint(paint); 124d44fbe55a9f434cb5bb0e34c143ba1445141990dDerek Sollenberger addStateOp(new (alloc()) SaveLayerOp(left, top, right, bottom, paint, flags)); 12514e513058ed4168c94e015638d16f5f87fd8063aChris Craik return StatefulBaseRenderer::save(flags); 1265b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy} 1275b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 128b458942bb6e6cf13c68341dda35ef5cee060f5aeChris Craikvoid DisplayListRenderer::translate(float dx, float dy, float dz) { 129b458942bb6e6cf13c68341dda35ef5cee060f5aeChris Craik // ignore dz, not used at defer time 13033f6beb10f98e8ba96250e284876d607055d278dRomain Guy mHasTranslate = true; 13133f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateX += dx; 13233f6beb10f98e8ba96250e284876d607055d278dRomain Guy mTranslateY += dy; 13333f6beb10f98e8ba96250e284876d607055d278dRomain Guy insertRestoreToCount(); 13414e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::translate(dx, dy, dz); 1354aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1364aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1374aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::rotate(float degrees) { 1382af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) RotateOp(degrees)); 13914e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::rotate(degrees); 1404aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1414aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::scale(float sx, float sy) { 1432af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ScaleOp(sx, sy)); 14414e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::scale(sx, sy); 1454aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 147807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guyvoid DisplayListRenderer::skew(float sx, float sy) { 1482af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SkewOp(sx, sy)); 14914e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::skew(sx, sy); 150807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy} 151807daf7df615b60ce6fc41355aabe3aa353cebabRomain Guy 152d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikvoid DisplayListRenderer::setMatrix(const SkMatrix* matrix) { 1532af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik matrix = refMatrix(matrix); 1542af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SetMatrixOp(matrix)); 15514e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::setMatrix(matrix); 1564aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1574aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 158d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikvoid DisplayListRenderer::concatMatrix(const SkMatrix* matrix) { 1592af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik matrix = refMatrix(matrix); 1602af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ConcatMatrixOp(matrix)); 16114e513058ed4168c94e015638d16f5f87fd8063aChris Craik StatefulBaseRenderer::concatMatrix(matrix); 1624aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1634aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 1644aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 1654aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy SkRegion::Op op) { 1662af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ClipRectOp(left, top, right, bottom, op)); 167d6b65f67717025b1162f86f04e2caa5723566cacChris Craik return StatefulBaseRenderer::clipRect(left, top, right, bottom, op); 1684aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 1694aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 170d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikbool DisplayListRenderer::clipPath(const SkPath* path, SkRegion::Op op) { 1712af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik path = refPath(path); 1722af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ClipPathOp(path, op)); 173d6b65f67717025b1162f86f04e2caa5723566cacChris Craik return StatefulBaseRenderer::clipPath(path, op); 174735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy} 175735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy 176d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikbool DisplayListRenderer::clipRegion(const SkRegion* region, SkRegion::Op op) { 1772af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik region = refRegion(region); 1782af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ClipRegionOp(region, op)); 179d6b65f67717025b1162f86f04e2caa5723566cacChris Craik return StatefulBaseRenderer::clipRegion(region, op); 180735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy} 181735738c4ddf3229caa5f6e634bf591953ac29944Romain Guy 182e18264b079481a244b30e3f71012c53bbd861f92John Reckstatus_t DisplayListRenderer::drawDisplayList(RenderNode* displayList, 183c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craik Rect& dirty, int32_t flags) { 184cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // dirty is an out parameter and should not be recorded, 185cabfcc1364eb7e4de0b15b3574fba45027b45cfcRomain Guy // it matters only when replaying the display list 186b85967b9af76e1e60f7a96603e2567a6449d2e04Chet Haase 1872af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik // TODO: To be safe, the display list should be ref-counted in the 1882af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik // resources cache, but we rely on the caller (UI toolkit) to 1892af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik // do the right thing for now 1902af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 191d6b65f67717025b1162f86f04e2caa5723566cacChris Craik DrawDisplayListOp* op = new (alloc()) DrawDisplayListOp(displayList, 192d6b65f67717025b1162f86f04e2caa5723566cacChris Craik flags, *currentTransform()); 193f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik addDrawOp(op); 194f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik mDisplayListData->children.push(op); 1951df26446b7eac7050767c38ca977fde03a41a033Chris Craik if (displayList->isProjectionReceiver()) { 1961df26446b7eac7050767c38ca977fde03a41a033Chris Craik mDisplayListData->projectionReceiveIndex = mDisplayListData->displayListOps.size() - 1; 1971df26446b7eac7050767c38ca977fde03a41a033Chris Craik } 198f57776b2d195f0937906eb88b777bb55ccc36967Chris Craik 1996554943a1dd6854c0f4976900956e556767b49e1Romain Guy return DrawGlInfo::kStatusDone; 2000fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy} 2010fe478ea04720a57ef3919dbc23711bc7eba517fRomain Guy 202a08f95cfeca7217f9c533b03663bf0dceedd259aChris Craikstatus_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y) { 203ce4a7dfc516ee61301e9af91fad17ca1320efaabRomain Guy layer = refLayer(layer); 204a08f95cfeca7217f9c533b03663bf0dceedd259aChris Craik addDrawOp(new (alloc()) DrawLayerOp(layer, x, y)); 205486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2066c319ca1275c8db892c39b48fc54864c949f9171Romain Guy} 2076c319ca1275c8db892c39b48fc54864c949f9171Romain Guy 208d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, float left, float top, 209d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPaint* paint) { 2102af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmap(bitmap); 2112af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2122af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 21355b6f95ee4ace96c97508bcd14483fb4e9dbeaa0Romain Guy addDrawOp(new (alloc()) DrawBitmapOp(bitmap, left, top, paint)); 214486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2154aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2164aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 217d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix, 218d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPaint* paint) { 2192af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmap(bitmap); 2202af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik matrix = refMatrix(matrix); 2212af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2222af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 2232af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawBitmapMatrixOp(bitmap, matrix, paint)); 224486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2254aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 227d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, float srcLeft, float srcTop, 2284aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy float srcRight, float srcBottom, float dstLeft, float dstTop, 229d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik float dstRight, float dstBottom, const SkPaint* paint) { 2302af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmap(bitmap); 2312af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2322af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 233527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik if (srcLeft == 0 && srcTop == 0 && 234527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik srcRight == bitmap->width() && srcBottom == bitmap->height() && 235527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik (srcBottom - srcTop == dstBottom - dstTop) && 236527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik (srcRight - srcLeft == dstRight - dstLeft)) { 237527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik // transform simple rect to rect drawing case into position bitmap ops, since they merge 23855b6f95ee4ace96c97508bcd14483fb4e9dbeaa0Romain Guy addDrawOp(new (alloc()) DrawBitmapOp(bitmap, dstLeft, dstTop, paint)); 239527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik return DrawGlInfo::kStatusDone; 240527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik } 241527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik 2422af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawBitmapRectOp(bitmap, 2432af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik srcLeft, srcTop, srcRight, srcBottom, 2442af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik dstLeft, dstTop, dstRight, dstBottom, paint)); 245486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2464aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2474aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 248d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawBitmapData(const SkBitmap* bitmap, float left, float top, 249d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPaint* paint) { 2502af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmapData(bitmap); 2512af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2522af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 2532af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawBitmapDataOp(bitmap, left, top, paint)); 254486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 255e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy} 256e651cc6239616a202f6e96ebc2ed93b4b8b3627cRomain Guy 257d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight, 258d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const float* vertices, const int* colors, const SkPaint* paint) { 2592af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik int count = (meshWidth + 1) * (meshHeight + 1) * 2; 2602af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmap(bitmap); 2612af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik vertices = refBuffer<float>(vertices, count); 2622af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2632af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik colors = refBuffer<int>(colors, count); 2642af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 2652af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawBitmapMeshOp(bitmap, meshWidth, meshHeight, 2662af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik vertices, colors, paint)); 267486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2685a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy} 2695a7b466a2b4b7ced739bd5c31e022de61650545aRomain Guy 270d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch, 271d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik float left, float top, float right, float bottom, const SkPaint* paint) { 2722af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik bitmap = refBitmap(bitmap); 273e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy patch = refPatch(patch); 27416ea8d373b03b1e115dd505af70dbee4e3a3a182Romain Guy paint = refPaint(paint); 2752af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 27603c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy addDrawOp(new (alloc()) DrawPatchOp(bitmap, patch, left, top, right, bottom, paint)); 277486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2784aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2794aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 280486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 2812af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawColorOp(color, mode)); 282486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2834aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2844aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 285486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 286d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPaint* paint) { 2872af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2882af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawRectOp(left, top, right, bottom, paint)); 289486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 2904aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 2914aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 292486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 293d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik float rx, float ry, const SkPaint* paint) { 2942af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 2952af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawRoundRectOp(left, top, right, bottom, rx, ry, paint)); 296486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 29701d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 29801d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 299d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawCircle(float x, float y, float radius, const SkPaint* paint) { 3002af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3012af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawCircleOp(x, y, radius, paint)); 302486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 30301d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy} 30401d58e43ede5ca98cbebdd166f9b0c545032c01bRomain Guy 305486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 306d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPaint* paint) { 3072af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3082af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawOvalOp(left, top, right, bottom, paint)); 309486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 310c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy} 311c1cd9ba335b293f11e1082447ef08e474710a05fRomain Guy 312486590963e2207d68eebd6944fec70d50d41116aChet Haasestatus_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 313d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint) { 3142af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3152af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawArcOp(left, top, right, bottom, 3162af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik startAngle, sweepAngle, useCenter, paint)); 317486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 3188b2f5267f16c295f12faab810527cd6311997e34Romain Guy} 3198b2f5267f16c295f12faab810527cd6311997e34Romain Guy 320d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawPath(const SkPath* path, const SkPaint* paint) { 3212af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik path = refPath(path); 3222af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3232af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3242af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawPathOp(path, paint)); 325486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 3264aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3274aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 328d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawLines(const float* points, int count, const SkPaint* paint) { 3292af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik points = refBuffer<float>(points, count); 3302af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3312af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3322af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawLinesOp(points, count, paint)); 333486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 334ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy} 335ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy 336d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawPoints(const float* points, int count, const SkPaint* paint) { 3372af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik points = refBuffer<float>(points, count); 3382af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3392af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3402af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawPointsOp(points, count, paint)); 341486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 3424aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3434aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 344996e57c84368058be793897ebc355b917a59abc2Raph Levienstatus_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count, 345d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const SkPath* path, float hOffset, float vOffset, const SkPaint* paint) { 346996e57c84368058be793897ebc355b917a59abc2Raph Levien if (!text || count <= 0) return DrawGlInfo::kStatusDone; 3472af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3482af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik text = refText(text, bytesCount); 3492af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik path = refPath(path); 3502af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3512af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3522af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik DrawOp* op = new (alloc()) DrawTextOnPathOp(text, bytesCount, count, path, 3532af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik hOffset, vOffset, paint); 3540f6675332c04c74909425d1d328f02b32c0ff40eRomain Guy addDrawOp(op); 355996e57c84368058be793897ebc355b917a59abc2Raph Levien return DrawGlInfo::kStatusDone; 356996e57c84368058be793897ebc355b917a59abc2Raph Levien} 357996e57c84368058be793897ebc355b917a59abc2Raph Levien 358996e57c84368058be793897ebc355b917a59abc2Raph Levienstatus_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count, 359d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik const float* positions, const SkPaint* paint) { 360996e57c84368058be793897ebc355b917a59abc2Raph Levien if (!text || count <= 0) return DrawGlInfo::kStatusDone; 3612af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3622af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik text = refText(text, bytesCount); 3632af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik positions = refBuffer<float>(positions, count * 2); 3642af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3652af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 3662af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik DrawOp* op = new (alloc()) DrawPosTextOp(text, bytesCount, count, positions, paint); 3670f6675332c04c74909425d1d328f02b32c0ff40eRomain Guy addDrawOp(op); 368996e57c84368058be793897ebc355b917a59abc2Raph Levien return DrawGlInfo::kStatusDone; 369996e57c84368058be793897ebc355b917a59abc2Raph Levien} 370996e57c84368058be793897ebc355b917a59abc2Raph Levien 371c25259519f1b74bb62a2b051b74537f073436b5cRomain Guystatus_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 372d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craik float x, float y, const float* positions, const SkPaint* paint, 37341541825bc90dac740e424cdd41a8c997e15cdb7Chris Craik float totalAdvance, const Rect& bounds, DrawOpMode drawOpMode) { 374527a3aace1dd72432c2e0472a570e030ad04bf16Chris Craik 375486590963e2207d68eebd6944fec70d50d41116aChet Haase if (!text || count <= 0) return DrawGlInfo::kStatusDone; 37633f6beb10f98e8ba96250e284876d607055d278dRomain Guy 3772af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik text = refText(text, bytesCount); 3782af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik positions = refBuffer<float>(positions, count * 2); 3792af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 38033f6beb10f98e8ba96250e284876d607055d278dRomain Guy 38141541825bc90dac740e424cdd41a8c997e15cdb7Chris Craik DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, 38241541825bc90dac740e424cdd41a8c997e15cdb7Chris Craik x, y, positions, paint, totalAdvance, bounds); 3830f6675332c04c74909425d1d328f02b32c0ff40eRomain Guy addDrawOp(op); 384486590963e2207d68eebd6944fec70d50d41116aChet Haase return DrawGlInfo::kStatusDone; 385672433d90fab7383cd28beac9d4485b566a90940Romain Guy} 386672433d90fab7383cd28beac9d4485b566a90940Romain Guy 387d218a92c0afb8c0d98135b20b52ac87236e1c935Chris Craikstatus_t DisplayListRenderer::drawRects(const float* rects, int count, const SkPaint* paint) { 388672433d90fab7383cd28beac9d4485b566a90940Romain Guy if (count <= 0) return DrawGlInfo::kStatusDone; 389672433d90fab7383cd28beac9d4485b566a90940Romain Guy 3902af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik rects = refBuffer<float>(rects, count); 3912af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik paint = refPaint(paint); 3922af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addDrawOp(new (alloc()) DrawRectsOp(rects, count, paint)); 393672433d90fab7383cd28beac9d4485b566a90940Romain Guy return DrawGlInfo::kStatusDone; 394eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy} 395eb9a5367e8f0e970db8509ffb2584f5376bc62edRomain Guy 3964aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShader() { 3972af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ResetShaderOp()); 3984aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 3994aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4004aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 4012af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik shader = refShader(shader); 4022af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SetupShaderOp(shader)); 4034aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4044aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4054aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::resetShadow() { 4062af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ResetShadowOp()); 4079b5a1a28c327e6113d68302b1f0eed1d1c6f6183Romain Guy OpenGLRenderer::resetShadow(); 4084aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4094aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4104aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 4112af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SetupShadowOp(radius, dx, dy, color)); 4129b5a1a28c327e6113d68302b1f0eed1d1c6f6183Romain Guy OpenGLRenderer::setupShadow(radius, dx, dy, color); 4134aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy} 4144aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy 4155ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::resetPaintFilter() { 4162af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) ResetPaintFilterOp()); 4175ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 4185ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 4195ff9df658230d49e42c43586997a02d8e4dd417eRomain Guyvoid DisplayListRenderer::setupPaintFilter(int clearBits, int setBits) { 4202af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addStateOp(new (alloc()) SetupPaintFilterOp(clearBits, setBits)); 4212af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik} 4222af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 4232af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craikvoid DisplayListRenderer::insertRestoreToCount() { 4242af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik if (mRestoreSaveCount >= 0) { 4252af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik DisplayListOp* op = new (alloc()) RestoreToCountOp(mRestoreSaveCount); 4262af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik mDisplayListData->displayListOps.add(op); 4272af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik mRestoreSaveCount = -1; 4282af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik } 4292af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik} 4302af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 4312af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craikvoid DisplayListRenderer::insertTranslate() { 4322af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik if (mHasTranslate) { 4332af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik if (mTranslateX != 0.0f || mTranslateY != 0.0f) { 4342af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik DisplayListOp* op = new (alloc()) TranslateOp(mTranslateX, mTranslateY); 4352af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik mDisplayListData->displayListOps.add(op); 4362af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik mTranslateX = mTranslateY = 0.0f; 4372af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik } 4382af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik mHasTranslate = false; 4392af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik } 4402af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik} 4412af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 4422af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craikvoid DisplayListRenderer::addStateOp(StateOp* op) { 4432af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addOpInternal(op); 4442af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik} 4452af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik 4460f6675332c04c74909425d1d328f02b32c0ff40eRomain Guyvoid DisplayListRenderer::addDrawOp(DrawOp* op) { 4472af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik Rect localBounds; 448c1c5f0870282b56dafe5a4d756e4b9e6884655a7Chris Craik if (op->getLocalBounds(mDrawModifiers, localBounds)) { 449f0a590781b2c3e34132b2011d3956135add73ae0Chris Craik bool rejected = quickRejectConservative(localBounds.left, localBounds.top, 4502af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik localBounds.right, localBounds.bottom); 4512af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik op->setQuickRejected(rejected); 4522af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik } 453c1c5f0870282b56dafe5a4d756e4b9e6884655a7Chris Craik 45444fd8d24f761f82d21e9b00932648a1b6bf91449John Reck mDisplayListData->hasDrawOps = true; 4552af4635e4a9e448a65ff541252f8f94bc6ac48e0Chris Craik addOpInternal(op); 4565ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy} 4575ff9df658230d49e42c43586997a02d8e4dd417eRomain Guy 4584aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace uirenderer 4594aa90573bbf86db0d33a3a790c5dbd0d93b95cfeRomain Guy}; // namespace android 460