TestShaders.cpp 2.4 KB

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