From 10e68400edfaca40ef906ea19fa63974e4471e12 Mon Sep 17 00:00:00 2001 From: ArtDev <45949002+artdeell@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:22:53 +0300 Subject: [PATCH] Fix[gen]: ignore lod bias for textures, fix glRenderbufferStorage --- app/src/main/tinywrapper/es3_overrides.h | 9 ++- app/src/main/tinywrapper/main.c | 84 +++++++++++++++++++++++- 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/app/src/main/tinywrapper/es3_overrides.h b/app/src/main/tinywrapper/es3_overrides.h index 178115f..4a1d17e 100644 --- a/app/src/main/tinywrapper/es3_overrides.h +++ b/app/src/main/tinywrapper/es3_overrides.h @@ -111,4 +111,11 @@ GLESOVERRIDE(glVertexAttribI4ubv) GLESOVERRIDE(glVertexAttribI4sv) GLESOVERRIDE(glVertexAttribI4usv) GLESOVERRIDE(glBufferStorage) -GLESOVERRIDE(glGetStringi) \ No newline at end of file +GLESOVERRIDE(glGetStringi) +GLESOVERRIDE(glTexParameterf) +GLESOVERRIDE(glTexParameteri) +GLESOVERRIDE(glTexParameterfv) +GLESOVERRIDE(glTexParameteriv) +GLESOVERRIDE(glTexParameterIiv) +GLESOVERRIDE(glTexParameterIuiv) +GLESOVERRIDE(glRenderbufferStorage) \ No newline at end of file diff --git a/app/src/main/tinywrapper/main.c b/app/src/main/tinywrapper/main.c index 7ff11ac..b3b4997 100644 --- a/app/src/main/tinywrapper/main.c +++ b/app/src/main/tinywrapper/main.c @@ -136,7 +136,35 @@ void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei widt } } -void glTexParameteri(GLenum target, GLenum pname, GLint param) { +bool filter_params_integer(GLenum target, GLenum pname, GLint param) { + return true; +} +bool filter_params_float(GLenum target, GLenum pname, GLfloat param) { + if(pname == GL_TEXTURE_LOD_BIAS) { + if(param != 0.0f) { + static bool lodbias_trigger = false; + if(!lodbias_trigger) { + printf("LTW: setting GL_TEXTURE_LOD_BIAS to nondefault value not supported\n"); + } + } + return false; + } + return true; +} +void glTexParameterf( GLenum target, + GLenum pname, + GLfloat param) { + if(!current_context) return; + if(!filter_params_integer(target, pname, (GLint) param)) return; + if(!filter_params_float(target, pname, param)) return; + es3_functions.glTexParameterf(target, pname, param); +} +void glTexParameteri( GLenum target, + GLenum pname, + GLint param) { + if(!current_context) return; + if(!filter_params_integer(target, pname, param)) return; + if(!filter_params_float(target, pname, (GLfloat)param)) return; switch (pname) { case GL_TEXTURE_MIN_FILTER: case GL_TEXTURE_MAG_FILTER: @@ -146,6 +174,60 @@ void glTexParameteri(GLenum target, GLenum pname, GLint param) { es3_functions.glTexParameteri(target, pname, param); } +void glTexParameterfv( GLenum target, + GLenum pname, + const GLfloat * params) { + if(!current_context) return; + if(!filter_params_integer(target, pname, (GLint)*params)) return; + if(!filter_params_float(target, pname, *params)) return; + es3_functions.glTexParameterfv(target, pname, params); +} +void glTexParameteriv( GLenum target, + GLenum pname, + const GLint * params) { + if(!current_context) return; + if(!filter_params_integer(target, pname, *params)) return; + if(!filter_params_float(target, pname, (GLfloat)*params)) return; + es3_functions.glTexParameteriv(target, pname, params); +} +static bool trigger_gltexparameteri = false; +void glTexParameterIiv( GLenum target, + GLenum pname, + const GLint * params) { + if(!current_context) return; + if(pname != GL_TEXTURE_SWIZZLE_RGBA) { + if(!trigger_gltexparameteri) { + printf("LTW: glTexParameterIiv for parameters other than GL_TEXTURE_SWIZZLE_RGBA is not supported\n"); + trigger_gltexparameteri = true; + } + return; + } + es3_functions.glTexParameteriv(target, pname, params); +} +void glTexParameterIuiv( GLenum target, + GLenum pname, + const GLuint * params) { + if(!current_context) return; + if(pname != GL_TEXTURE_SWIZZLE_RGBA) { + if(!trigger_gltexparameteri) { + printf("LTW: glTexParameterIuiv for parameters other than GL_TEXTURE_SWIZZLE_RGBA is not supported\n"); + trigger_gltexparameteri = true; + } + return; + } + es3_functions.glTexParameteriv(target, pname, (const GLint*)params); +} + +void glRenderbufferStorage( GLenum target, + GLenum internalformat, + GLsizei width, + GLsizei height) { + if(!current_context) return; + if(internalformat == GL_DEPTH_COMPONENT) internalformat = GL_DEPTH_COMPONENT16; + es3_functions.glRenderbufferStorage(target, internalformat, width, height); +} + + void glBufferStorage(GLenum target, GLsizeiptr size, const void * data,