From a14896f9ed209dd3f9597722e5a5697bd7dbf531 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Mon, 4 Dec 2023 12:18:14 +0100 Subject: meta: Renamed folder containing source --- modules/window-opengl/gl_xcb.h | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 modules/window-opengl/gl_xcb.h (limited to 'modules/window-opengl/gl_xcb.h') diff --git a/modules/window-opengl/gl_xcb.h b/modules/window-opengl/gl_xcb.h new file mode 100644 index 0000000..0d84662 --- /dev/null +++ b/modules/window-opengl/gl_xcb.h @@ -0,0 +1,68 @@ +#pragma once + +#include + +#ifndef SAW_OGL +#error "OpenGL is not supported" +#endif + +#include "gl_backends.h" +#include "gl_context.h" +#include "gl_window.h" + +#include + +namespace saw { +namespace gfx { + +struct glx_library_extensions { +public: + std::string_view raw_extension_string; + GLXContext (*glXCreateContextAttribsARB)(Display*, GLXFBConfig, GLXContext, Bool, const int*) = nullptr; +}; + +template<> +class gpu_context final { +private: + glx_library_extensions ext_lib_; + own> device_; + int visual_id_; + GLXContext context_; + GLXFBConfig fb_config_; + + friend class gpu_window; +public: + gpu_context(const glx_library_extensions&, own>, int, GLXContext, GLXFBConfig); + ~gpu_context(); + + own> create_window(const video_mode&, std::string_view); + + void flush(); +}; + +template<> +class gpu_window final { +private: + own> window_; + gpu_context* context_; + + ::GLXWindow glx_window_handle_; +public: + gpu_window(own> window, gpu_context& ctx, + ::GLXWindow); + ~gpu_window(); + + void bind(); + void swap(); + void show(); + void hide(); + + const video_mode& get_video_mode() const; + const std::string_view get_title() const; + + void resize(size_t height, size_t width); + + conveyor> on_event(); +}; +} +} -- cgit v1.2.3