diff options
-rw-r--r-- | include/private/hwui/DrawGlInfo.h | 50 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 32 |
2 files changed, 61 insertions, 21 deletions
diff --git a/include/private/hwui/DrawGlInfo.h b/include/private/hwui/DrawGlInfo.h new file mode 100644 index 0000000..1e9912b --- /dev/null +++ b/include/private/hwui/DrawGlInfo.h @@ -0,0 +1,50 @@ +/* + * 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_DRAW_GL_INFO_H +#define ANDROID_HWUI_DRAW_GL_INFO_H + +namespace android { +namespace uirenderer { + +/** + * Structure used by OpenGLRenderer::callDrawGLFunction() to pass and + * receive data from OpenGL functors. + */ +struct DrawGlInfo { + // Input: current clip rect + int clipLeft; + int clipTop; + int clipRight; + int clipBottom; + + // Input: is the render target an FBO + bool isLayer; + + // Input: current transform matrix, in OpenGL format + float transform[16]; + + // Output: dirty region to redraw + float dirtyLeft; + float dirtyTop; + float dirtyRight; + float dirtyBottom; +}; // struct DrawGlInfo + +}; // namespace uirenderer +}; // namespace android + +#endif // ANDROID_HWUI_DRAW_GL_INFO_H diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index d265804..d9d7d23 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -26,6 +26,8 @@ #include <utils/Log.h> #include <utils/StopWatch.h> +#include <private/hwui/DrawGlInfo.h> + #include <ui/Rect.h> #include "OpenGLRenderer.h" @@ -227,30 +229,18 @@ bool OpenGLRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) { } #endif - struct { - // Input: current clip rect - int clipLeft; - int clipTop; - int clipRight; - int clipBottom; - - // Output: dirty region to redraw - float dirtyLeft; - float dirtyTop; - float dirtyRight; - float dirtyBottom; - } constraints; - - constraints.clipLeft = clip.left; - constraints.clipTop = clip.top; - constraints.clipRight = clip.right; - constraints.clipBottom = clip.bottom; + DrawGlInfo info; + info.clipLeft = clip.left; + info.clipTop = clip.top; + info.clipRight = clip.right; + info.clipBottom = clip.bottom; + info.isLayer = hasLayer(); + getSnapshot()->transform->copyTo(&info.transform[0]); - status_t result = (*functor)(0, &constraints); + status_t result = (*functor)(0, &info); if (result != 0) { - Rect localDirty(constraints.dirtyLeft, constraints.dirtyTop, - constraints.dirtyRight, constraints.dirtyBottom); + Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom); dirty.unionWith(localDirty); } |