From 1812a169b89749cc3fe585b0f97b0b06ae6cbda1 Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sun, 28 Aug 2022 14:30:48 +0200 Subject: [PATCH] Tests: Add tests for LibGL shader subsystem --- Tests/LibGL/CMakeLists.txt | 1 + Tests/LibGL/TestShaders.cpp | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 Tests/LibGL/TestShaders.cpp diff --git a/Tests/LibGL/CMakeLists.txt b/Tests/LibGL/CMakeLists.txt index 7bfaca0e01..f7f43e3c73 100644 --- a/Tests/LibGL/CMakeLists.txt +++ b/Tests/LibGL/CMakeLists.txt @@ -1,6 +1,7 @@ set(TEST_SOURCES TestAPI.cpp TestRender.cpp + TestShaders.cpp ) foreach(source IN LISTS TEST_SOURCES) diff --git a/Tests/LibGL/TestShaders.cpp b/Tests/LibGL/TestShaders.cpp new file mode 100644 index 0000000000..94454cb36e --- /dev/null +++ b/Tests/LibGL/TestShaders.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022, Stephan Unverwerth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static NonnullOwnPtr create_testing_context(int width, int height) +{ + auto bitmap = MUST(Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { width, height })); + auto context = MUST(GL::create_context(*bitmap)); + GL::make_context_current(context); + + return context; +} + +TEST_CASE(0001_program_creation) +{ + auto context = create_testing_context(64, 64); + + GLuint vertex_shader; + GLuint fragment_shader; + GLuint program; + + auto vertex_shader_source = "#version 330\n" + "void main() {\n" + " gl_Position = vec4(0, 0, 0, 0);\n" + "}\n"; + + auto fragment_shader_source = "#version 330\n" + "out vec4 color;\n" + "void main() {\n" + " color = vec4(1, 1, 1, 1);\n" + "}\n"; + + vertex_shader = glCreateShader(GL_VERTEX_SHADER); + glShaderSource(vertex_shader, 1, &vertex_shader_source, nullptr); + glCompileShader(vertex_shader); + + fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragment_shader, 1, &fragment_shader_source, nullptr); + glCompileShader(fragment_shader); + + program = glCreateProgram(); + glAttachShader(program, vertex_shader); + glAttachShader(program, fragment_shader); + glLinkProgram(program); + + glDeleteShader(vertex_shader); + glDeleteShader(fragment_shader); + glDeleteProgram(program); + + EXPECT_EQ(glGetError(), 0u); +}