summaryrefslogtreecommitdiffstats
path: root/platform/linuxbsd/x11/gl_manager_x11.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linuxbsd/x11/gl_manager_x11.cpp')
-rw-r--r--platform/linuxbsd/x11/gl_manager_x11.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/platform/linuxbsd/x11/gl_manager_x11.cpp b/platform/linuxbsd/x11/gl_manager_x11.cpp
index 03ba95f475..f24bac5e19 100644
--- a/platform/linuxbsd/x11/gl_manager_x11.cpp
+++ b/platform/linuxbsd/x11/gl_manager_x11.cpp
@@ -30,20 +30,22 @@
#include "gl_manager_x11.h"
-#ifdef X11_ENABLED
-#if defined(GLES3_ENABLED)
+#if defined(X11_ENABLED) && defined(GLES3_ENABLED)
+
+#include "thirdparty/glad/glad/glx.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include "thirdparty/glad/glad/glx.h"
-
#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
typedef GLXContext (*GLXCREATECONTEXTATTRIBSARBPROC)(Display *, GLXFBConfig, GLXContext, Bool, const int *);
+// To prevent shadowing warnings
+#undef glXCreateContextAttribsARB
+
struct GLManager_X11_Private {
::GLXContext glx_context;
};
@@ -83,8 +85,13 @@ int GLManager_X11::_find_or_create_display(Display *p_x11_display) {
d.context = memnew(GLManager_X11_Private);
d.context->glx_context = nullptr;
- //Error err = _create_context(d);
- _create_context(d);
+ Error err = _create_context(d);
+
+ if (err != OK) {
+ _displays.remove_at(new_display_id);
+ return -1;
+ }
+
return new_display_id;
}
@@ -191,8 +198,14 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) {
return OK;
}
-XVisualInfo GLManager_X11::get_vi(Display *p_display) {
- return _displays[_find_or_create_display(p_display)].x_vi;
+XVisualInfo GLManager_X11::get_vi(Display *p_display, Error &r_error) {
+ int display_id = _find_or_create_display(p_display);
+ if (display_id < 0) {
+ r_error = FAILED;
+ return XVisualInfo();
+ }
+ r_error = OK;
+ return _displays[display_id].x_vi;
}
Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height) {
@@ -211,6 +224,10 @@ Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window
win.x11_window = p_window;
win.gldisplay_id = _find_or_create_display(p_display);
+ if (win.gldisplay_id == -1) {
+ return FAILED;
+ }
+
// the display could be invalid .. check NYI
GLDisplay &gl_display = _displays[win.gldisplay_id];
::Display *x11_display = gl_display.x11_display;
@@ -385,5 +402,4 @@ GLManager_X11::~GLManager_X11() {
release_current();
}
-#endif
-#endif
+#endif // X11_ENABLED && GLES3_ENABLED