#include <EGL/egl.h>
#include <GLES/gl.h>
+#include "gl_platform.h"
#include "gl.h"
static EGLDisplay edpy;
static EGLSurface esfc;
static EGLContext ectxt;
+/* for external flips */
+void *gl_es_display;
+void *gl_es_surface;
+
static int gl_have_error(const char *name)
{
GLenum e = glGetError();
return 0;
}
-int gl_init(void *display, void *window)
+int gl_init(void *display, void *window, int *quirks)
{
EGLConfig ecfg = NULL;
GLuint texture_name = 0;
EGL_NONE
};
+ ret = gl_platform_init(&display, &window, quirks);
+ if (ret != 0) {
+ fprintf(stderr, "gl_platform_init failed with %d\n", ret);
+ goto out;
+ }
+
tmp_texture_mem = calloc(1, 1024 * 512 * 2);
if (tmp_texture_mem == NULL) {
fprintf(stderr, "OOM\n");
if (gl_have_error("init"))
goto out;
+ gl_es_display = (void *)edpy;
+ gl_es_surface = (void *)esfc;
retval = 0;
out:
free(tmp_texture_mem);
{
static int old_w, old_h;
- if (w != old_w || h != old_h) {
- float f_w = (float)w / 1024.0f;
- float f_h = (float)h / 512.0f;
- texture[1*2 + 0] = f_w;
- texture[2*2 + 1] = f_h;
- texture[3*2 + 0] = f_w;
- texture[3*2 + 1] = f_h;
- old_w = w;
- old_h = h;
+ if (fb != NULL) {
+ if (w != old_w || h != old_h) {
+ float f_w = (float)w / 1024.0f;
+ float f_h = (float)h / 512.0f;
+ texture[1*2 + 0] = f_w;
+ texture[2*2 + 1] = f_h;
+ texture[3*2 + 0] = f_w;
+ texture[3*2 + 1] = f_h;
+ old_w = w;
+ old_h = h;
+ }
+
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h,
+ GL_RGB, GL_UNSIGNED_SHORT_5_6_5, fb);
+ if (gl_have_error("glTexSubImage2D"))
+ return -1;
}
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h,
- GL_RGB, GL_UNSIGNED_SHORT_5_6_5, fb);
- if (gl_have_error("glTexSubImage2D"))
- return -1;
-
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texture);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
esfc = EGL_NO_SURFACE;
eglTerminate(edpy);
edpy = EGL_NO_DISPLAY;
+
+ gl_es_display = (void *)edpy;
+ gl_es_surface = (void *)esfc;
+
+ gl_platform_finish();
}