Program.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Error.h>
  8. #include <AK/NonnullRefPtr.h>
  9. #include <AK/Optional.h>
  10. #include <AK/OwnPtr.h>
  11. #include <AK/RefCounted.h>
  12. #include <AK/String.h>
  13. #include <AK/Vector.h>
  14. #include <LibGL/Shaders/Shader.h>
  15. #include <LibGLSL/LinkedShader.h>
  16. #include <LibGPU/Device.h>
  17. #include <LibGPU/Shader.h>
  18. namespace GL {
  19. class Program final : public RefCounted<Program> {
  20. public:
  21. static NonnullRefPtr<Program> create();
  22. bool is_shader_attached(Shader const&) const;
  23. ErrorOr<void> attach_shader(Shader&);
  24. ErrorOr<void> link(GPU::Device&);
  25. bool link_status() const { return m_link_status; }
  26. size_t info_log_length() const;
  27. private:
  28. bool m_link_status { false };
  29. Vector<NonnullRefPtr<Shader const>> m_vertex_shaders;
  30. Vector<NonnullRefPtr<Shader const>> m_fragment_shaders;
  31. Optional<String> m_info_log;
  32. OwnPtr<GLSL::LinkedShader> m_linked_vertex_shader;
  33. OwnPtr<GLSL::LinkedShader> m_linked_fragment_shader;
  34. RefPtr<GPU::Shader const> m_gpu_vertex_shader;
  35. RefPtr<GPU::Shader const> m_gpu_fragment_shader;
  36. };
  37. }