aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/duckstation/gl/context_egl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/duckstation/gl/context_egl.h')
-rw-r--r--src/frontend/duckstation/gl/context_egl.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/frontend/duckstation/gl/context_egl.h b/src/frontend/duckstation/gl/context_egl.h
new file mode 100644
index 0000000..c5eff20
--- /dev/null
+++ b/src/frontend/duckstation/gl/context_egl.h
@@ -0,0 +1,48 @@
+#pragma once
+#include "context.h"
+#include "../../glad/glad_egl.h"
+
+namespace GL {
+
+class ContextEGL : public Context
+{
+public:
+ ContextEGL(const WindowInfo& wi);
+ ~ContextEGL() override;
+
+ static std::unique_ptr<Context> Create(const WindowInfo& wi, const Version* versions_to_try,
+ size_t num_versions_to_try);
+
+ void* GetProcAddress(const char* name) override;
+ virtual bool ChangeSurface(const WindowInfo& new_wi) override;
+ virtual void ResizeSurface(u32 new_surface_width = 0, u32 new_surface_height = 0) override;
+ bool SwapBuffers() override;
+ bool MakeCurrent() override;
+ bool DoneCurrent() override;
+ bool SetSwapInterval(s32 interval) override;
+ virtual std::unique_ptr<Context> CreateSharedContext(const WindowInfo& wi) override;
+
+protected:
+ virtual bool SetDisplay();
+ virtual EGLNativeWindowType GetNativeWindow(EGLConfig config);
+
+ bool Initialize(const Version* versions_to_try, size_t num_versions_to_try);
+ bool CreateDisplay();
+ bool CreateContext(const Version& version, EGLContext share_context);
+ bool CreateContextAndSurface(const Version& version, EGLContext share_context, bool make_current);
+ bool CreateSurface();
+ bool CreatePBufferSurface();
+ bool CheckConfigSurfaceFormat(EGLConfig config, WindowInfo::SurfaceFormat format) const;
+ void DestroyContext();
+ void DestroySurface();
+
+ EGLDisplay m_display = EGL_NO_DISPLAY;
+ EGLSurface m_surface = EGL_NO_SURFACE;
+ EGLContext m_context = EGL_NO_CONTEXT;
+
+ EGLConfig m_config = {};
+
+ bool m_supports_surfaceless = false;
+};
+
+} // namespace GL