Snapshot.h revision 5e00c7ce063116c11315639f0035aca8ad73e8cc
13a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2010 The Android Open Source Project 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License. 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License. 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#pragma once 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 19c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent#include <GLES2/gl2.h> 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <GLES2/gl2ext.h> 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/LinearAllocator.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/RefBase.h> 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <ui/Region.h> 257562408b2261d38415453378b6188f74fda99d88Mathias Agopian 2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <SkRegion.h> 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "ClipArea.h" 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "Layer.h" 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "Matrix.h" 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "Outline.h" 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "Rect.h" 3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include "utils/Macros.h" 3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 355876f2f28f31c1bd99864ba3bb1590e3d6765018Glenn Kastennamespace android { 3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace uirenderer { 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/** 3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Temporary structure holding information for a single outline clip. 4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * These structures are treated as immutable once created, and only exist for a single frame, which 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * is why they may only be allocated with a LinearAllocator. 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass RoundRectClipState { 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static void* operator new(size_t size) = delete; 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project static void* operator new(size_t size, LinearAllocator& allocator) { 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return allocator.alloc<RoundRectClipState>(size); 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project } 50c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 51c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent bool areaRequiresRoundRectClip(const Rect& rect) const { 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project return rect.intersects(dangerRects[0]) 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project || rect.intersects(dangerRects[1]) 54c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent || rect.intersects(dangerRects[2]) 55c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent || rect.intersects(dangerRects[3]); 56c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent } 57c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent 58c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent bool highPriority; 59c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Matrix4 matrix; 60c2f1f07084818942352c6bbfb36af9b6b330eb4eEric Laurent Rect dangerRects[4]; 61f0ee6f4055e26fb35d9c526a596668a4dc9da5baEric Laurent Rect innerRect; 62342e9cf388cceb807def720e40e8b0a217f4bcaaEric Laurent float radius; 6305bca2fde53bfe3063d2a0a877f2b6bfdd6052cfEric Laurent}; 64be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 65be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent/** 663a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * A snapshot holds information about the current state of the rendering 673a34befc6fb04a4945a849e8bda8b84e4bf973feMarco Nelissen * surface. A snapshot is usually created whenever the user calls save() 68be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * and discarded when the user calls restore(). Once a snapshot is created, 69ffe9c25ce85e1af55d58ec025adc6367d70db7e8Eric Laurent * it can hold information for deferred rendering. 70be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * 71de070137f11d346fba77605bd76a44c040a618fcEric Laurent * Each snapshot has a link to a previous snapshot, indicating the previous 72a4c5a550e2a3bc237179b8684e51718e05894492Eric Laurent * state of the renderer. 73cc0f1cfb69ce8b8985fc2c0984847a06a13ad22dGlenn Kasten */ 74cc0f1cfb69ce8b8985fc2c0984847a06a13ad22dGlenn Kastenclass Snapshot { 75cc0f1cfb69ce8b8985fc2c0984847a06a13ad22dGlenn Kastenpublic: 764182c4e2a07e2441fcd5c22eaff0ddfe7f826f61Glenn Kasten 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Snapshot(); 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Snapshot(Snapshot* s, int saveFlags); 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Various flags set on ::flags. 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project enum Flags { 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Indicates that the clip region was modified. When this 8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * snapshot is restored so must the clip. 8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 88fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten kFlagClipSet = 0x1, 8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 9058f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten * Indicates that this snapshot was created when saving 91dd8104cc5367262f0e5f13df4e79f131e8d560bbGlenn Kasten * a new layer. 92e33054eb968cbf8ccaee1b0ff0301403902deed6Glenn Kasten */ 93e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten kFlagIsLayer = 0x2, 9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 9572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten * Indicates that this snapshot is a special type of layer 963acbd053c842e76e1a40fc8a0bf62de87eebf00fGlenn Kasten * backed by an FBO. This flag only makes sense when the 97be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * flag kFlagIsLayer is also set. 98d054c32443a493513ab63529b0c8b1aca290278cGlenn Kasten * 9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Viewport has been modified to fit the new Fbo, and must be 10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * restored when this snapshot is restored. 10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 1025841db78dff14898538200287d246577b1fc37e2Eric Laurent kFlagIsFboLayer = 0x4, 10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 104fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten 10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Modifies the current clip with the new clip rectangle and 1070d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi * the specified operation. The specified rectangle is transformed 10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * by this snapshot's trasnformation. 109b26e3e9f2ab0334bff21a4fa4851dbf6e57fba5dGlenn Kasten */ 110e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten void clip(const Rect& localClip, SkRegion::Op op); 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten /** 1133acbd053c842e76e1a40fc8a0bf62de87eebf00fGlenn Kasten * Modifies the current clip with the new clip rectangle and 114be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * the specified operation. The specified rectangle is considered 115be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * already transformed. 116be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent */ 117be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent void clipTransformed(const Rect& r, SkRegion::Op op = SkRegion::kIntersect_Op); 118be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 11989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 12089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Modifies the current clip with the specified region and operation. 12129357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block * The specified region is considered already transformed. 1225841db78dff14898538200287d246577b1fc37e2Eric Laurent */ 123e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten void clipRegionTransformed(const SkRegion& region, SkRegion::Op op); 124e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten 125e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten /** 126e0b07179a48ee50fda931d2aa1b3c751d167e4d7Glenn Kasten * Modifies the current clip with the specified path and operation. 127be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent */ 128be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent void clipPath(const SkPath& path, SkRegion::Op op); 129be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 130be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent /** 131d054c32443a493513ab63529b0c8b1aca290278cGlenn Kasten * Sets the current clip. 1325841db78dff14898538200287d246577b1fc37e2Eric Laurent */ 1335841db78dff14898538200287d246577b1fc37e2Eric Laurent void setClip(float left, float top, float right, float bottom); 13489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 135507b2860cfe0bb4a712064f1c503caa9a7325886Glenn Kasten /** 13689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Returns the current clip in local coordinates. The clip rect is 13789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * transformed by the inverse transform matrix. 1385841db78dff14898538200287d246577b1fc37e2Eric Laurent */ 13989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ANDROID_API const Rect& getLocalClip(); 14089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 14189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 14272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten * Returns the current clip in render target coordinates. 14389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 14458f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten const Rect& getRenderTargetClip() const { return mClipArea->getClipRect(); } 14528b76b334f92a15a2be3cc9e2f7d229a3275d1acGlenn Kasten 146e33054eb968cbf8ccaee1b0ff0301403902deed6Glenn Kasten /* 147eeca32671896739e84050da5992d5f151a1629deGlenn Kasten * Accessor functions so that the clip area can stay private 1481879fff068422852c1483dcf8365c2ff0e2fadfcGlenn Kasten */ 149be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent bool clipIsEmpty() const { return mClipArea->isEmpty(); } 15089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const SkRegion& getClipRegion() const { return mClipArea->getClipRegion(); } 15189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool clipIsSimple() const { return mClipArea->isSimple(); } 15289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const ClipArea& getClipArea() const { return *mClipArea; } 1535841db78dff14898538200287d246577b1fc37e2Eric Laurent ClipArea& mutateClipArea() { return *mClipArea; } 15489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 15572ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten WARN_UNUSED_RESULT const ClipBase* serializeIntersectedClip(LinearAllocator& allocator, 15689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const ClipBase* recordedClip, const Matrix4& recordedClipTransform); 15789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void applyClip(const ClipBase* clip, const Matrix4& transform); 1580d255b2d9061ba31f13ada3fc0f7e51916407176Jean-Michel Trivi 15989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 160eeca32671896739e84050da5992d5f151a1629deGlenn Kasten * Resets the clip to the specified rect. 161eeca32671896739e84050da5992d5f151a1629deGlenn Kasten */ 1621879fff068422852c1483dcf8365c2ff0e2fadfcGlenn Kasten void resetClip(float left, float top, float right, float bottom); 163be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent 164be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent void initializeViewport(int width, int height) { 165be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent mViewportData.initialize(width, height); 166be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent mClipAreaRoot.setViewportDimensions(width, height); 167be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent } 1685841db78dff14898538200287d246577b1fc37e2Eric Laurent 1695841db78dff14898538200287d246577b1fc37e2Eric Laurent int getViewportWidth() const { return mViewportData.mWidth; } 17029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block int getViewportHeight() const { return mViewportData.mHeight; } 1715841db78dff14898538200287d246577b1fc37e2Eric Laurent const Matrix4& getOrthoMatrix() const { return mViewportData.mOrthoMatrix; } 172eeca32671896739e84050da5992d5f151a1629deGlenn Kasten 173eeca32671896739e84050da5992d5f151a1629deGlenn Kasten const Vector3& getRelativeLightCenter() const { return mRelativeLightCenter; } 174eeca32671896739e84050da5992d5f151a1629deGlenn Kasten void setRelativeLightCenter(const Vector3& lightCenter) { mRelativeLightCenter = lightCenter; } 175eeca32671896739e84050da5992d5f151a1629deGlenn Kasten 176be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent /** 177be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * Sets (and replaces) the current clipping outline 178be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * 179be916aa1267e2e6b1c148f51d11bcbbc79cb864cEric Laurent * If the current round rect clip is high priority, the incoming clip is ignored. 1805841db78dff14898538200287d246577b1fc37e2Eric Laurent */ 1815841db78dff14898538200287d246577b1fc37e2Eric Laurent void setClippingRoundRect(LinearAllocator& allocator, const Rect& bounds, 1825841db78dff14898538200287d246577b1fc37e2Eric Laurent float radius, bool highPriority); 183507b2860cfe0bb4a712064f1c503caa9a7325886Glenn Kasten 18489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 18589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Sets (and replaces) the current projection mask 1865841db78dff14898538200287d246577b1fc37e2Eric Laurent */ 18789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void setProjectionPathMask(const SkPath* path); 18889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 18972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten /** 19089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Indicates whether the current transform has perspective components. 19189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 19289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool hasPerspectiveTransform() const; 19372ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten 19489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 19589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Dirty flags. 19689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 19789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int flags; 19872ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten 19989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 20089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Previous snapshot. 20189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 20272ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten Snapshot* previous; 20389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 20458f30210ea540b6ce5aa6a46330cd3499483cb97Glenn Kasten /** 20589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * A pointer to the currently active layer. 20689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 20772ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten * This snapshot does not own the layer, this pointer must not be freed. 20889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 20989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Layer* layer; 21089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 21172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten /** 21289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Target FBO used for rendering. Set to 0 when rendering directly 21389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * into the framebuffer. 21489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 21589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project GLuint fbo; 21672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten 21789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 21889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Local transformation. Holds the current translation, scale and 21989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * rotation values. 22072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten * 22189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * This is a reference to a matrix owned by this snapshot or another 22289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * snapshot. This pointer must not be freed. See ::mTransformRoot. 22389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 22489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mat4* transform; 22589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 22689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 22789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Current alpha value. This value is 1 by default, but may be set by a DisplayList which 22889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * has translucent rendering in a non-overlapping View. This value will be used by 22989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * the renderer to set the alpha in the current color being used for ensuing drawing 23089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * operations. The value is inherited by child snapshots because the same value should 23189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * be applied to descendants of the current DisplayList (for example, a TextView contains 23289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * the base alpha value which should be applied to the child DisplayLists used for drawing 23389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * the actual text). 23489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 23589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project float alpha; 23689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 23789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 23889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Current clipping round rect. 23989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 24089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Points to data not owned by the snapshot, and may only be replaced by subsequent RR clips, 24189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * never modified. 24289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 24389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const RoundRectClipState* roundRectClipState; 24489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 24589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 24689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Current projection masking path - used exclusively to mask projected, tessellated circles. 24789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 24889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project const SkPath* projectionPathMask; 24989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void dump() const; 25189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 25289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 25389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project struct ViewportData { 25489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ViewportData() : mWidth(0), mHeight(0) {} 25589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void initialize(int width, int height) { 25689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mWidth = width; 25789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mHeight = height; 25889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); 25972ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten } 26072ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten 26189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /* 26289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Width and height of current viewport. 26389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * 264fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten * The viewport is always defined to be (0, 0, width, height). 26589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 26672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten int mWidth; 26789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int mHeight; 26889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project /** 26989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Contains the current orthographic, projection matrix. 27089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */ 271fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten mat4 mOrthoMatrix; 27289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project }; 27389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 27489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project mat4 mTransformRoot; 275fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten 27689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ClipArea mClipAreaRoot; 27789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ClipArea* mClipArea; 27889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Rect mLocalClip; 27989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ViewportData mViewportData; 28172ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten Vector3 mRelativeLightCenter; 28289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 28389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // class Snapshot 28489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 285fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten}; // namespace uirenderer 28672ef00de10fa95bfcb948ed88ab9b7a177ed0b48Glenn Kasten}; // namespace android 28789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project