DisplayListRenderer.cpp revision 2fc941e4650d618ff6e122f28b616d9032ffa134
1e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/* 2e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Copyright (C) 2010 The Android Open Source Project 3e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * 4e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Licensed under the Apache License, Version 2.0 (the "License"); 5e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * you may not use this file except in compliance with the License. 6e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * You may obtain a copy of the License at 7e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * 8e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * http://www.apache.org/licenses/LICENSE-2.0 9e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * 10e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * Unless required by applicable law or agreed to in writing, software 11e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * distributed under the License is distributed on an "AS IS" BASIS, 12e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * See the License for the specific language governing permissions and 14e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly * limitations under the License. 15e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly */ 16e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 17e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#define LOG_TAG "OpenGLRenderer" 18e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 19e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#include "DisplayListRenderer.h" 20e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 21e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellynamespace android { 22e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellynamespace uirenderer { 23e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 24e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 25e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Display list 26e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 27e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 28e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyconst char* DisplayList::OP_NAMES[] = { 29e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Save", 30e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Restore", 31e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "RestoreToCount", 32e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SaveLayer", 33e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SaveLayerAlpha", 34e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Translate", 35e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Rotate", 36e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Scale", 37e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "Skew", 38e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SetMatrix", 39e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "ConcatMatrix", 40e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "ClipRect", 41e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawDisplayList", 42e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawLayer", 43e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawBitmap", 44e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawBitmapMatrix", 45e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawBitmapRect", 46e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawBitmapMesh", 47e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawPatch", 48e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawColor", 49e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawRect", 50e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawRoundRect", 51e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawCircle", 52e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawOval", 53e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawArc", 54e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawPath", 55e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawLines", 56e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawText", 57e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "ResetShader", 58e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SetupShader", 59e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "ResetColorFilter", 60e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SetupColorFilter", 61e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "ResetShadow", 62e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "SetupShadow", 63e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly "DrawGLFunction" 64e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; 65e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 66e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyDisplayList::DisplayList(const DisplayListRenderer& recorder) { 67e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly initFromDisplayListRenderer(recorder); 68e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 69e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 70e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyDisplayList::~DisplayList() { 71e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly sk_free((void*) mReader.base()); 72e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 73e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Caches& caches = Caches::getInstance(); 74e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 75e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mBitmapResources.size(); i++) { 76e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); 77e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 78e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mBitmapResources.clear(); 79e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 80e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mShaders.size(); i++) { 81e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 82e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 83e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mShaders.clear(); 84e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 85e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mPaints.size(); i++) { 86e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly delete mPaints.itemAt(i); 87e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 88e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaints.clear(); 89e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 90e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mPaths.size(); i++) { 91e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly delete mPaths.itemAt(i); 92e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 93e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaths.clear(); 94e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 95e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mMatrices.size(); i++) { 96e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly delete mMatrices.itemAt(i); 97e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 98e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mMatrices.clear(); 99e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 100e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 101e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder) { 102e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const SkWriter32& writer = recorder.writeStream(); 103e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly init(); 104e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 105e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly if (writer.size() == 0) { 106e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return; 107e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 108e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 109e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly size_t size = writer.size(); 110e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly void* buffer = sk_malloc_throw(size); 111e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly writer.flatten(buffer); 112e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mReader.setMemory(buffer, size); 113e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 114e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Caches& caches = Caches::getInstance(); 115e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 116e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const Vector<SkBitmap*> &bitmapResources = recorder.getBitmapResources(); 117e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < bitmapResources.size(); i++) { 118e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* resource = bitmapResources.itemAt(i); 119e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mBitmapResources.add(resource); 120e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.incrementRefcount(resource); 121e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 122e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 123e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const Vector<SkiaShader*> &shaders = recorder.getShaders(); 124e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < shaders.size(); i++) { 125e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkiaShader* shader = shaders.itemAt(i); 126e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mShaders.add(shader); 127e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.incrementRefcount(shader); 128e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 129e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 130e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const Vector<SkPaint*> &paints = recorder.getPaints(); 131e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < paints.size(); i++) { 132e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaints.add(paints.itemAt(i)); 133e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 134e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 135e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const Vector<SkPath*> &paths = recorder.getPaths(); 136e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < paths.size(); i++) { 137e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaths.add(paths.itemAt(i)); 138e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 139e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 140e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const Vector<SkMatrix*> &matrices = recorder.getMatrices(); 141e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < matrices.size(); i++) { 142e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mMatrices.add(matrices.itemAt(i)); 143e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 144e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 145e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 146e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayList::init() { 147e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 148e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 149e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellybool DisplayList::replay(OpenGLRenderer& renderer, uint32_t level) { 150e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool needsInvalidate = false; 151e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly TextContainer text; 152e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mReader.rewind(); 153e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 154e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#if DEBUG_DISPLAY_LIST 155e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t count = (level + 1) * 2; 156e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly char indent[count + 1]; 157e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (uint32_t i = 0; i < count; i++) { 158e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly indent[i] = ' '; 159e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 160e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly indent[count] = '\0'; 161e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%sStart display list (%p)", (char*) indent + 2, this); 162e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly#endif 163e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 164e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int saveCount = renderer.getSaveCount() - 1; 165e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly while (!mReader.eof()) { 166e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int op = mReader.readInt(); 167e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 168e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly switch (op) { 169e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawGLFunction: { 170e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Functor *functor = (Functor *) getInt(); 171e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], functor); 172e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly needsInvalidate |= renderer.callDrawGLFunction(functor); 173e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 174e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 175e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Save: { 176e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int rendererNum = getInt(); 177e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], rendererNum); 178e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.save(rendererNum); 179e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 180e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 181e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Restore: { 182e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 183e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.restore(); 184e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 185e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 186e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case RestoreToCount: { 187e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int restoreCount = saveCount + getInt(); 188e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %d", (char*) indent, OP_NAMES[op], restoreCount); 189e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.restoreToCount(restoreCount); 190e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 191e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 192e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SaveLayer: { 193e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 194e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 195e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 196e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 197e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 198e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int flags = getInt(); 199e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p, 0x%x", (char*) indent, 200e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OP_NAMES[op], f1, f2, f3, f4, paint, flags); 201e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.saveLayer(f1, f2, f3, f4, paint, flags); 202e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 203e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 204e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SaveLayerAlpha: { 205e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 206e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 207e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 208e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 209e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int alpha = getInt(); 210e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int flags = getInt(); 211e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d, 0x%x", (char*) indent, 212e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OP_NAMES[op], f1, f2, f3, f4, alpha, flags); 213e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.saveLayerAlpha(f1, f2, f3, f4, alpha, flags); 214e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 215e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 216e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Translate: { 217e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 218e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 219e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], f1, f2); 220e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.translate(f1, f2); 221e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 222e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 223e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Rotate: { 224e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float rotation = getFloat(); 225e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f", (char*) indent, OP_NAMES[op], rotation); 226e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.rotate(rotation); 227e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 228e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 229e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Scale: { 230e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float sx = getFloat(); 231e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float sy = getFloat(); 232e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 233e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.scale(sx, sy); 234e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 235e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 236e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case Skew: { 237e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float sx = getFloat(); 238e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float sy = getFloat(); 239e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f", (char*) indent, OP_NAMES[op], sx, sy); 240e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.skew(sx, sy); 241e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 242e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 243e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SetMatrix: { 244e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkMatrix* matrix = getMatrix(); 245e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 246e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.setMatrix(matrix); 247e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 248e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 249e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case ConcatMatrix: { 250e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkMatrix* matrix = getMatrix(); 251e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], matrix); 252e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.concatMatrix(matrix); 253e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 254e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 255e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case ClipRect: { 256e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 257e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 258e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 259e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 260e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int regionOp = getInt(); 261e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %d", (char*) indent, OP_NAMES[op], 262e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly f1, f2, f3, f4, regionOp); 263e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.clipRect(f1, f2, f3, f4, (SkRegion::Op) regionOp); 264e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 265e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 266e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawDisplayList: { 267e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DisplayList* displayList = getDisplayList(); 268e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %d", (char*) indent, OP_NAMES[op], 269e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly displayList, level + 1); 270e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly needsInvalidate |= renderer.drawDisplayList(displayList, level + 1); 271e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 272e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 273e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawLayer: { 274e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Layer* layer = (Layer*) getInt(); 275e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float x = getFloat(); 276e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float y = getFloat(); 277e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 278e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 279e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly layer, x, y, paint); 280e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawLayer(layer, x, y, paint); 281e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 282e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 283e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawBitmap: { 284e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* bitmap = getBitmap(); 285e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float x = getFloat(); 286e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float y = getFloat(); 287e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 288e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 289e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bitmap, x, y, paint); 290e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawBitmap(bitmap, x, y, paint); 291e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 292e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 293e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawBitmapMatrix: { 294e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* bitmap = getBitmap(); 295e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkMatrix* matrix = getMatrix(); 296e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 297e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %p, %p", (char*) indent, OP_NAMES[op], 298e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bitmap, matrix, paint); 299e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawBitmap(bitmap, matrix, paint); 300e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 301e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 302e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawBitmapRect: { 303e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* bitmap = getBitmap(); 304e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 305e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 306e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 307e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 308e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f5 = getFloat(); 309e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f6 = getFloat(); 310e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f7 = getFloat(); 311e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f8 = getFloat(); 312e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 313e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 314e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op], bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 315e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawBitmap(bitmap, f1, f2, f3, f4, f5, f6, f7, f8, paint); 316e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 317e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 318e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawBitmapMesh: { 319e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int verticesCount = 0; 320e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t colorsCount = 0; 321e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 322e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* bitmap = getBitmap(); 323e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t meshWidth = getInt(); 324e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t meshHeight = getInt(); 325e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float* vertices = getFloats(verticesCount); 326e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly bool hasColors = getInt(); 327e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int* colors = hasColors ? getInts(colorsCount) : NULL; 328e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 329e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 330e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawBitmapMesh(bitmap, meshWidth, meshHeight, vertices, colors, getPaint()); 331e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 332e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 333e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawPatch: { 334e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int32_t* xDivs = NULL; 335e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int32_t* yDivs = NULL; 336e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t* colors = NULL; 337e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t xDivsCount = 0; 338e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly uint32_t yDivsCount = 0; 339e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int8_t numColors = 0; 340e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 341e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* bitmap = getBitmap(); 342e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 343e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly xDivs = getInts(xDivsCount); 344e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly yDivs = getInts(yDivsCount); 345e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly colors = getUInts(numColors); 346e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 347e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 348e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawPatch(bitmap, xDivs, yDivs, colors, xDivsCount, yDivsCount, 349e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly numColors, getFloat(), getFloat(), getFloat(), getFloat(), getPaint()); 350e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 351e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 352e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawColor: { 353e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int color = getInt(); 354e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int xferMode = getInt(); 355e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s 0x%x %d", (char*) indent, OP_NAMES[op], color, xferMode); 356e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawColor(color, (SkXfermode::Mode) xferMode); 357e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 358e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 359e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawRect: { 360e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 361e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 362e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 363e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 364e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 365e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 366e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly f1, f2, f3, f4, paint); 367e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawRect(f1, f2, f3, f4, paint); 368e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 369e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 370e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawRoundRect: { 371e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 372e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 373e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 374e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 375e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f5 = getFloat(); 376e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f6 = getFloat(); 377e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 378e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %p", 379e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, paint); 380e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawRoundRect(f1, f2, f3, f4, f5, f6, paint); 381e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 382e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 383e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawCircle: { 384e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 385e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 386e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 387e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 388e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %p", 389e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op], f1, f2, f3, paint); 390e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawCircle(f1, f2, f3, paint); 391e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 392e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 393e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawOval: { 394e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 395e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 396e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 397e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 398e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 399e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %p", 400e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op], f1, f2, f3, f4, paint); 401e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawOval(f1, f2, f3, f4, paint); 402e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 403e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 404e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawArc: { 405e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f1 = getFloat(); 406e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f2 = getFloat(); 407e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f3 = getFloat(); 408e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f4 = getFloat(); 409e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f5 = getFloat(); 410e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float f6 = getFloat(); 411e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int i1 = getInt(); 412e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 413e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, %.2f, %.2f, %.2f, %d, %p", 414e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op], f1, f2, f3, f4, f5, f6, i1, paint); 415e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawArc(f1, f2, f3, f4, f5, f6, i1 == 1, paint); 416e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 417e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 418e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawPath: { 419e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPath* path = getPath(); 420e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 421e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p, %p", (char*) indent, OP_NAMES[op], path, paint); 422e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawPath(path, paint); 423e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 424e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 425e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawLines: { 426e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int count = 0; 427e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float* points = getFloats(count); 428e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 429e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawLines(points, count, getPaint()); 430e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 431e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 432e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case DrawText: { 433e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly getText(&text); 434e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int count = getInt(); 435e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float x = getFloat(); 436e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float y = getFloat(); 437e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint = getPaint(); 438e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %s, %d, %d, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], 439e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly text.text(), text.length(), count, x, y, paint); 440e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.drawText(text.text(), text.length(), count, x, y, paint); 441e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 442e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 443e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case ResetShader: { 444e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 445e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.resetShader(); 446e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 447e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 448e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SetupShader: { 449e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkiaShader* shader = getShader(); 450e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], shader); 451e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.setupShader(shader); 452e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 453e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 454e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case ResetColorFilter: { 455e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 456e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.resetColorFilter(); 457e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 458e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 459e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SetupColorFilter: { 460e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkiaColorFilter *colorFilter = getColorFilter(); 461e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %p", (char*) indent, OP_NAMES[op], colorFilter); 462e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.setupColorFilter(colorFilter); 463e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 464e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 465e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case ResetShadow: { 466e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]); 467e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.resetShadow(); 468e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 469e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 470e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly case SetupShadow: { 471e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float radius = getFloat(); 472e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float dx = getFloat(); 473e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float dy = getFloat(); 474e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int color = getInt(); 475e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%s%s %.2f, %.2f, %.2f, 0x%x", (char*) indent, OP_NAMES[op], 476e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly radius, dx, dy, color); 477e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly renderer.setupShadow(radius, dx, dy, color); 478e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 479e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 480e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly default: 481e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("Display List error: op not handled: %s%s", 482e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly (char*) indent, OP_NAMES[op]); 483e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly break; 484e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 485e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 486e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 487e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly DISPLAY_LIST_LOGD("%sDone, returning %d", (char*) indent + 2, needsInvalidate); 488e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return needsInvalidate; 489e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 490e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 491e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 492e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Base structure 493e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 494e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 495e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyDisplayListRenderer::DisplayListRenderer(): mWriter(MIN_WRITER_SIZE) { 496e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mDisplayList = NULL; 497e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 498e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 499e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyDisplayListRenderer::~DisplayListRenderer() { 500e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly reset(); 501e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 502e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 503e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::reset() { 504e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mWriter.reset(); 505e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 506e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly Caches& caches = Caches::getInstance(); 507e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mBitmapResources.size(); i++) { 508e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkBitmap* resource = mBitmapResources.itemAt(i); 509e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.decrementRefcount(resource); 510e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 511e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mBitmapResources.clear(); 512e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 513e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly for (size_t i = 0; i < mShaders.size(); i++) { 514e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); 515e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 516e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mShaders.clear(); 517e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mShaderMap.clear(); 518e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 519e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaints.clear(); 520e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaintMap.clear(); 521e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPaths.clear(); 522e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mPathMap.clear(); 523e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mMatrices.clear(); 524e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 525e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 526e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 527e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly// Operations 528e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly/////////////////////////////////////////////////////////////////////////////// 529e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 530e7273837b521d16f87dd5fb6eea3750a51ea92daNick PellyDisplayList* DisplayListRenderer::getDisplayList() { 531e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly if (mDisplayList == NULL) { 532e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mDisplayList = new DisplayList(*this); 533e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } else { 534e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mDisplayList->initFromDisplayListRenderer(*this); 535e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 536e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return mDisplayList; 537e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 538e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 539e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::setViewport(int width, int height) { 540e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 541e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 542e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mWidth = width; 543e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mHeight = height; 544e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 545e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 546e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::prepareDirty(float left, float top, 547e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float right, float bottom, bool opaque) { 548e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mSnapshot = new Snapshot(mFirstSnapshot, 549e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); 550e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mSaveCount = 1; 551e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); 552e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mRestoreSaveCount = -1; 553e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 554e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 555e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::finish() { 556e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly insertRestoreToCount(); 557e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::finish(); 558e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 559e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 560e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::interrupt() { 561e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 562e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 563e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::resume() { 564e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 565e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 566e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellybool DisplayListRenderer::callDrawGLFunction(Functor *functor) { 567e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawGLFunction); 568e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt((int) functor); 569e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return false; // No invalidate needed at record-time 570e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 571e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 572e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyint DisplayListRenderer::save(int flags) { 573e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Save); 574e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(flags); 575e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return OpenGLRenderer::save(flags); 576e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 577e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 578e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::restore() { 579e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Restore); 580e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::restore(); 581e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 582e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 583e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::restoreToCount(int saveCount) { 584e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly mRestoreSaveCount = saveCount; 585e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::restoreToCount(saveCount); 586e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 587e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 588e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyint DisplayListRenderer::saveLayer(float left, float top, float right, float bottom, 589e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* p, int flags) { 590e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SaveLayer); 591e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 592e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(p); 593e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(flags); 594e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return OpenGLRenderer::save(flags); 595e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 596e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 597e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyint DisplayListRenderer::saveLayerAlpha(float left, float top, float right, float bottom, 598e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly int alpha, int flags) { 599e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SaveLayerAlpha); 600e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 601e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(alpha); 602e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(flags); 603e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return OpenGLRenderer::save(flags); 604e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 605e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 606e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::translate(float dx, float dy) { 607e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Translate); 608e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(dx, dy); 609e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::translate(dx, dy); 610e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 611e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 612e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::rotate(float degrees) { 613e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Rotate); 614e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addFloat(degrees); 615e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::rotate(degrees); 616e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 617e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 618e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::scale(float sx, float sy) { 619e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Scale); 620e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(sx, sy); 621e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::scale(sx, sy); 622e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 623e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 624e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::skew(float sx, float sy) { 625e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::Skew); 626e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(sx, sy); 627e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::skew(sx, sy); 628e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 629e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 630e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::setMatrix(SkMatrix* matrix) { 631e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SetMatrix); 632e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addMatrix(matrix); 633e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::setMatrix(matrix); 634e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 635e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 636e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::concatMatrix(SkMatrix* matrix) { 637e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::ConcatMatrix); 638e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addMatrix(matrix); 639e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly OpenGLRenderer::concatMatrix(matrix); 640e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 641e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 642e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellybool DisplayListRenderer::clipRect(float left, float top, float right, float bottom, 643e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkRegion::Op op) { 644e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::ClipRect); 645e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 646e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(op); 647e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return OpenGLRenderer::clipRect(left, top, right, bottom, op); 648e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 649e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 650e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellybool DisplayListRenderer::drawDisplayList(DisplayList* displayList, uint32_t level) { 651e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawDisplayList); 652e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addDisplayList(displayList); 653e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly return false; 654e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 655e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 656e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) { 657e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawLayer); 658e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt((int) layer); 659e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(x, y); 660e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 661e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 662e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 663e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, 664e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint) { 665e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawBitmap); 666e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBitmap(bitmap); 667e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(left, top); 668e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 669e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 670e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 671e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, 672e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint) { 673e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawBitmapMatrix); 674e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBitmap(bitmap); 675e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addMatrix(matrix); 676e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 677e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 678e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 679e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop, 680e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float srcRight, float srcBottom, float dstLeft, float dstTop, 681e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float dstRight, float dstBottom, SkPaint* paint) { 682e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawBitmapRect); 683e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBitmap(bitmap); 684e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(srcLeft, srcTop, srcRight, srcBottom); 685e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(dstLeft, dstTop, dstRight, dstBottom); 686e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 687e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 688e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 689e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight, 690e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float* vertices, int* colors, SkPaint* paint) { 691e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawBitmapMesh); 692e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBitmap(bitmap); 693e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(meshWidth); 694e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(meshHeight); 695e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addFloats(vertices, (meshWidth + 1) * (meshHeight + 1) * 2); 696e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly if (colors) { 697e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(1); 698e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInts(colors, (meshWidth + 1) * (meshHeight + 1)); 699e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } else { 700e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(0); 701e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly } 702e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 703e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 704e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 705e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawPatch(SkBitmap* bitmap, const int32_t* xDivs, const int32_t* yDivs, 706e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly const uint32_t* colors, uint32_t width, uint32_t height, int8_t numColors, 707e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float left, float top, float right, float bottom, SkPaint* paint) { 708e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawPatch); 709e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBitmap(bitmap); 710e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInts(xDivs, width); 711e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInts(yDivs, height); 712e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addUInts(colors, numColors); 713e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 714e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 715e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 716e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 717e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawColor(int color, SkXfermode::Mode mode) { 718e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawColor); 719e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(color); 720e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(mode); 721e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 722e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 723e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawRect(float left, float top, float right, float bottom, 724e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint) { 725e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawRect); 726e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 727e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 728e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 729e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 730e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom, 731e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float rx, float ry, SkPaint* paint) { 732e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawRoundRect); 733e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 734e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(rx, ry); 735e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 736e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 737e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 738e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) { 739e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawCircle); 740e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(x, y); 741e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addFloat(radius); 742e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 743e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 744e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 745e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawOval(float left, float top, float right, float bottom, 746e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly SkPaint* paint) { 747e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawOval); 748e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 749e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 750e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 751e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 752e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawArc(float left, float top, float right, float bottom, 753e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) { 754e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawArc); 755e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addBounds(left, top, right, bottom); 756e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(startAngle, sweepAngle); 757e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(useCenter ? 1 : 0); 758e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 759e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 760e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 761e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) { 762e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawPath); 763e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPath(path); 764e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 765e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 766e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 767e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) { 768e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawLines); 769e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addFloats(points, count); 770e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 771e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 772e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 773e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::drawText(const char* text, int bytesCount, int count, 774e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly float x, float y, SkPaint* paint) { 775e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::DrawText); 776e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addText(text, bytesCount); 777e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(count); 778e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(x, y); 779e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPaint(paint); 780e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 781e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 782e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::resetShader() { 783e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::ResetShader); 784e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 785e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 786e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::setupShader(SkiaShader* shader) { 787e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SetupShader); 788e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addShader(shader); 789e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 790e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 791e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::resetColorFilter() { 792e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::ResetColorFilter); 793e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 794e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 795e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) { 796e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SetupColorFilter); 797e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addColorFilter(filter); 798e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 799e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 800e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::resetShadow() { 801e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::ResetShadow); 802e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 803e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 804e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pellyvoid DisplayListRenderer::setupShadow(float radius, float dx, float dy, int color) { 805e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addOp(DisplayList::SetupShadow); 806e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addFloat(radius); 807e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addPoint(dx, dy); 808e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly addInt(color); 809e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly} 810e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly 811e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; // namespace uirenderer 812e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly}; // namespace android 813e7273837b521d16f87dd5fb6eea3750a51ea92daNick Pelly