30class GlxPixmapTexturePrivate;
32class X11StandaloneBackend;
34class GLRenderTimeQuery;
56 SwapEventFilter(xcb_drawable_t drawable, xcb_glx_drawable_t glxDrawable);
57 bool event(xcb_generic_event_t *
event)
override;
60 xcb_drawable_t m_drawable;
61 xcb_glx_drawable_t m_glxDrawable;
69 std::optional<OutputLayerBeginFrameInfo>
beginFrame()
override;
70 bool endFrame(
const QRegion &renderedRegion,
const QRegion &damagedRegion)
override;
89 void endFrame(
const QRegion &renderedRegion,
const QRegion &damagedRegion);
91 void present(
Output *output,
const std::shared_ptr<OutputFrame> &frame)
override;
104 void vblank(std::chrono::nanoseconds timestamp);
105 void present(
const QRegion &damage);
108 void initExtensions();
110 void initVisualDepthHashTable();
111 void setSwapInterval(
int interval);
112 void screenGeometryChanged();
114 int visualDepth(xcb_visualid_t visual)
const;
115 const FBConfigInfo &infoForVisual(xcb_visualid_t visual);
120 std::unique_ptr<OverlayWindow> m_overlayWindow;
122 GLXFBConfig fbconfig;
124 std::unique_ptr<GlxContext> m_context;
125 QHash<xcb_visualid_t, FBConfigInfo> m_fbconfigHash;
126 QHash<xcb_visualid_t, int> m_visualDepthHash;
127 std::unique_ptr<SwapEventFilter> m_swapEventFilter;
128 std::unique_ptr<GLFramebuffer> m_fbo;
130 QRegion m_lastRenderedRegion;
132 bool m_haveMESACopySubBuffer =
false;
133 bool m_haveMESASwapControl =
false;
134 bool m_haveEXTSwapControl =
false;
135 bool m_haveSGISwapControl =
false;
138 std::unique_ptr<VsyncMonitor> m_vsyncMonitor;
139 std::unique_ptr<GlxLayer> m_layer;
140 std::unique_ptr<GLRenderTimeQuery> m_query;
142 std::shared_ptr<OutputFrame> m_frame;
155 void onDamage()
override;
158 GLXPixmap m_glxPixmap;
167 void update(
const QRegion ®ion)
override;
OpenGL Backend using GLX over an X overlay window.
OutputLayerBeginFrameInfo beginFrame()
GlxBackend(::Display *display, X11StandaloneBackend *backend)
std::chrono::nanoseconds queryRenderTime()
OverlayWindow * overlayWindow() const override
::Display * display() const
void present(Output *output, const std::shared_ptr< OutputFrame > &frame) override
void doneCurrent() override
OutputLayer * primaryLayer(Output *output) override
void endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion)
std::unique_ptr< SurfaceTexture > createSurfaceTextureX11(SurfacePixmapX11 *pixmap) override
bool makeCurrent() override
std::optional< OutputLayerBeginFrameInfo > beginFrame() override
std::chrono::nanoseconds queryRenderTime() const override
bool endFrame(const QRegion &renderedRegion, const QRegion &damagedRegion) override
GlxLayer(GlxBackend *backend)
GlxPixmapTexture(GlxBackend *backend)
void update(const QRegion ®ion) override
GlxSurfaceTextureX11(GlxBackend *backend, SurfacePixmapX11 *pixmap)
The OpenGLBackend creates and holds the OpenGL context and is responsible for Texture from Pixmap.
OpenGLBackend * backend() const
bool event(xcb_generic_event_t *event) override
SwapEventFilter(xcb_drawable_t drawable, xcb_glx_drawable_t glxDrawable)
glXSwapIntervalMESA_func glXSwapIntervalMESA
int(*)(unsigned int interval) glXSwapIntervalMESA_func