From 4ce1b33304801c6108e6d1b9b7d140567d206b8d Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 15:32:05 +0800 Subject: [PATCH 1/7] [Feat] (MG_State/Program): Uniform* got aliased to Uniform*v --- .../MG_Impl/GLImpl/Program/GL_Program.cpp | 55 +++++-------------- 1 file changed, 15 insertions(+), 40 deletions(-) diff --git a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp index d131d6cf..86dfa415 100644 --- a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp +++ b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp @@ -310,38 +310,6 @@ namespace MobileGL { MG_State::pGLContext->UseProgram(program); } - void Uniform1f_State(GLint location, GLfloat v0) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform2f_State(GLint location, GLfloat v0, GLfloat v1) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform3f_State(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform4f_State(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform1i_State(GLint location, GLint v0) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform2i_State(GLint location, GLint v0, GLint v1) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform3i_State(GLint location, GLint v0, GLint v1, GLint v2) { - THROW_UNIMPL_EXCEPTION; - } - - void Uniform4i_State(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { - THROW_UNIMPL_EXCEPTION; - } - void Uniform1fv_State(GLint location, GLsizei count, const GLfloat* value) { THROW_UNIMPL_EXCEPTION; } @@ -470,6 +438,7 @@ namespace MobileGL { void GetUniformiv(GLuint program, GLint location, GLint* params) { GetUniformiv_State(program, location, params); } + GLboolean IsProgram(GLuint program) { return IsProgram_State(program); } @@ -490,35 +459,41 @@ namespace MobileGL { } void Uniform1f(GLint location, GLfloat v0) { - Uniform1f_State(location, v0); + Uniform1fv(location, 1, &v0); } void Uniform2f(GLint location, GLfloat v0, GLfloat v1) { - Uniform2f_State(location, v0, v1); + GLfloat v[] = {v0, v1}; + Uniform2fv(location, 1, v); } void Uniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { - Uniform3f_State(location, v0, v1, v2); + GLfloat v[] = {v0, v1, v2}; + Uniform3fv(location, 1, v); } void Uniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { - Uniform4f_State(location, v0, v1, v2, v3); + GLfloat v[] = {v0, v1, v2, v3}; + Uniform4fv(location, 1, v); } void Uniform1i(GLint location, GLint v0) { - Uniform1i_State(location, v0); + Uniform1iv(location, 1, &v0); } void Uniform2i(GLint location, GLint v0, GLint v1) { - Uniform2i_State(location, v0, v1); + GLint v[] = {v0, v1}; + Uniform2iv(location, 1, v); } void Uniform3i(GLint location, GLint v0, GLint v1, GLint v2) { - Uniform3i_State(location, v0, v1, v2); + GLint v[] = {v0, v1, v2}; + Uniform3iv(location, 1, v); } void Uniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { - Uniform4i_State(location, v0, v1, v2, v3); + GLint v[] = {v0, v1, v2, v3}; + Uniform4iv(location, 1, v); } void Uniform1fv(GLint location, GLsizei count, const GLfloat* value) { From a4556a3742b50b2fe24075ceab482c266cd64523 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 15:43:21 +0800 Subject: [PATCH 2/7] [Chore] (MG_Test/Program): add test prints --- .github/workflows/test.yml | 2 +- MobileGL/MG_Test/Program/ProgramTest.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 353a3954..4db1d8a5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,4 +48,4 @@ jobs: - name: Test working-directory: ${{env.TEST_ROOT}}/build-test - run: ctest \ No newline at end of file + run: ctest -V \ No newline at end of file diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index b7c23930..7cd95456 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -95,16 +95,23 @@ TEST_F(ProgramTest, CompileFragment) { TEST_F(ProgramTest, CompileAndLink) { GLuint vs = CreateShader(GL_VERTEX_SHADER); ShaderSource(vs, 1, &vsSrc, NULL); + printf("Compiling vertex shader: %s\n", vsSrc); CompileShader(vs); + printf("Compiled vertex shader.\n"); GLuint fs = CreateShader(GL_FRAGMENT_SHADER); ShaderSource(fs, 1, &fsSrc, NULL); + printf("Compiling fragment shader: %s\n", fsSrc); CompileShader(fs); + printf("Compiled fragment shader.\n"); GLuint program = CreateProgram(); AttachShader(program, vs); AttachShader(program, fs); + printf("Linking program...\n"); LinkProgram(program); + printf("Program linked...\n"); + EXPECT_EQ(GetUniformLocation(program, "ProjMat"), 0); EXPECT_EQ(GetUniformLocation(program, "Gray"), 1); EXPECT_EQ(GetUniformLocation(program, "Saturation"), 6); From c9fd4ecb8f2f2276609afbe858c1dcc8e810c3b2 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 17:20:33 +0800 Subject: [PATCH 3/7] [Fix] (MG_Test/Program): use Setup() instead of ctor --- MobileGL/MG_Test/Program/ProgramTest.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index 7cd95456..7df5f02a 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -8,12 +8,9 @@ using namespace MobileGL::MG_Impl::GLImpl; class ProgramTest : public ::testing::Test { protected: - ProgramTest() { - mGLContext = MakeUnique(); - MG_State::pGLContext = mGLContext.get(); + void SetUp() override { + MG_State::pGLContext = new MG_State::GLState::GLContext(); } -private: - UniquePtr mGLContext; }; TEST_F(ProgramTest, Sanity) { From 1c1d3e00a288ebb2b2d3301b3ba79e47097ed20b Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 17:32:35 +0800 Subject: [PATCH 4/7] [Fix] (MG_Test/Program): Free context at teardown --- MobileGL/MG_Test/Program/ProgramTest.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index 7df5f02a..e520ba87 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -11,6 +11,10 @@ protected: void SetUp() override { MG_State::pGLContext = new MG_State::GLState::GLContext(); } + + void TearDown() override { + delete MG_State::pGLContext; + } }; TEST_F(ProgramTest, Sanity) { From a39a46c7e33c8a09f8eaf0915dec0800471e0275 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 17:36:33 +0800 Subject: [PATCH 5/7] [Chore] (MG_Test/Program): try to not link program? --- MobileGL/MG_Test/Program/ProgramTest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index e520ba87..da6a50af 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -109,6 +109,7 @@ TEST_F(ProgramTest, CompileAndLink) { GLuint program = CreateProgram(); AttachShader(program, vs); AttachShader(program, fs); + return; printf("Linking program...\n"); LinkProgram(program); printf("Program linked...\n"); From 0cba505ad07ac45bdb32b3e9831d8a5cf991ae3e Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 17:41:50 +0800 Subject: [PATCH 6/7] [Chore] (MG_Test/Program): test if PreLink only passes --- MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp | 2 +- MobileGL/MG_Test/Program/ProgramTest.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 31be0325..339855b2 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -59,7 +59,7 @@ namespace MobileGL { THROW_EXCEPTION(e); } - PostLink(); + // PostLink(); } void ProgramObject::MarkAsDeleted() { diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index da6a50af..904ba101 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -109,10 +109,10 @@ TEST_F(ProgramTest, CompileAndLink) { GLuint program = CreateProgram(); AttachShader(program, vs); AttachShader(program, fs); - return; printf("Linking program...\n"); LinkProgram(program); printf("Program linked...\n"); + return; EXPECT_EQ(GetUniformLocation(program, "ProjMat"), 0); EXPECT_EQ(GetUniformLocation(program, "Gray"), 1); From 3743922d4d0b9a37e7ef1b65f3e7565d8d8ef768 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 14 Aug 2025 17:51:42 +0800 Subject: [PATCH 7/7] [Chore] (MG_Test/Program): bisect PostLink() no.1. --- MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 339855b2..7be2952f 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -59,7 +59,7 @@ namespace MobileGL { THROW_EXCEPTION(e); } - // PostLink(); + PostLink(); } void ProgramObject::MarkAsDeleted() { @@ -145,6 +145,7 @@ namespace MobileGL { assert(false); return; } + return; m_metadata = session.GetMetadata(); auto& uniformOffsets = m_metadata.plainUniformOffsetsInUBO; for (const auto& [name, offset] : uniformOffsets) {