/* * Copyright (c) 2022, Stephan Unverwerth * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace GL { NonnullRefPtr Program::create() { return adopt_ref(*new Program()); } bool Program::is_shader_attached(Shader const& shader) const { switch (shader.type()) { case GL_VERTEX_SHADER: return m_vertex_shaders.contains_slow(shader); case GL_FRAGMENT_SHADER: return m_fragment_shaders.contains_slow(shader); default: VERIFY_NOT_REACHED(); } } ErrorOr Program::attach_shader(Shader& shader) { if (is_shader_attached(shader)) return Error::from_string_literal("Trying to attach a shader that is already attached"); switch (shader.type()) { case GL_VERTEX_SHADER: TRY(m_vertex_shaders.try_append(shader)); break; case GL_FRAGMENT_SHADER: TRY(m_fragment_shaders.try_append(shader)); break; default: VERIFY_NOT_REACHED(); } return {}; } ErrorOr Program::link() { // FIXME: Implement actual program linker m_link_status = true; return {}; } }