/* * Copyright (c) 2024, Jelle Raaijmakers * Copyright (c) 2024, Aliaksandr Kalenik * Copyright (c) 2024, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Web::WebGL { WebGLObject::WebGLObject(JS::Realm& realm, GC::Ref context, GLuint handle) : Bindings::PlatformObject(realm) , m_context(context) , m_handle(handle) { } WebGLObject::~WebGLObject() = default; void WebGLObject::initialize(JS::Realm& realm) { WEB_SET_PROTOTYPE_FOR_INTERFACE(WebGLObject); Base::initialize(realm); } void WebGLObject::visit_edges(Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_context); } ErrorOr WebGLObject::handle(WebGLRenderingContextBase const* context) const { TRY(validate_context(context)); if (invalidated_for_context(context)) return Error::from_errno(GL_INVALID_OPERATION); return m_handle; } ErrorOr> WebGLObject::handle_for_deletion(WebGLRenderingContextBase const* context) { TRY(validate_context(context)); if (invalidated_for_context(context)) return Optional {}; m_invalidated = true; return Optional { m_handle }; } ErrorOr> WebGLObject::handle_for_query(WebGLRenderingContextBase const* context) const { TRY(validate_context(context)); if (invalidated_for_context(context)) return Optional {}; return Optional { m_handle }; } bool WebGLObject::invalidated_for_context(WebGLRenderingContextBase const* context) const { (void)context; return m_invalidated; } ErrorOr WebGLObject::validate_context(WebGLRenderingContextBase const* context) const { if (context == m_context) return {}; return Error::from_errno(GL_INVALID_OPERATION); } }