Serenity Operating System
at master 79 lines 2.5 kB view raw
1/* 2 * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/LexicalPath.h> 8#include <AK/String.h> 9#include <LibGL/GL/gl.h> 10#include <LibGL/GLContext.h> 11#include <LibGfx/Bitmap.h> 12#include <LibGfx/QOIWriter.h> 13#include <LibTest/TestCase.h> 14 15static NonnullOwnPtr<GL::GLContext> create_testing_context(int width, int height) 16{ 17 auto bitmap = MUST(Gfx::Bitmap::create(Gfx::BitmapFormat::BGRx8888, { width, height })); 18 auto context = MUST(GL::create_context(*bitmap)); 19 GL::make_context_current(context); 20 21 return context; 22} 23 24TEST_CASE(0001_program_creation) 25{ 26 auto context = create_testing_context(64, 64); 27 28 GLuint vertex_shader; 29 GLuint fragment_shader; 30 GLuint program; 31 32 auto vertex_shader_source = "#version 330\n" 33 "void main() {\n" 34 " gl_Position = vec4(0, 0, 0, 0);\n" 35 "}\n"; 36 37 auto fragment_shader_source = "#version 330\n" 38 "out vec4 color;\n" 39 "void main() {\n" 40 " color = vec4(1, 1, 1, 1);\n" 41 "}\n"; 42 43 vertex_shader = glCreateShader(GL_VERTEX_SHADER); 44 glShaderSource(vertex_shader, 1, &vertex_shader_source, nullptr); 45 glCompileShader(vertex_shader); 46 GLint vertex_shader_compile_status; 47 glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &vertex_shader_compile_status); 48 EXPECT_EQ(vertex_shader_compile_status, GL_TRUE); 49 50 fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); 51 glShaderSource(fragment_shader, 1, &fragment_shader_source, nullptr); 52 glCompileShader(fragment_shader); 53 GLint fragment_shader_compile_status; 54 glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &fragment_shader_compile_status); 55 EXPECT_EQ(fragment_shader_compile_status, GL_TRUE); 56 57 program = glCreateProgram(); 58 glAttachShader(program, vertex_shader); 59 glAttachShader(program, fragment_shader); 60 glLinkProgram(program); 61 glUseProgram(program); 62 63 glBegin(GL_TRIANGLES); 64 glColor3f(1, 0, 0); 65 glVertex2i(-1, -1); 66 glColor3f(0, 1, 0); 67 glVertex2i(1, -1); 68 glColor3f(0, 0, 1); 69 glVertex2i(1, 1); 70 glEnd(); 71 72 context->present(); 73 74 glDeleteShader(vertex_shader); 75 glDeleteShader(fragment_shader); 76 glDeleteProgram(program); 77 78 EXPECT_EQ(glGetError(), 0u); 79}