From 81a717ada78800e630f8ac9a7c9f6f705f71db39 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Sat, 13 Dec 2025 20:48:59 +0800 Subject: [PATCH] [Feat] (MG_Impl/Texture): partially implement `glTexParameter*v` - Fixing NeoForge loading screen --- .../MG_Impl/GLImpl/Exporting/Definitions.cpp | 8 +- .../MG_Impl/GLImpl/Texture/GL_Texture.cpp | 82 +++++++++++++++++++ MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.h | 5 ++ .../GLState/SamplerState/SamplerObject.h | 2 +- 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp b/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp index 65b5bcdc..16c09670 100644 --- a/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp +++ b/MobileGL/MG_Impl/GLImpl/Exporting/Definitions.cpp @@ -158,9 +158,9 @@ DECLARE_GL_FUNCTION_HEAD(void, StencilOp, GLenum fail, GLenum zfail, GLenum zpas DECLARE_GL_FUNCTION_HEAD(void, StencilOpSeparate, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) DECLARE_GL_FUNCTION_END_NO_RETURN(void, StencilOpSeparate, face, sfail, dpfail, dppass) DECLARE_GL_FUNCTION_HEAD(void, TexImage2D, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexImage2D, target, level, internalformat, width, height, border, format, type, pixels) DECLARE_GL_FUNCTION_HEAD(void, TexParameterf, GLenum target, GLenum pname, GLfloat param) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameterf, target, pname, param) -DECLARE_GL_FUNCTION_STUB_HEAD(void, TexParameterfv, GLenum target, GLenum pname, const GLfloat* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TexParameterfv, target, pname, params) +DECLARE_GL_FUNCTION_HEAD(void, TexParameterfv, GLenum target, GLenum pname, const GLfloat* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameterfv, target, pname, params) DECLARE_GL_FUNCTION_HEAD(void, TexParameteri, GLenum target, GLenum pname, GLint param) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameteri, target, pname, param) -DECLARE_GL_FUNCTION_STUB_HEAD(void, TexParameteriv, GLenum target, GLenum pname, const GLint* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TexParameteriv, target, pname, params) +DECLARE_GL_FUNCTION_HEAD(void, TexParameteriv, GLenum target, GLenum pname, const GLint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameteriv, target, pname, params) DECLARE_GL_FUNCTION_HEAD(void, TexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexSubImage2D, target, level, xoffset, yoffset, width, height, format, type, pixels) DECLARE_GL_FUNCTION_HEAD(void, Uniform1f, GLint location, GLfloat v0) DECLARE_GL_FUNCTION_END_NO_RETURN(void, Uniform1f, location, v0) DECLARE_GL_FUNCTION_HEAD(void, Uniform1fv, GLint location, GLsizei count, const GLfloat* value) DECLARE_GL_FUNCTION_END_NO_RETURN(void, Uniform1fv, location, count, value) @@ -401,8 +401,8 @@ DECLARE_GL_FUNCTION_STUB_HEAD(void, GetnUniformiv, GLuint program, GLint locatio DECLARE_GL_FUNCTION_STUB_HEAD(void, GetnUniformuiv, GLuint program, GLint location, GLsizei bufSize, GLuint* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetnUniformuiv, program, location, bufSize, params) DECLARE_GL_FUNCTION_STUB_HEAD(void, MinSampleShading, GLfloat value) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, MinSampleShading, value) DECLARE_GL_FUNCTION_STUB_HEAD(void, PatchParameteri, GLenum pname, GLint value) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, PatchParameteri, pname, value) -DECLARE_GL_FUNCTION_STUB_HEAD(void, TexParameterIiv, GLenum target, GLenum pname, const GLint* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TexParameterIiv, target, pname, params) -DECLARE_GL_FUNCTION_STUB_HEAD(void, TexParameterIuiv, GLenum target, GLenum pname, const GLuint* params) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TexParameterIuiv, target, pname, params) +DECLARE_GL_FUNCTION_HEAD(void, TexParameterIiv, GLenum target, GLenum pname, const GLint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameterIiv, target, pname, params) +DECLARE_GL_FUNCTION_HEAD(void, TexParameterIuiv, GLenum target, GLenum pname, const GLuint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, TexParameterIuiv, target, pname, params) DECLARE_GL_FUNCTION_HEAD(void, GetTexParameterIiv, GLenum target, GLenum pname, GLint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, GetTexParameterIiv, target, pname, params) DECLARE_GL_FUNCTION_HEAD(void, GetTexParameterIuiv, GLenum target, GLenum pname, GLuint* params) DECLARE_GL_FUNCTION_END_NO_RETURN(void, GetTexParameterIuiv, target, pname, params) DECLARE_GL_FUNCTION_HEAD(void, SamplerParameterIiv, GLuint sampler, GLenum pname, const GLint* param) DECLARE_GL_FUNCTION_END_NO_RETURN(void, SamplerParameterIiv, sampler, pname, param) diff --git a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp index 87b9e199..031a447a 100644 --- a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp +++ b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp @@ -305,6 +305,72 @@ namespace MobileGL { } } + // Quick and dirty TexParameter*v implementation to make NeoForge happy. + // TODO: implement the missing part + void TexParameterfv_State(GLenum target, GLenum pname, const GLfloat * params) { + switch (pname) { + case GL_TEXTURE_BORDER_COLOR: { + THROW_UNIMPL_EXCEPTION; + break; + } + case GL_TEXTURE_SWIZZLE_RGBA: { + THROW_UNIMPL_EXCEPTION; + break; + } + default: + TexParameterf_State(target, pname, *params); + break; + } + } + + void TexParameteriv_State(GLenum target, GLenum pname, const GLint * params) { + switch (pname) { + case GL_TEXTURE_BORDER_COLOR: { + THROW_UNIMPL_EXCEPTION; + break; + } + case GL_TEXTURE_SWIZZLE_RGBA: { + THROW_UNIMPL_EXCEPTION; + break; + } + default: + TexParameteri_State(target, pname, *params); + break; + } + } + + void TexParameterIiv_State(GLenum target, GLenum pname, const GLint * params) { + switch (pname) { + case GL_TEXTURE_BORDER_COLOR: { + THROW_UNIMPL_EXCEPTION; + break; + } + case GL_TEXTURE_SWIZZLE_RGBA: { + THROW_UNIMPL_EXCEPTION; + break; + } + default: + TexParameteri_State(target, pname, *params); + break; + } + } + + void TexParameterIuiv_State(GLenum target, GLenum pname, const GLuint * params) { + switch (pname) { + case GL_TEXTURE_BORDER_COLOR: { + THROW_UNIMPL_EXCEPTION; + break; + } + case GL_TEXTURE_SWIZZLE_RGBA: { + THROW_UNIMPL_EXCEPTION; + break; + } + default: + TexParameteri_State(target, pname, static_cast(*params)); + break; + } + } + void TexImage3DMultisample_State(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { // TODO: implement @@ -1033,6 +1099,22 @@ namespace MobileGL { TexParameteri_State(target, pname, param); } + void TexParameterfv(GLenum target, GLenum pname, const GLfloat * params) { + TexParameterfv_State(target, pname, params); + } + + void TexParameteriv(GLenum target, GLenum pname, const GLint * params) { + TexParameteriv_State(target, pname, params); + } + + void TexParameterIiv(GLenum target, GLenum pname, const GLint * params) { + TexParameterIiv_State(target, pname, params); + } + + void TexParameterIuiv(GLenum target, GLenum pname, const GLuint * params) { + TexParameterIuiv_State(target, pname, params); + } + void TexImage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { TexImage3DMultisample_State(target, samples, internalformat, width, height, depth, fixedsamplelocations); diff --git a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.h b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.h index 0aa49015..0b05e7a7 100644 --- a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.h +++ b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.h @@ -12,6 +12,11 @@ namespace MobileGL { const GLvoid* pixels); void TexParameterf(GLenum target, GLenum pname, GLfloat param); void TexParameteri(GLenum target, GLenum pname, GLint param); + void TexParameterfv(GLenum target, GLenum pname, const GLfloat * params); + void TexParameteriv(GLenum target, GLenum pname, const GLint * params); + void TexParameterIiv(GLenum target, GLenum pname, const GLint * params); + void TexParameterIuiv(GLenum target, GLenum pname, const GLuint * params); + void TexImage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); void TexImage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, diff --git a/MobileGL/MG_State/GLState/SamplerState/SamplerObject.h b/MobileGL/MG_State/GLState/SamplerState/SamplerObject.h index 96fe0c6b..b8d84e69 100644 --- a/MobileGL/MG_State/GLState/SamplerState/SamplerObject.h +++ b/MobileGL/MG_State/GLState/SamplerState/SamplerObject.h @@ -51,7 +51,7 @@ namespace MobileGL { SamplerWrapMode wrapS = SamplerWrapMode::Repeat; SamplerWrapMode wrapT = SamplerWrapMode::Repeat; SamplerWrapMode wrapR = SamplerWrapMode::Repeat; - SamplerFilterMode minFilter = SamplerFilterMode::Linear; + SamplerFilterMode minFilter = SamplerFilterMode::Nearest; SamplerFilterMode magFilter = SamplerFilterMode::Linear; SamplerMipmapMode mipmapMode = SamplerMipmapMode::Linear; Float minLod = -1000.0f;