diff options
| author | Bryce Harrington <b.harrington@samsung.com> | 2014-03-20 23:41:00 -0700 |
|---|---|---|
| committer | Bryce Harrington <b.harrington@samsung.com> | 2014-03-20 23:41:00 -0700 |
| commit | f0c44e01287e153c1cccbb0e12d53cc3b1c0ebce (patch) | |
| tree | 1400f157e0644b4067fbe0f766ffff77e9faead8 /src | |
| parent | b56dc8ecba6265c2efd4eff28bfc4d269fd1d906 (diff) | |
Fix failure to run in EGL mode
In addition to breaking out the cairo and skia claims on the egl context
separately, we also need to call eglMakeCurrent and eglSwapBuffers so
that it will actually draw to the screen.
Diffstat (limited to 'src')
| -rw-r--r-- | src/cairo-egl.cpp | 6 | ||||
| -rw-r--r-- | src/egl.cpp | 6 | ||||
| -rw-r--r-- | src/skia-egl.cpp | 11 | ||||
| -rw-r--r-- | src/skia-glx.cpp | 4 |
4 files changed, 22 insertions, 5 deletions
diff --git a/src/cairo-egl.cpp b/src/cairo-egl.cpp index 5a81308..253bc7c 100644 --- a/src/cairo-egl.cpp +++ b/src/cairo-egl.cpp @@ -32,6 +32,8 @@ create_cairo_surface_egl (int width, int height) return NULL; } + eglMakeCurrent(state->egl_display, state->egl_surface, state->egl_surface, state->egl_context); + cairo_device = cairo_egl_device_create (state->egl_display, state->egl_context); cairo_gl_device_set_thread_aware (cairo_device, 0); cairo_surface = cairo_gl_surface_create_for_egl (cairo_device, @@ -40,6 +42,9 @@ create_cairo_surface_egl (int width, int height) cairo_device_destroy (cairo_device); + glClearColor(1, 1, 1, 1); + glClear(GL_COLOR_BUFFER_BIT); + return cairo_surface; } @@ -52,4 +57,5 @@ destroy_cairo_egl(void) void update_cairo_egl(void) { + eglSwapBuffers(state->egl_display, state->egl_surface); } diff --git a/src/egl.cpp b/src/egl.cpp index ee34f5f..5f04110 100644 --- a/src/egl.cpp +++ b/src/egl.cpp @@ -8,6 +8,7 @@ #include <GLES2/gl2.h> #endif +#include <unistd.h> #include "egl.h" @@ -27,7 +28,7 @@ createEGLContextAndWindow(egl_state_t *state, int width, int height) EGL_NONE }; EGLint ctx_attr[] = { - EGL_CONTEXT_CLIENT_VERSION, 3, + EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; EGLConfig config; @@ -87,8 +88,11 @@ void destroyEGLContextAndWindow (egl_state_t *state) { if (state->egl_display) { + eglMakeCurrent (state->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext (state->egl_display, state->egl_context); eglDestroySurface (state->egl_display, state->egl_surface); + state->egl_context = EGL_NO_CONTEXT; + state->egl_surface = EGL_NO_SURFACE; eglTerminate (state->egl_display); } diff --git a/src/skia-egl.cpp b/src/skia-egl.cpp index d3a58a4..a39386f 100644 --- a/src/skia-egl.cpp +++ b/src/skia-egl.cpp @@ -19,12 +19,12 @@ #include "egl.h" static egl_state_t *state; +static GrContext* ctx; SkBaseDevice * create_skia_device_egl (int width, int height) { GrBackendRenderTargetDesc desc; - GrContext* ctx; GrRenderTarget* target; SkGpuDevice *device; @@ -45,25 +45,30 @@ create_skia_device_egl (int width, int height) desc.fHeight = height; desc.fConfig = kSkia8888_GrPixelConfig; desc.fOrigin = kBottomLeft_GrSurfaceOrigin; - //desc.fOrigin = kTopLeft_GrSurfaceOrigin; desc.fSampleCnt = 4; desc.fStencilBits = 1; desc.fRenderTargetHandle = 0; ctx = GrContext::Create(kOpenGL_GrBackend, 0); target = ctx->wrapBackendRenderTarget(desc); - device = new SkGpuDevice(ctx, target); + + glClearColor(1, 1, 1, 1); + glClear(GL_COLOR_BUFFER_BIT); + return device; } void destroy_skia_egl(void) { + delete ctx; cleanup_state_egl(state); } void update_skia_egl(void) { + ctx->flush(); + eglSwapBuffers(state->egl_display, state->egl_surface); } diff --git a/src/skia-glx.cpp b/src/skia-glx.cpp index ff24130..daaa49d 100644 --- a/src/skia-glx.cpp +++ b/src/skia-glx.cpp @@ -9,6 +9,7 @@ #include "glx.h" static glx_state_t *state; +GrContext* ctx; static bool ctxErrorOccurred = false; static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) @@ -21,7 +22,6 @@ SkBaseDevice * create_skia_device_glx (int width, int height) { GrBackendRenderTargetDesc desc; - GrContext* ctx; GrRenderTarget* target; SkGpuDevice *device; @@ -83,11 +83,13 @@ create_skia_device_glx (int width, int height) void destroy_skia_glx(void) { + delete ctx; cleanup_state_glx(state); } void update_skia_glx(void) { + ctx->flush(); } |