diff options
author | Jorim Jaggi <jjaggi@google.com> | 2014-05-11 16:16:17 +0200 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2014-05-11 16:16:17 +0200 |
commit | ddc52285ca6fd147f442a21e90e0e4702a10d304 (patch) | |
tree | 67d52cacd41be03c2166e87e88f977e970c4b044 /libs | |
parent | 7b51185362df5bf1c4844c171350197a2fd2a4c1 (diff) | |
download | frameworks_base-ddc52285ca6fd147f442a21e90e0e4702a10d304.zip frameworks_base-ddc52285ca6fd147f442a21e90e0e4702a10d304.tar.gz frameworks_base-ddc52285ca6fd147f442a21e90e0e4702a10d304.tar.bz2 |
Revert "Simplify projection matrix management."
This reverts commit 0efaa71d5414287ed4beac0a88cf76f7e33a1e74.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/DisplayListRenderer.cpp | 3 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 28 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.h | 3 | ||||
-rw-r--r-- | libs/hwui/Snapshot.cpp | 1 | ||||
-rw-r--r-- | libs/hwui/Snapshot.h | 11 |
5 files changed, 27 insertions, 19 deletions
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index a4bce3a..2391e80 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -57,6 +57,9 @@ DisplayListData* DisplayListRenderer::finishRecording() { } void DisplayListRenderer::setViewport(int width, int height) { + // TODO: DisplayListRenderer shouldn't have a projection matrix, as it should never be used + mProjectionMatrix.loadOrtho(0, width, height, 0, -1, 1); + initializeViewport(width, height); } diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 091cdf4..20b038d 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -171,7 +171,7 @@ void OpenGLRenderer::setViewport(int width, int height) { } void OpenGLRenderer::initViewport(int width, int height) { - mSnapshot->orthoMatrix.loadOrtho(0, width, height, 0, -1, 1); + mProjectionMatrix.loadOrtho(0, width, height, 0, -1, 1); initializeViewport(width, height); } @@ -621,13 +621,14 @@ void OpenGLRenderer::flushLayerUpdates() { /////////////////////////////////////////////////////////////////////////////// void OpenGLRenderer::onSnapshotRestored(const Snapshot& removed, const Snapshot& restored) { - bool restoreViewport = removed.flags & Snapshot::kFlagIsFboLayer; + bool restoreOrtho = removed.flags & Snapshot::kFlagDirtyOrtho; bool restoreClip = removed.flags & Snapshot::kFlagClipSet; bool restoreLayer = removed.flags & Snapshot::kFlagIsLayer; - if (restoreViewport) { + if (restoreOrtho) { const Rect& r = restored.viewport; glViewport(r.left, r.top, r.right, r.bottom); + mProjectionMatrix.load(removed.orthoMatrix); // TODO: should ortho be stored in 'restored'? } if (restoreClip) { @@ -846,12 +847,14 @@ bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip) { layer->setFbo(mCaches.fboCache.get()); mSnapshot->region = &mSnapshot->layer->region; - mSnapshot->flags |= Snapshot::kFlagFboTarget | Snapshot::kFlagIsFboLayer; + mSnapshot->flags |= Snapshot::kFlagFboTarget | Snapshot::kFlagIsFboLayer | + Snapshot::kFlagDirtyOrtho; mSnapshot->fbo = layer->getFbo(); mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f); mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom); mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight()); mSnapshot->height = bounds.getHeight(); + mSnapshot->orthoMatrix.load(mProjectionMatrix); endTiling(); debugOverdraw(false, false); @@ -880,7 +883,8 @@ bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip) { // Change the ortho projection glViewport(0, 0, bounds.getWidth(), bounds.getHeight()); - mSnapshot->orthoMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f); + + mProjectionMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f); return true; } @@ -1690,14 +1694,12 @@ void OpenGLRenderer::setupDrawModelView(ModelViewMode mode, bool offset, } bool dirty = right - left > 0.0f && bottom - top > 0.0f; - const Matrix4& transformMatrix = ignoreTransform ? Matrix4::identity() : *currentTransform(); - mCaches.currentProgram->set(mSnapshot->orthoMatrix, mModelViewMatrix, transformMatrix, offset); - if (dirty && mTrackDirtyRegions) { - if (!ignoreTransform) { - dirtyLayer(left, top, right, bottom, *currentTransform()); - } else { - dirtyLayer(left, top, right, bottom); - } + if (!ignoreTransform) { + mCaches.currentProgram->set(mProjectionMatrix, mModelViewMatrix, *currentTransform(), offset); + if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom, *currentTransform()); + } else { + mCaches.currentProgram->set(mProjectionMatrix, mModelViewMatrix, mat4::identity(), offset); + if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom); } } diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index d140428..4f7f01e 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -930,6 +930,9 @@ private: */ Texture* getTexture(const SkBitmap* bitmap); + // Ortho matrix used for projection in shaders + mat4 mProjectionMatrix; + /** * Model-view matrix used to position/size objects * diff --git a/libs/hwui/Snapshot.cpp b/libs/hwui/Snapshot.cpp index b2df86f..6bfa203 100644 --- a/libs/hwui/Snapshot.cpp +++ b/libs/hwui/Snapshot.cpp @@ -55,7 +55,6 @@ Snapshot::Snapshot(const sp<Snapshot>& s, int saveFlags) , empty(false) , viewport(s->viewport) , height(s->height) - , orthoMatrix(s->orthoMatrix) , alpha(s->alpha) { if (saveFlags & SkCanvas::kMatrix_SaveFlag) { diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h index aede079..038aea8 100644 --- a/libs/hwui/Snapshot.h +++ b/libs/hwui/Snapshot.h @@ -65,16 +65,17 @@ public: * Indicates that this snapshot is a special type of layer * backed by an FBO. This flag only makes sense when the * flag kFlagIsLayer is also set. - * - * Viewport has been modified to fit the new Fbo, and must be - * restored when this snapshot is restored. */ kFlagIsFboLayer = 0x4, /** + * Indicates that this snapshot has changed the ortho matrix. + */ + kFlagDirtyOrtho = 0x8, + /** * Indicates that this snapshot or an ancestor snapshot is * an FBO layer. */ - kFlagFboTarget = 0x8, + kFlagFboTarget = 0x10 }; /** @@ -182,7 +183,7 @@ public: int height; /** - * Contains the current orthographic, projection matrix. + * Contains the previous ortho matrix. */ mat4 orthoMatrix; |