| /* |
| * Copyright (C) 2011 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_HWUI_LAYER_RENDERER_H |
| #define ANDROID_HWUI_LAYER_RENDERER_H |
| |
| #include <cutils/compiler.h> |
| |
| #include "OpenGLRenderer.h" |
| #include "Layer.h" |
| |
| #include <SkBitmap.h> |
| |
| namespace android { |
| namespace uirenderer { |
| |
| class RenderState; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Defines |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| // Debug |
| #if DEBUG_LAYER_RENDERER |
| #define LAYER_RENDERER_LOGD(...) ALOGD(__VA_ARGS__) |
| #else |
| #define LAYER_RENDERER_LOGD(...) |
| #endif |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Renderer |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| class LayerRenderer: public OpenGLRenderer { |
| public: |
| LayerRenderer(RenderState& renderState, Layer* layer); |
| virtual ~LayerRenderer(); |
| |
| virtual void onViewportInitialized() { /* do nothing */ } |
| virtual status_t prepareDirty(float left, float top, float right, float bottom, bool opaque); |
| virtual status_t clear(float left, float top, float right, float bottom, bool opaque); |
| virtual void finish(); |
| |
| static Layer* createTextureLayer(RenderState& renderState); |
| static Layer* createRenderLayer(RenderState& renderState, uint32_t width, uint32_t height); |
| static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height); |
| static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height, |
| bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform); |
| static void destroyLayer(Layer* layer); |
| ANDROID_API static void destroyLayerDeferred(Layer* layer); |
| static bool copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap); |
| |
| static void flushLayer(RenderState& renderState, Layer* layer); |
| |
| protected: |
| virtual void ensureStencilBuffer(); |
| virtual bool hasLayer() const; |
| virtual Region* getRegion() const; |
| virtual GLuint getTargetFbo() const; |
| virtual bool suppressErrorChecks() const; |
| |
| private: |
| void generateMesh(); |
| |
| Layer* mLayer; |
| }; // class LayerRenderer |
| |
| }; // namespace uirenderer |
| }; // namespace android |
| |
| #endif // ANDROID_HWUI_LAYER_RENDERER_H |