Blender V5.0
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
8
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 const GHOST_ContextParams &context_params,
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
55 {
56 return GHOST_kSuccess;
57 }
58
64
70
76
82
89
95 GHOST_TSuccess setSwapInterval(int interval) override;
96
102 GHOST_TSuccess getSwapInterval(int &interval_out) override;
103
104 EGLDisplay getDisplay() const;
105
106 EGLConfig getConfig() const;
107
108 EGLContext getContext() const;
109
110 private:
111 bool bindAPI(EGLenum api);
112
113 const GHOST_System *const system_;
114
115 EGLNativeDisplayType native_display_;
116 EGLNativeWindowType native_window_;
117
118 const EGLint context_profile_mask_;
119 const EGLint context_major_version_;
120 const EGLint context_minor_version_;
121 const EGLint context_flags_;
122 const EGLint context_reset_notification_strategy_;
123
124 const EGLenum api_;
125
126 EGLContext context_;
127 EGLSurface surface_;
128 EGLDisplay display_;
129 EGLConfig config_;
130
131 EGLint swap_interval_;
132
133 EGLContext &shared_context_;
134 EGLint &shared_count_;
135
139 bool surface_from_native_window_;
140
141 static EGLContext s_gl_sharedContext;
142 static EGLint s_gl_sharedCount;
143
144 static EGLContext s_gles_sharedContext;
145 static EGLint s_gles_sharedCount;
146
147 static EGLContext s_vg_sharedContext;
148 static EGLint s_vg_sharedCount;
149};
GHOST_TSuccess
Definition GHOST_Types.h:57
@ GHOST_kSuccess
Definition GHOST_Types.h:57
GHOST_TSuccess activateDrawingContext() override
friend class GHOST_XrGraphicsBindingOpenGL
GHOST_TSuccess releaseDrawingContext() override
GHOST_ContextEGL(const GHOST_System *const system, const GHOST_ContextParams &context_params, EGLNativeWindowType nativeWindow, EGLNativeDisplayType nativeDisplay, EGLint contextProfileMask, EGLint contextMajorVersion, EGLint contextMinorVersion, EGLint contextFlags, EGLint contextResetNotificationStrategy, EGLenum api)
GHOST_TSuccess initializeDrawingContext() override
EGLConfig getConfig() const
GHOST_TSuccess setSwapInterval(int interval) override
GHOST_TSuccess getSwapInterval(int &interval_out) override
EGLDisplay getDisplay() const
~GHOST_ContextEGL() override
GHOST_TSuccess swapBufferAcquire() override
EGLContext getContext() const
GHOST_TSuccess swapBufferRelease() override
GHOST_TSuccess releaseNativeHandles() override
GHOST_Context(const GHOST_ContextParams &context_params)