diff --git a/project/jni/glshim/src/gl/gl.c b/project/jni/glshim/src/gl/gl.c index 1b6963bc7..fd1c398fe 100755 --- a/project/jni/glshim/src/gl/gl.c +++ b/project/jni/glshim/src/gl/gl.c @@ -30,6 +30,7 @@ GLuint readhack_seq = 0; GLuint gl_batch = 0; GLuint gl_mergelist = 1; int blendhack = 0; +char gl_version[50]; __attribute__((constructor)) void initialize_glshim() { @@ -79,7 +80,7 @@ const GLubyte *glGetString(GLenum name) { printf("**warning** glGetString(%i) called with bad init\n", name);*/ switch (name) { case GL_VERSION: - return (GLubyte *)"1.4 glshim wrapper"; + return (GLubyte *)gl_version; case GL_EXTENSIONS: return (const GLubyte *)(char *){ "GL_ARB_vertex_buffer_object " @@ -122,7 +123,7 @@ const GLubyte *glGetString(GLenum name) { // "GL_ARB_texture_cube_map " }; case GL_VENDOR: - return (GLubyte *)"OpenPandora"; + return (GLubyte *)"ptitSeb"; case GL_RENDERER: return (GLubyte *)"GLES_CM wrapper"; case GL_SHADING_LANGUAGE_VERSION: diff --git a/project/jni/glshim/src/gl/texture.c b/project/jni/glshim/src/gl/texture.c index 7c02a6dd3..bf94f2697 100755 --- a/project/jni/glshim/src/gl/texture.c +++ b/project/jni/glshim/src/gl/texture.c @@ -393,6 +393,50 @@ void glTexImage2D(GLenum target, GLint level, GLint internalformat, bound->shrink=1; } break; + case 9: //advertise 8192 max texture size, but >4096 are quadshrinked and >512 are shrinked, but not for empty texture + if ((width>4096) || (height>4096)) { + GLvoid *out = pixels; + pixel_quarterscale(pixels, &out, width, height, format, type); + if (out != pixels && pixels!=datab) + free(pixels); + pixels = out; + width /= 4; + height /= 4; + bound->shrink=2; + } else + if ((width>512) || (height>512)) { + GLvoid *out = pixels; + pixel_halfscale(pixels, &out, width, height, format, type); + if (out != pixels && pixels!=datab) + free(pixels); + pixels = out; + width /= 2; + height /= 2; + bound->shrink=1; + } + break; + case 10://advertise 8192 max texture size, but >2048 are quadshrinked and >512 are shrinked, but not for empty texture + if ((width>2048) || (height>2048)) { + GLvoid *out = pixels; + pixel_quarterscale(pixels, &out, width, height, format, type); + if (out != pixels && pixels!=datab) + free(pixels); + pixels = out; + width /= 4; + height /= 4; + bound->shrink=2; + } else + if ((width>512) || (height>512)) { + GLvoid *out = pixels; + pixel_halfscale(pixels, &out, width, height, format, type); + if (out != pixels && pixels!=datab) + free(pixels); + pixels = out; + width /= 2; + height /= 2; + bound->shrink=1; + } + break; } } @@ -465,6 +509,8 @@ void glTexImage2D(GLenum target, GLint level, GLint internalformat, case 7: //only > 512 /2, but not for empty texture break; case 8: //advertise 8192 max texture size, but >2048 are shrinked to 2048 + case 9: //advertise 8192 max texture size, but >4096 are quadshrinked and >512 are shrinked, but not for empty texture (but >2048 are not supported anyway) + case 10://advertise 8192 max texture size, but >2048 are quadshrinked and >512 are shrinked, but not for empty texture (but >2048 are not supported anyway) if((width>4096) || (height>4096)) { width /= 4; height /= 4; diff --git a/project/jni/glshim/src/glx/glx.c b/project/jni/glshim/src/glx/glx.c index 468bb18db..b84fe9555 100755 --- a/project/jni/glshim/src/glx/glx.c +++ b/project/jni/glshim/src/glx/glx.c @@ -167,6 +167,7 @@ extern int texstream; extern int copytex; extern int nolumalpha; extern int blendhack; +extern char gl_version[50]; bool g_recyclefbo = false; static int g_width=0, g_height=0; @@ -373,6 +374,14 @@ static void scan_env() { texshrink = 8; printf("LIBGL: Texture shink, mode 8 selected (advertise 8192 max texture size, but >2048 are shrinked to 2048)\n"); } + if (env_shrink && strcmp(env_shrink, "9") == 0) { + texshrink = 9; + printf("LIBGL: Texture shink, mode 9 selected (advertise 8192 max texture size, but >4096 are quadshrinked and > 512 are shrinked), but not for empty texture\n"); + } + if (env_shrink && strcmp(env_shrink, "10") == 0) { + texshrink = 10; + printf("LIBGL: Texture shink, mode 10 selected (advertise 8192 max texture size, but >2048 are quadshrinked and > 512 are shrinked), but not for empty texture\n"); + } char *env_dump = getenv("LIBGL_TEXDUMP"); if (env_dump && strcmp(env_dump, "1") == 0) { texdump = 1; @@ -409,6 +418,12 @@ static void scan_env() { env(LIBGL_BLENDHACK, blendhack, "Change Blend GL_SRC_ALPHA, GL_ONE to GL_ONE, GL_ONE"); + char *env_version = getenv("LIBGL_VERSION"); + if (env_version) { + printf("LIBGL: Overide version string with \"%s\" (should be in the form of \"1.x\")\n", gl_version); + } + snprintf(gl_version, 49, "%s glshim wrapper", (env_version)?env_version:"1.5"); + char cwd[1024]; if (getcwd(cwd, sizeof(cwd))!= NULL) printf("LIBGL: Current folder is:%s\n", cwd);