diff options
| author | Romain Guy <romainguy@google.com> | 2011-01-19 13:42:26 -0800 |
|---|---|---|
| committer | Romain Guy <romainguy@google.com> | 2011-01-19 13:42:26 -0800 |
| commit | 42f3a4b7c35dd1ea1922356eb3611af8cde05179 (patch) | |
| tree | aac476548acfc97b0dd5785ce06008c40b98753a /libs/hwui | |
| parent | a3311ed7a9ddd7ecb066f4731ce4bc3bd3ffd939 (diff) | |
| download | frameworks_base-42f3a4b7c35dd1ea1922356eb3611af8cde05179.zip frameworks_base-42f3a4b7c35dd1ea1922356eb3611af8cde05179.tar.gz frameworks_base-42f3a4b7c35dd1ea1922356eb3611af8cde05179.tar.bz2 | |
Make embedded hardware layers work.
Bug #3369474
Change-Id: Ib6d7fb44eedda9dc2933b5e1b176f307968af91d
Diffstat (limited to 'libs/hwui')
| -rw-r--r-- | libs/hwui/LayerRenderer.cpp | 9 | ||||
| -rw-r--r-- | libs/hwui/LayerRenderer.h | 3 | ||||
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/OpenGLRenderer.h | 13 |
4 files changed, 22 insertions, 5 deletions
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index e6bea78..a167429 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -29,7 +29,6 @@ namespace uirenderer { void LayerRenderer::prepare(bool opaque) { LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->fbo); - glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &mPreviousFbo); glBindFramebuffer(GL_FRAMEBUFFER, mLayer->fbo); OpenGLRenderer::prepare(opaque); @@ -37,11 +36,17 @@ void LayerRenderer::prepare(bool opaque) { void LayerRenderer::finish() { OpenGLRenderer::finish(); - glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFbo); generateMesh(); LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->mFbo); + + // No need to unbind our FBO, this will be taken care of by the caller + // who will invoke OpenGLRenderer::resume() +} + +GLint LayerRenderer::getTargetFbo() { + return mLayer->fbo; } /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/LayerRenderer.h b/libs/hwui/LayerRenderer.h index f2fb898..1e39847 100644 --- a/libs/hwui/LayerRenderer.h +++ b/libs/hwui/LayerRenderer.h @@ -51,6 +51,7 @@ public: bool hasLayer(); Region* getRegion(); + GLint getTargetFbo(); static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false); static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height); @@ -61,8 +62,6 @@ private: void generateMesh(); Layer* mLayer; - GLuint mPreviousFbo; - }; // class LayerRenderer }; // namespace uirenderer diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 2067acc..2c50ac3 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -200,7 +200,7 @@ void OpenGLRenderer::resume() { glDisable(GL_DITHER); - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, getTargetFbo()); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); mCaches.blend = true; diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index 272c5c2..4150ddc 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -145,14 +145,27 @@ protected: return mSnapshot; } + /** + * Returns the region of the current layer. + */ virtual Region* getRegion() { return mSnapshot->region; } + /** + * Indicates whether rendering is currently targeted at a layer. + */ virtual bool hasLayer() { return (mSnapshot->flags & Snapshot::kFlagFboTarget) && mSnapshot->region; } + /** + * Returns the name of the FBO this renderer is rendering into. + */ + virtual GLint getTargetFbo() { + return 0; + } + private: /** * Saves the current state of the renderer as a new snapshot. |
