diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 5faaa72c43..c02a427a6e 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -520,6 +520,12 @@ if (BUILD_LAGOM) lagom_test(${source} LIBS LagomCompress) endforeach() + # GL + file(GLOB LIBGL_TESTS CONFIGURE_DEPENDS "../../Tests/LibGL/*.cpp") + foreach(source ${LIBGL_TESTS}) + lagom_test(${source} LIBS LagomGL) + endforeach() + # Regex file(GLOB LIBREGEX_TESTS CONFIGURE_DEPENDS "../../Tests/LibRegex/*.cpp") # RegexLibC test POSIX and contains many Serenity extensions diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index b2e5d2611a..0a2f7c9fd5 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -6,6 +6,7 @@ add_subdirectory(LibCore) add_subdirectory(LibCpp) add_subdirectory(LibELF) add_subdirectory(LibGfx) +add_subdirectory(LibGL) add_subdirectory(LibIMAP) add_subdirectory(LibJS) add_subdirectory(LibM) diff --git a/Tests/LibGL/CMakeLists.txt b/Tests/LibGL/CMakeLists.txt new file mode 100644 index 0000000000..dc11cf753e --- /dev/null +++ b/Tests/LibGL/CMakeLists.txt @@ -0,0 +1,7 @@ +set(TEST_SOURCES + TestRender.cpp +) + +foreach(source IN LISTS TEST_SOURCES) + serenity_test("${source}" LibGL LIBS LibGL) +endforeach() diff --git a/Tests/LibGL/TestRender.cpp b/Tests/LibGL/TestRender.cpp new file mode 100644 index 0000000000..0beabdaf3a --- /dev/null +++ b/Tests/LibGL/TestRender.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021, Leon Albrecht . + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RENDER_WIDTH 16 +#define RENDER_HEIGHT 16 + +TEST_CASE(simple_triangle) +{ + auto bitmap = MUST(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { RENDER_WIDTH, RENDER_HEIGHT })); + auto context = GL::create_context(*bitmap); + + GL::make_context_current(context); + + glFrontFace(GL_CCW); + glCullFace(GL_BACK); + glEnable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClearDepth(1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glBegin(GL_TRIANGLES); + glColor4f(1, 1, 1, 1); + glVertex2f(0, 1); + glVertex2f(-1, -1); + glVertex2f(1, -1); + glEnd(); + + context->present(); + + EXPECT_EQ(glGetError(), 0u); + // FIXME: Verify that the image is indeed correct + + if constexpr (GL_DEBUG) { + // output the image to manually verify that the output is correct + Gfx::BMPWriter writer {}; + auto buffer = writer.dump(bitmap); + int fd = open("./picture.bmp", O_CREAT | O_WRONLY, 0755); + EXPECT(fd > 0); + ssize_t nwritten = write(fd, buffer.data(), buffer.size()); + EXPECT_EQ((size_t)nwritten, buffer.size()); + close(fd); + } +}