X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=libpicofe.git;a=blobdiff_plain;f=gl.c;h=2ebb87c7077187561119db2069c90c74c6b1fed2;hp=2360a0c34b4a815d992e883856ed9e0c1695134e;hb=20b143089cc395dbcd51cac516a9e36f4ab6f5ac;hpb=b98018548fb60e1ed7d417dae0e54864a9d2d272 diff --git a/gl.c b/gl.c index 2360a0c..2ebb87c 100644 --- a/gl.c +++ b/gl.c @@ -3,12 +3,17 @@ #include #include +#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(); @@ -29,7 +34,7 @@ static int gles_have_error(const char *name) 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; @@ -42,6 +47,12 @@ int gl_init(void *display, void *window) 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"); @@ -112,6 +123,8 @@ int gl_init(void *display, void *window) if (gl_have_error("init")) goto out; + gl_es_display = (void *)edpy; + gl_es_surface = (void *)esfc; retval = 0; out: free(tmp_texture_mem); @@ -136,22 +149,24 @@ int gl_flip(const void *fb, int w, int h) { 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); @@ -175,4 +190,9 @@ void gl_finish(void) esfc = EGL_NO_SURFACE; eglTerminate(edpy); edpy = EGL_NO_DISPLAY; + + gl_es_display = (void *)edpy; + gl_es_surface = (void *)esfc; + + gl_platform_finish(); }