[WPE][GTK] Bump minimum versions of GLib, GTK, libsoup, ATK, GStreamer, and Cairo
[WebKit-https.git] / Source / WebKit / UIProcess / gtk / AcceleratedBackingStoreWayland.h
1 /*
2  * Copyright (C) 2016 Igalia S.L.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include "AcceleratedBackingStore.h"
29
30 #if PLATFORM(WAYLAND)
31
32 #include <WebCore/RefPtrCairo.h>
33 #include <gtk/gtk.h>
34 #include <wtf/glib/GRefPtr.h>
35
36 #if USE(WPE_RENDERER)
37 #include <wpe/fdo.h>
38 #endif
39
40 typedef void* EGLImageKHR;
41 typedef struct _GdkGLContext GdkGLContext;
42 struct wpe_fdo_egl_exported_image;
43
44 namespace WebCore {
45 class GLContext;
46 }
47
48 namespace WebKit {
49
50 class WebPageProxy;
51
52 class AcceleratedBackingStoreWayland final : public AcceleratedBackingStore {
53     WTF_MAKE_NONCOPYABLE(AcceleratedBackingStoreWayland); WTF_MAKE_FAST_ALLOCATED;
54 public:
55     static std::unique_ptr<AcceleratedBackingStoreWayland> create(WebPageProxy&);
56     ~AcceleratedBackingStoreWayland();
57
58 private:
59     AcceleratedBackingStoreWayland(WebPageProxy&);
60
61     void tryEnsureGLContext();
62 #if USE(WPE_RENDERER)
63     void displayBuffer(struct wpe_fdo_egl_exported_image*);
64 #endif
65
66     bool paint(cairo_t*, const WebCore::IntRect&) override;
67     bool makeContextCurrent() override;
68 #if USE(WPE_RENDERER)
69     void update(const LayerTreeContext&) override;
70     int renderHostFileDescriptor() override;
71 #endif
72
73     RefPtr<cairo_surface_t> m_surface;
74     bool m_glContextInitialized { false };
75     GRefPtr<GdkGLContext> m_gdkGLContext;
76     std::unique_ptr<WebCore::GLContext> m_glContext;
77
78 #if USE(WPE_RENDERER)
79     struct wpe_view_backend_exportable_fdo* m_exportable { nullptr };
80     uint64_t m_surfaceID { 0 };
81     unsigned m_viewTexture { 0 };
82     struct wpe_fdo_egl_exported_image* m_committedImage { nullptr };
83     struct wpe_fdo_egl_exported_image* m_pendingImage { nullptr };
84 #endif
85 };
86
87 } // namespace WebKit
88
89 #endif // PLATFORM(WAYLAND)