diff options
author | Romain Guy <romainguy@android.com> | 2010-06-27 22:59:20 -0700 |
---|---|---|
committer | Romain Guy <romainguy@android.com> | 2010-06-27 22:59:20 -0700 |
commit | 5cbbce535744b89df5ecea95de21ee3733298260 (patch) | |
tree | 37dda328f8d127cead9e799e5220b4589267bc5e /libs/hwui/Snapshot.h | |
parent | 1d58b498de5eb3b53ca0c7ffd14b1c209833d297 (diff) | |
download | frameworks_base-5cbbce535744b89df5ecea95de21ee3733298260.zip frameworks_base-5cbbce535744b89df5ecea95de21ee3733298260.tar.gz frameworks_base-5cbbce535744b89df5ecea95de21ee3733298260.tar.bz2 |
Reduced the complexity of layers composition.
This change also refactors the code base a bit by moving classes out of
OpenGLRenderer into separate headers/implementations. This makes the code
more manageable.
This change also adds documentation for implementation methods. The
undocumented methods are simply Skia's Canvas methods.
Change-Id: I54c68b443580a0129251dddc1a7ac95813d5289e
Diffstat (limited to 'libs/hwui/Snapshot.h')
-rw-r--r-- | libs/hwui/Snapshot.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h new file mode 100644 index 0000000..9a9be2d --- /dev/null +++ b/libs/hwui/Snapshot.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_UI_SNAPSHOT_H +#define ANDROID_UI_SNAPSHOT_H + +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +#include <utils/RefBase.h> + +#include "Matrix.h" +#include "Rect.h" + +namespace android { +namespace uirenderer { + +/** + * A snapshot holds information about the current state of the rendering + * surface. A snapshot is usually created whenever the user calls save() + * and discarded when the user calls restore(). Once a snapshot is created, + * it can hold information for deferred rendering. + * + * Each snapshot has a link to a previous snapshot, indicating the previous + * state of the renderer. + */ +class Snapshot: public LightRefBase<Snapshot> { +public: + Snapshot() { + } + + /** + * Copies the specified snapshot. Only the transform and clip rectangle + * are copied. The layer information is set to 0 and the transform is + * assumed to be dirty. The specified snapshot is stored as the previous + * snapshot. + */ + Snapshot(const sp<Snapshot> s): + transform(s->transform), + clipRect(s->clipRect), + flags(kFlagDirtyTransform), + previous(s), + layer(0.0f, 0.0f, 0.0f, 0.0f), + texture(0), + fbo(0), + alpha(255) { + } + + /** + * Various flags set on #flags. + */ + enum Flags { + /** + * Indicates that the clip region was modified. When this + * snapshot is restored so must the clip. + */ + kFlagClipSet = 0x1, + /** + * Indicates that the snapshot holds new transform + * information. + */ + kFlagDirtyTransform = 0x2, + /** + * Indicates that this snapshot was created when saving + * a new layer. + */ + kFlagIsLayer = 0x4, + }; + + /** + * Returns the current clip region mapped by the current transform. + */ + const Rect& getMappedClip() { + if (flags & kFlagDirtyTransform) { + flags &= ~kFlagDirtyTransform; + mappedClip.set(clipRect); + transform.mapRect(mappedClip); + } + return mappedClip; + } + + /** + * Local transformation. Holds the current translation, scale and + * rotation values. + */ + mat4 transform; + + /** + * Current clip region. + */ + Rect clipRect; + + /** + * Dirty flags. + */ + int flags; + + /** + * Previous snapshot. + */ + sp<Snapshot> previous; + + /** + * Coordinates of the layer corresponding to this snapshot. + * Only set when the flag kFlagIsLayer is set. + */ + Rect layer; + /** + * Name of the texture used to render the layer. + * Only set when the flag kFlagIsLayer is set. + */ + GLuint texture; + /** + * Name of the FBO used to render the layer. + * Only set when the flag kFlagIsLayer is set. + */ + GLuint fbo; + /** + * Opacity of the layer. + * Only set when the flag kFlagIsLayer is set. + */ + float alpha; + +private: + // Clipping rectangle mapped with the transform + Rect mappedClip; +}; // class Snapshot + +}; // namespace uirenderer +}; // namespace android + +#endif // ANDROID_UI_SNAPSHOT_H |