17 #include "system_egl.h" 22 static std::set<std::string> GetClientExtensions();
23 static std::set<std::string> GetExtensions(EGLDisplay eglDisplay);
24 static bool HasExtension(EGLDisplay eglDisplay, std::string
const & name);
25 static bool HasClientExtension(std::string
const& name);
26 static void Log(
int logLevel, std::string
const& what);
28 static T GetRequiredProcAddress(
const char * procname)
30 T p =
reinterpret_cast<T
>(eglGetProcAddress(procname));
33 throw std::runtime_error(std::string(
"Could not get EGL function \"") + procname +
"\" - maybe a required extension is not supported?");
62 void Add(std::initializer_list<EGLAttribute>
const& attributes)
64 for (
auto const& attribute : attributes)
66 m_attributes.insert(m_attributes.begin(), attribute.value);
67 m_attributes.insert(m_attributes.begin(), attribute.key);
81 EGLint
const * Get()
const 83 return m_attributes.data();
87 std::vector<EGLint> m_attributes{EGL_NONE};
100 template<std::
size_t AttributeCount>
112 m_attributes[0] = EGL_NONE;
123 void Add(std::initializer_list<EGLAttribute>
const& attributes)
125 if (m_writePosition + attributes.size() * 2 + 1 > m_attributes.size())
127 throw std::out_of_range(
"CEGLAttributes::Add");
130 for (
auto const& attribute : attributes)
132 m_attributes[m_writePosition++] = attribute.key;
133 m_attributes[m_writePosition++] = attribute.value;
135 m_attributes[m_writePosition] = EGL_NONE;
151 EGLint
const * Get()
const 153 return m_attributes.data();
158 return m_writePosition;
162 std::array<EGLint, AttributeCount * 2 + 1> m_attributes;
163 int m_writePosition{};
176 bool CreateDisplay(EGLNativeDisplayType nativeDisplay);
188 bool CreatePlatformDisplay(
void* nativeDisplay, EGLNativeDisplayType nativeDisplayLegacy);
190 void SurfaceAttrib(EGLint attribute, EGLint value);
191 bool CreateSurface(EGLNativeWindowType nativeWindow, EGLint HDRcolorSpace = EGL_NONE);
192 bool CreatePlatformSurface(
void* nativeWindow, EGLNativeWindowType nativeWindowLegacy);
193 bool InitializeDisplay(EGLint renderingApi);
194 bool ChooseConfig(EGLint renderableType, EGLint visualId = 0,
bool hdr =
false);
198 void DestroySurface();
199 void DestroyContext();
200 bool SetVSync(
bool enable);
201 bool TrySwapBuffers();
202 bool IsPlatformSupported()
const;
203 EGLint GetConfigAttrib(EGLint attribute)
const;
205 EGLDisplay GetEGLDisplay()
const 209 EGLSurface GetEGLSurface()
const 213 EGLContext GetEGLContext()
const 217 EGLConfig GetEGLConfig()
const 223 void SurfaceAttrib();
225 EGLenum m_platform{EGL_NONE};
226 bool m_platformSupported{
false};
228 EGLDisplay m_eglDisplay{EGL_NO_DISPLAY};
229 EGLSurface m_eglSurface{EGL_NO_SURFACE};
230 EGLContext m_eglContext{EGL_NO_CONTEXT};
231 EGLConfig m_eglConfig{}, m_eglHDRConfig{};
void Add(std::initializer_list< EGLAttribute > const &attributes)
Add multiple attributes.
Definition: EGLUtils.h:123
Convenience wrapper for stack-allocated EGL attribute arrays.
Definition: EGLUtils.h:101
Definition: EGLUtils.h:51
void Add(EGLAttribute const &attribute)
Add one attribute.
Definition: EGLUtils.h:76
Definition: EGLUtils.h:104
Convenience wrapper for heap-allocated EGL attribute arrays.
Definition: EGLUtils.h:48
void Add(std::initializer_list< EGLAttribute > const &attributes)
Add multiple attributes.
Definition: EGLUtils.h:62
void Add(EGLAttribute const &attribute)
Add one attribute.
Definition: EGLUtils.h:146
Definition: EGLUtils.h:166
Definition: EGLUtils.h:19