notaz.gp2x.de
/
libpicofe.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make gl layer reinitializable
[libpicofe.git]
/
gl.c
diff --git
a/gl.c
b/gl.c
index
44e0dd5
..
3f72c77
100644
(file)
--- a/
gl.c
+++ b/
gl.c
@@
-10,6
+10,15
@@
static EGLDisplay edpy;
static EGLSurface esfc;
static EGLContext ectxt;
static EGLSurface esfc;
static EGLContext ectxt;
+static GLuint texture_name;
+
+/* for external flips */
+void *gl_es_display;
+void *gl_es_surface;
+
+static int tex_w, tex_h;
+static void *tex_mem;
+
static int gl_have_error(const char *name)
{
GLenum e = glGetError();
static int gl_have_error(const char *name)
{
GLenum e = glGetError();
@@
-30,11
+39,9
@@
static int gles_have_error(const char *name)
return 0;
}
return 0;
}
-int gl_init(void *display, void *window, int *quirks)
+int gl_init(void *display, void *window, int *quirks
, int w, int h
)
{
EGLConfig ecfg = NULL;
{
EGLConfig ecfg = NULL;
- GLuint texture_name = 0;
- void *tmp_texture_mem = NULL;
EGLint num_config;
int retval = -1;
int ret;
EGLint num_config;
int retval = -1;
int ret;
@@
-49,8
+56,10
@@
int gl_init(void *display, void *window, int *quirks)
goto out;
}
goto out;
}
- tmp_texture_mem = calloc(1, 1024 * 512 * 2);
- if (tmp_texture_mem == NULL) {
+ for (tex_w = 1; tex_w < w; tex_w *= 2);
+ for (tex_h = 1; tex_h < h; tex_h *= 2);
+ tex_mem = realloc(tex_mem, tex_w * tex_h * 2);
+ if (tex_mem == NULL) {
fprintf(stderr, "OOM\n");
goto out;
}
fprintf(stderr, "OOM\n");
goto out;
}
@@
-95,12
+104,15
@@
int gl_init(void *display, void *window, int *quirks)
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_2D);
+ if (texture_name)
+ glDeleteTextures(1, &texture_name);
+
glGenTextures(1, &texture_name);
glBindTexture(GL_TEXTURE_2D, texture_name);
glGenTextures(1, &texture_name);
glBindTexture(GL_TEXTURE_2D, texture_name);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
1024, 512
, 0, GL_RGB,
- GL_UNSIGNED_SHORT_5_6_5, t
mp_texture
_mem);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
tex_w, tex_h
, 0, GL_RGB,
+ GL_UNSIGNED_SHORT_5_6_5, t
ex
_mem);
if (gl_have_error("glTexImage2D"))
goto out;
if (gl_have_error("glTexImage2D"))
goto out;
@@
-119,12
+131,18
@@
int gl_init(void *display, void *window, int *quirks)
if (gl_have_error("init"))
goto out;
if (gl_have_error("init"))
goto out;
+ gl_es_display = (void *)edpy;
+ gl_es_surface = (void *)esfc;
retval = 0;
out:
retval = 0;
out:
- free(tmp_texture_mem);
return retval;
}
return retval;
}
+void gl_announce(void)
+{
+ printf("GL_RENDERER: %s\n", (char *)glGetString(GL_RENDERER));
+}
+
static float vertices[] = {
-1.0f, 1.0f, 0.0f, // 0 0 1
1.0f, 1.0f, 0.0f, // 1 ^
static float vertices[] = {
-1.0f, 1.0f, 0.0f, // 0 0 1
1.0f, 1.0f, 0.0f, // 1 ^
@@
-145,8
+163,8
@@
int gl_flip(const void *fb, int w, int h)
if (fb != NULL) {
if (w != old_w || h != old_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
;
+ float f_w = (float)w /
tex_w
;
+ float f_h = (float)h /
tex_h
;
texture[1*2 + 0] = f_w;
texture[2*2 + 1] = f_h;
texture[3*2 + 0] = f_w;
texture[1*2 + 0] = f_w;
texture[2*2 + 1] = f_h;
texture[3*2 + 0] = f_w;
@@
-185,5
+203,11
@@
void gl_finish(void)
eglTerminate(edpy);
edpy = EGL_NO_DISPLAY;
eglTerminate(edpy);
edpy = EGL_NO_DISPLAY;
+ gl_es_display = (void *)edpy;
+ gl_es_surface = (void *)esfc;
+
+ if (tex_mem) free(tex_mem);
+ tex_mem = NULL;
+
gl_platform_finish();
}
gl_platform_finish();
}