Program.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibGL/GL/gl.h>
  7. #include <LibGL/Shaders/Program.h>
  8. namespace GL {
  9. NonnullRefPtr<Program> Program::create()
  10. {
  11. return adopt_ref(*new Program());
  12. }
  13. bool Program::is_shader_attached(Shader const& shader) const
  14. {
  15. switch (shader.type()) {
  16. case GL_VERTEX_SHADER:
  17. return m_vertex_shaders.contains_slow(shader);
  18. case GL_FRAGMENT_SHADER:
  19. return m_fragment_shaders.contains_slow(shader);
  20. default:
  21. VERIFY_NOT_REACHED();
  22. }
  23. }
  24. ErrorOr<void> Program::attach_shader(Shader& shader)
  25. {
  26. if (is_shader_attached(shader))
  27. return Error::from_string_literal("Trying to attach a shader that is already attached");
  28. switch (shader.type()) {
  29. case GL_VERTEX_SHADER:
  30. TRY(m_vertex_shaders.try_append(shader));
  31. break;
  32. case GL_FRAGMENT_SHADER:
  33. TRY(m_fragment_shaders.try_append(shader));
  34. break;
  35. default:
  36. VERIFY_NOT_REACHED();
  37. }
  38. return {};
  39. }
  40. ErrorOr<void> Program::link()
  41. {
  42. TODO();
  43. return {};
  44. }
  45. }