summaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
authorBryce Harrington <b.harrington@samsung.com>2014-03-20 23:41:00 -0700
committerBryce Harrington <b.harrington@samsung.com>2014-03-20 23:41:00 -0700
commitf0c44e01287e153c1cccbb0e12d53cc3b1c0ebce (patch)
tree1400f157e0644b4067fbe0f766ffff77e9faead8 /src
parentb56dc8ecba6265c2efd4eff28bfc4d269fd1d906 (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.cpp6
-rw-r--r--src/egl.cpp6
-rw-r--r--src/skia-egl.cpp11
-rw-r--r--src/skia-glx.cpp4
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();
}