Polish interaction between windowing, input and rendering
- Adapt GL make/release API to the current architecture. - Fix DisplayServer being locked while dispatching input (prevent deadlocks).
This commit is contained in:
parent
1b104ffcd8
commit
c28f5901c7
22 changed files with 34 additions and 112 deletions
|
|
@ -1174,14 +1174,6 @@ void DisplayServerWayland::release_rendering_thread() {
|
|||
#endif
|
||||
}
|
||||
|
||||
void DisplayServerWayland::make_rendering_thread() {
|
||||
#ifdef GLES3_ENABLED
|
||||
if (egl_manager) {
|
||||
egl_manager->make_current();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void DisplayServerWayland::swap_buffers() {
|
||||
#ifdef GLES3_ENABLED
|
||||
if (egl_manager) {
|
||||
|
|
|
|||
|
|
@ -276,7 +276,6 @@ public:
|
|||
virtual void process_events() override;
|
||||
|
||||
virtual void release_rendering_thread() override;
|
||||
virtual void make_rendering_thread() override;
|
||||
virtual void swap_buffers() override;
|
||||
|
||||
virtual void set_context(Context p_context) override;
|
||||
|
|
|
|||
|
|
@ -4268,7 +4268,7 @@ bool DisplayServerX11::_window_focus_check() {
|
|||
}
|
||||
|
||||
void DisplayServerX11::process_events() {
|
||||
_THREAD_SAFE_METHOD_
|
||||
_THREAD_SAFE_LOCK_
|
||||
|
||||
#ifdef DISPLAY_SERVER_X11_DEBUG_LOGS_ENABLED
|
||||
static int frame = 0;
|
||||
|
|
@ -5097,6 +5097,8 @@ void DisplayServerX11::process_events() {
|
|||
*/
|
||||
}
|
||||
|
||||
_THREAD_SAFE_UNLOCK_
|
||||
|
||||
Input::get_singleton()->flush_buffered_events();
|
||||
}
|
||||
|
||||
|
|
@ -5111,17 +5113,6 @@ void DisplayServerX11::release_rendering_thread() {
|
|||
#endif
|
||||
}
|
||||
|
||||
void DisplayServerX11::make_rendering_thread() {
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (gl_manager) {
|
||||
gl_manager->make_current();
|
||||
}
|
||||
if (gl_manager_egl) {
|
||||
gl_manager_egl->make_current();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void DisplayServerX11::swap_buffers() {
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (gl_manager) {
|
||||
|
|
|
|||
|
|
@ -526,7 +526,6 @@ public:
|
|||
virtual void process_events() override;
|
||||
|
||||
virtual void release_rendering_thread() override;
|
||||
virtual void make_rendering_thread() override;
|
||||
virtual void swap_buffers() override;
|
||||
|
||||
virtual void set_context(Context p_context) override;
|
||||
|
|
|
|||
|
|
@ -311,20 +311,6 @@ void GLManager_X11::window_make_current(DisplayServer::WindowID p_window_id) {
|
|||
_internal_set_current_window(&win);
|
||||
}
|
||||
|
||||
void GLManager_X11::make_current() {
|
||||
if (!_current_window) {
|
||||
return;
|
||||
}
|
||||
if (!_current_window->in_use) {
|
||||
WARN_PRINT("current window not in use!");
|
||||
return;
|
||||
}
|
||||
const GLDisplay &disp = get_current_display();
|
||||
if (!glXMakeCurrent(_x_windisp.x11_display, _x_windisp.x11_window, disp.context->glx_context)) {
|
||||
ERR_PRINT("glXMakeCurrent failed");
|
||||
}
|
||||
}
|
||||
|
||||
void GLManager_X11::swap_buffers() {
|
||||
if (!_current_window) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -117,7 +117,6 @@ public:
|
|||
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
|
||||
|
||||
void release_current();
|
||||
void make_current();
|
||||
void swap_buffers();
|
||||
|
||||
void window_make_current(DisplayServer::WindowID p_window_id);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue