drm_hwcomposer: make the gl worker compositor not nested
Change-Id: I06b75644408a570044499a9f603a478f3199661f
diff --git a/glworker.cpp b/glworker.cpp
index b2deb3e..0cb2bf7 100644
--- a/glworker.cpp
+++ b/glworker.cpp
@@ -407,11 +407,11 @@
return 0;
}
-GLWorker::Compositor::Compositor()
+GLWorkerCompositor::GLWorkerCompositor()
: egl_display_(EGL_NO_DISPLAY), egl_ctx_(EGL_NO_CONTEXT) {
}
-int GLWorker::Compositor::Init() {
+int GLWorkerCompositor::Init() {
int ret = 0;
const char *egl_extensions;
const char *gl_extensions;
@@ -502,14 +502,14 @@
return 0;
}
-GLWorker::Compositor::~Compositor() {
+GLWorkerCompositor::~GLWorkerCompositor() {
if (egl_display_ != EGL_NO_DISPLAY && egl_ctx_ != EGL_NO_CONTEXT)
if (eglDestroyContext(egl_display_, egl_ctx_) == EGL_FALSE)
ALOGE("Failed to destroy OpenGL ES Context: %s", GetEGLError());
}
-int GLWorker::Compositor::Composite(hwc_layer_1 *layers, size_t num_layers,
- sp<GraphicBuffer> framebuffer) {
+int GLWorkerCompositor::Composite(hwc_layer_1 *layers, size_t num_layers,
+ sp<GraphicBuffer> framebuffer) {
ATRACE_CALL();
int ret = 0;
size_t i;
@@ -654,7 +654,7 @@
return ret;
}
-int GLWorker::DoComposition(Compositor &compositor, Work *work) {
+int GLWorker::DoComposition(GLWorkerCompositor &compositor, Work *work) {
int ret =
compositor.Composite(work->layers, work->num_layers, work->framebuffer);
@@ -800,7 +800,7 @@
TRY(pthread_mutex_lock(&lock_), "lock GLThread", return );
- Compositor compositor;
+ GLWorkerCompositor compositor;
TRY(compositor.Init(), "initialize GL", goto out_signal_done);
diff --git a/glworker.h b/glworker.h
index 4ac0e7d..e9febec 100644
--- a/glworker.h
+++ b/glworker.h
@@ -30,6 +30,8 @@
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
+#include <ui/GraphicBuffer.h>
+
struct hwc_layer_1;
namespace android {
@@ -77,6 +79,24 @@
}
};
+class GLWorkerCompositor {
+ public:
+ GLWorkerCompositor();
+ ~GLWorkerCompositor();
+
+ int Init();
+
+ int Composite(hwc_layer_1 *layers, size_t num_layers,
+ sp<GraphicBuffer> framebuffer);
+
+ private:
+ EGLDisplay egl_display_;
+ EGLContext egl_ctx_;
+
+ std::vector<AutoGLProgram> blend_programs_;
+ AutoGLBuffer vertex_buffer_;
+};
+
class GLWorker {
public:
struct Work {
@@ -89,24 +109,6 @@
Work(const Work &rhs) = delete;
};
- class Compositor {
- public:
- Compositor();
- ~Compositor();
-
- int Init();
-
- int Composite(hwc_layer_1 *layers, size_t num_layers,
- sp<GraphicBuffer> framebuffer);
-
- private:
- EGLDisplay egl_display_;
- EGLContext egl_ctx_;
-
- std::vector<AutoGLProgram> blend_programs_;
- AutoGLBuffer vertex_buffer_;
- };
-
GLWorker();
~GLWorker();
@@ -126,7 +128,7 @@
int worker_ret_;
void WorkerRoutine();
- int DoComposition(Compositor &compositor, Work *work);
+ int DoComposition(GLWorkerCompositor &compositor, Work *work);
int SignalWorker(Work *work, bool worker_exit);