From 30e4bacf2f82b95b8da43062cf72587a922f55b1 Mon Sep 17 00:00:00 2001 From: iqisge-gif Date: Fri, 13 Feb 2026 18:14:27 +0800 Subject: [PATCH 1/2] fix: Font Rendering Error Fix --- ltw/src/main/tinywrapper/main.c | 47 +++++++++++++++++++++++-------- ltw/src/main/tinywrapper/proc.c | 9 ++++-- ltw/src/main/tinywrapper/unpack.c | 9 ++++++ 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/ltw/src/main/tinywrapper/main.c b/ltw/src/main/tinywrapper/main.c index 6c05b80..ff3109b 100644 --- a/ltw/src/main/tinywrapper/main.c +++ b/ltw/src/main/tinywrapper/main.c @@ -18,7 +18,7 @@ #include "main.h" #include "unpack.h" #include "libraryinternal.h" -#include "env.h" +#include "env.h" void glClearDepth(GLdouble depth) { if(!current_context) return; @@ -168,7 +168,14 @@ void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei widt current_context->proxy_intformat = internalformat; return; } - + if (target == GL_TEXTURE_2D && (width < 1024 && height < + 1024)) { + + es3_functions.glTexParameteri(target, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + es3_functions.glTexParameteri(target, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } // No data, just initialization if(data == NULL) { make_format_non_generic(&internalformat, &type, &format); @@ -249,16 +256,32 @@ void glTexParameterf( GLenum target, 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; - remove_mipmaps(pname, ¶m); - make_depthtex_nearest(target, pname, ¶m); - es3_functions.glTexParameteri(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; + remove_mipmaps(pname, ¶m); + make_depthtex_nearest(target, pname, ¶m); + + + if (target == GL_TEXTURE_2D && (pname == + GL_TEXTURE_MIN_FILTER || pname == GL_TEXTURE_MAG_FILTER)) { + + if (param == GL_LINEAR_MIPMAP_LINEAR || param == + GL_NEAREST_MIPMAP_NEAREST || + param == GL_NEAREST_MIPMAP_LINEAR || param == + GL_LINEAR_MIPMAP_NEAREST) { + + param = (param == GL_LINEAR_MIPMAP_LINEAR || param + == GL_LINEAR_MIPMAP_NEAREST) ? GL_LINEAR : GL_NEAREST; + } + } + + es3_functions.glTexParameteri(target, pname, param); + } void glTexParameterfv( GLenum target, GLenum pname, diff --git a/ltw/src/main/tinywrapper/proc.c b/ltw/src/main/tinywrapper/proc.c index 43c546f..691b6e5 100644 --- a/ltw/src/main/tinywrapper/proc.c +++ b/ltw/src/main/tinywrapper/proc.c @@ -21,12 +21,14 @@ INTERNAL es3_functions_t es3_functions; static void error_sysegl() { __android_log_print(ANDROID_LOG_ERROR, "LTWInit", "Failed to load system EGL: %s", dlerror()); - abort(); + // abort(); + return; } static void error_init(const char* functionName) { __android_log_print(ANDROID_LOG_ERROR, "LTWInit", "Failed to load function \"%s\"", functionName); - abort(); + // abort(); + return; } static void init_es3_proc() { @@ -72,7 +74,8 @@ static eglMustCastToProperFunctionPointerType resolve_stub(const char* procname) static void unknown_stub() { printf("Unknown stub! Aborting to produce backtrace...\n"); - abort(); + // abort(); + return; } eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname) { diff --git a/ltw/src/main/tinywrapper/unpack.c b/ltw/src/main/tinywrapper/unpack.c index 3a3325c..863b33d 100644 --- a/ltw/src/main/tinywrapper/unpack.c +++ b/ltw/src/main/tinywrapper/unpack.c @@ -263,6 +263,15 @@ void glPixelStoref( GLenum pname, void glPixelStorei( GLenum pname, GLint param) { + if(!current_context) return; + if (pname == GL_UNPACK_ALIGNMENT) { + + if (param != 1 && param != 2 && param != 4) { + param = 4; + } + } + es3_functions.glPixelStorei(pname, param); + switch (pname) { case GL_UNPACK_SWAP_BYTES: current_context->unpack.swap_bytes = param == GL_TRUE; From b84e9c2c2ecf11f4db294a7ec02103f5bbbe71bd Mon Sep 17 00:00:00 2001 From: iqisge-gif Date: Fri, 13 Feb 2026 18:26:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20main.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ltw/src/main/tinywrapper/main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ltw/src/main/tinywrapper/main.c b/ltw/src/main/tinywrapper/main.c index ff3109b..eefb38d 100644 --- a/ltw/src/main/tinywrapper/main.c +++ b/ltw/src/main/tinywrapper/main.c @@ -170,7 +170,7 @@ void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei widt } if (target == GL_TEXTURE_2D && (width < 1024 && height < 1024)) { - + // 确保纹理参数适合字体渲染 es3_functions.glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); es3_functions.glTexParameteri(target, @@ -266,15 +266,15 @@ void glTexParameterf( GLenum target, remove_mipmaps(pname, ¶m); make_depthtex_nearest(target, pname, ¶m); - + // 添加对字体纹理的特殊处理 if (target == GL_TEXTURE_2D && (pname == GL_TEXTURE_MIN_FILTER || pname == GL_TEXTURE_MAG_FILTER)) { - + // 将不支持的滤波模式转换为支持的模式 if (param == GL_LINEAR_MIPMAP_LINEAR || param == GL_NEAREST_MIPMAP_NEAREST || param == GL_NEAREST_MIPMAP_LINEAR || param == GL_LINEAR_MIPMAP_NEAREST) { - + // 不支持mipmap,使用基本滤波 param = (param == GL_LINEAR_MIPMAP_LINEAR || param == GL_LINEAR_MIPMAP_NEAREST) ? GL_LINEAR : GL_NEAREST; } @@ -387,7 +387,7 @@ const GLubyte* glGetString(GLenum name) { case GL_SHADING_LANGUAGE_VERSION: return (const GLubyte*)"4.60 LTW"; case GL_VENDOR: - return (const GLubyte*)"artDev, SerpentSpirale, CADIndie"; + return (const GLubyte*)"artDev, SerpentSpirale, CADIndie, IQge"; case GL_EXTENSIONS: if(current_context->extensions_string != NULL) return (const GLubyte*)current_context->extensions_string; return (const GLubyte*)es3_functions.glGetString(GL_EXTENSIONS);