Blender V4.3
GHOST_ContextEGL.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2013 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#ifndef WITH_OPENGL_BACKEND
12# error "ContextEGL requires WITH_OPENGL_BACKEND"
13#endif
14
15#include "GHOST_Context.hh"
16#include "GHOST_System.hh"
17
18#include <epoxy/egl.h>
19#include <epoxy/gl.h>
20
21#ifndef GHOST_OPENGL_EGL_CONTEXT_FLAGS
22# define GHOST_OPENGL_EGL_CONTEXT_FLAGS 0
23#endif
24
25#ifndef GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY
26# define GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY 0
27#endif
28
30 /* XR code needs low level graphics data to send to OpenXR. */
32
33 public:
37 GHOST_ContextEGL(const GHOST_System *const system,
38 bool stereoVisual,
39 EGLNativeWindowType nativeWindow,
40 EGLNativeDisplayType nativeDisplay,
41 EGLint contextProfileMask,
42 EGLint contextMajorVersion,
43 EGLint contextMinorVersion,
44 EGLint contextFlags,
45 EGLint contextResetNotificationStrategy,
46 EGLenum api);
47
51 ~GHOST_ContextEGL() override;
52
57 GHOST_TSuccess swapBuffers() override;
58
64
70
76
83
89 GHOST_TSuccess setSwapInterval(int interval) override;
90
96 GHOST_TSuccess getSwapInterval(int &intervalOut) override;
97
98 EGLDisplay getDisplay() const;
99
100 EGLConfig getConfig() const;
101
102 EGLContext getContext() const;
103
104 private:
105 bool bindAPI(EGLenum api);
106
107 const GHOST_System *const m_system;
108
109 EGLNativeDisplayType m_nativeDisplay;
110 EGLNativeWindowType m_nativeWindow;
111
112 const EGLint m_contextProfileMask;
113 const EGLint m_contextMajorVersion;
114 const EGLint m_contextMinorVersion;
115 const EGLint m_contextFlags;
116 const EGLint m_contextResetNotificationStrategy;
117
118 const EGLenum m_api;
119
120 EGLContext m_context;
121 EGLSurface m_surface;
122 EGLDisplay m_display;
123 EGLConfig m_config;
124
125 EGLint m_swap_interval;
126
127 EGLContext &m_sharedContext;
128 EGLint &m_sharedCount;
129
133 bool m_surface_from_native_window;
134
135 static EGLContext s_gl_sharedContext;
136 static EGLint s_gl_sharedCount;
137
138 static EGLContext s_gles_sharedContext;
139 static EGLint s_gles_sharedCount;
140
141 static EGLContext s_vg_sharedContext;
142 static EGLint s_vg_sharedCount;
143};
GHOST_TSuccess
Definition GHOST_Types.h:87
GHOST_TSuccess activateDrawingContext() override
GHOST_TSuccess getSwapInterval(int &intervalOut) override
GHOST_TSuccess releaseDrawingContext() override
GHOST_TSuccess initializeDrawingContext() override
EGLConfig getConfig() const
GHOST_TSuccess setSwapInterval(int interval) override
GHOST_TSuccess swapBuffers() override
GHOST_ContextEGL(const GHOST_System *const system, bool stereoVisual, EGLNativeWindowType nativeWindow, EGLNativeDisplayType nativeDisplay, EGLint contextProfileMask, EGLint contextMajorVersion, EGLint contextMinorVersion, EGLint contextFlags, EGLint contextResetNotificationStrategy, EGLenum api)
EGLDisplay getDisplay() const
~GHOST_ContextEGL() override
EGLContext getContext() const
GHOST_TSuccess releaseNativeHandles() override