Serenity Operating System
at master 44 lines 1.2 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#pragma once 8 9#include <AK/Error.h> 10#include <AK/NonnullRefPtr.h> 11#include <AK/Optional.h> 12#include <AK/OwnPtr.h> 13#include <AK/RefCounted.h> 14#include <AK/String.h> 15#include <AK/Vector.h> 16#include <LibGL/Shaders/Shader.h> 17#include <LibGLSL/LinkedShader.h> 18#include <LibGPU/Device.h> 19#include <LibGPU/Shader.h> 20 21namespace GL { 22 23class Program final : public RefCounted<Program> { 24public: 25 static NonnullRefPtr<Program> create(); 26 27 bool is_shader_attached(Shader const&) const; 28 ErrorOr<void> attach_shader(Shader&); 29 ErrorOr<void> link(GPU::Device&); 30 bool link_status() const { return m_link_status; } 31 size_t info_log_length() const; 32 33private: 34 bool m_link_status { false }; 35 Vector<NonnullRefPtr<Shader const>> m_vertex_shaders; 36 Vector<NonnullRefPtr<Shader const>> m_fragment_shaders; 37 Optional<String> m_info_log; 38 OwnPtr<GLSL::LinkedShader> m_linked_vertex_shader; 39 OwnPtr<GLSL::LinkedShader> m_linked_fragment_shader; 40 RefPtr<GPU::Shader const> m_gpu_vertex_shader; 41 RefPtr<GPU::Shader const> m_gpu_fragment_shader; 42}; 43 44}