/* * Copyright (c) 2024, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include namespace Web::WebGL { GC_DEFINE_ALLOCATOR(WebGLSync); GC::Ref WebGLSync::create(JS::Realm& realm, GC::Ref context, GLsyncInternal handle) { return realm.create(realm, context, handle); } WebGLSync::WebGLSync(JS::Realm& realm, GC::Ref context, GLsyncInternal handle) : WebGLObject(realm, context, 0) , m_sync_handle(handle) { } WebGLSync::~WebGLSync() = default; void WebGLSync::initialize(JS::Realm& realm) { WEB_SET_PROTOTYPE_FOR_INTERFACE(WebGLSync); Base::initialize(realm); } ErrorOr WebGLSync::sync_handle(WebGLRenderingContextBase const* context) const { TRY(validate_context(context)); if (invalidated_for_context(context)) return Error::from_errno(GL_INVALID_OPERATION); return m_sync_handle; } ErrorOr> WebGLSync::sync_handle_for_deletion(WebGLRenderingContextBase const* context) { TRY(validate_context(context)); if (invalidated_for_context(context)) return Optional {}; invalidate(); return Optional { m_sync_handle }; } }