Fixes vsync setting ignored when using a separate thread for rendering
Setting the vsync in the main thread, after the rendering thread starts and takes the OpenGL context fails, so we need to do that before. Also, for some reason, the main thread cannot make current the context anymore. Fixes #13447
This commit is contained in:
parent
146bdf031d
commit
c067cf2c6a
7 changed files with 12 additions and 4 deletions
|
@ -92,14 +92,16 @@ public:
|
||||||
bool resizable;
|
bool resizable;
|
||||||
bool borderless_window;
|
bool borderless_window;
|
||||||
bool maximized;
|
bool maximized;
|
||||||
|
bool use_vsync;
|
||||||
float get_aspect() const { return (float)width / (float)height; }
|
float get_aspect() const { return (float)width / (float)height; }
|
||||||
VideoMode(int p_width = 1024, int p_height = 600, bool p_fullscreen = false, bool p_resizable = true, bool p_borderless_window = false, bool p_maximized = false) {
|
VideoMode(int p_width = 1024, int p_height = 600, bool p_fullscreen = false, bool p_resizable = true, bool p_borderless_window = false, bool p_maximized = false, bool p_use_vsync = false) {
|
||||||
width = p_width;
|
width = p_width;
|
||||||
height = p_height;
|
height = p_height;
|
||||||
fullscreen = p_fullscreen;
|
fullscreen = p_fullscreen;
|
||||||
resizable = p_resizable;
|
resizable = p_resizable;
|
||||||
borderless_window = p_borderless_window;
|
borderless_window = p_borderless_window;
|
||||||
maximized = p_maximized;
|
maximized = p_maximized;
|
||||||
|
use_vsync = p_use_vsync;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -819,7 +819,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||||
OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", false);
|
OS::get_singleton()->_allow_hidpi = GLOBAL_DEF("display/window/dpi/allow_hidpi", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
use_vsync = GLOBAL_DEF("display/window/vsync/use_vsync", true);
|
video_mode.use_vsync = GLOBAL_DEF("display/window/vsync/use_vsync", true);
|
||||||
|
|
||||||
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation", 2);
|
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation", 2);
|
||||||
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation.mobile", 3);
|
GLOBAL_DEF("rendering/quality/intended_usage/framebuffer_allocation.mobile", 3);
|
||||||
|
@ -993,8 +993,6 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
|
||||||
// also init our arvr_server from here
|
// also init our arvr_server from here
|
||||||
arvr_server = memnew(ARVRServer);
|
arvr_server = memnew(ARVRServer);
|
||||||
|
|
||||||
OS::get_singleton()->set_use_vsync(use_vsync);
|
|
||||||
|
|
||||||
register_core_singletons();
|
register_core_singletons();
|
||||||
|
|
||||||
MAIN_PRINT("Main: Setup Logo");
|
MAIN_PRINT("Main: Setup Logo");
|
||||||
|
|
|
@ -105,6 +105,7 @@ void OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p_
|
||||||
context_gl = memnew(ContextGL_Haiku(window));
|
context_gl = memnew(ContextGL_Haiku(window));
|
||||||
context_gl->initialize();
|
context_gl->initialize();
|
||||||
context_gl->make_current();
|
context_gl->make_current();
|
||||||
|
context_gl->set_use_vsync(current_video_mode.use_vsync);
|
||||||
|
|
||||||
/* Port to GLES 3 rasterizer */
|
/* Port to GLES 3 rasterizer */
|
||||||
//rasterizer = memnew(RasterizerGLES2);
|
//rasterizer = memnew(RasterizerGLES2);
|
||||||
|
|
|
@ -1089,6 +1089,8 @@ void OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
|
||||||
|
|
||||||
[context makeCurrentContext];
|
[context makeCurrentContext];
|
||||||
|
|
||||||
|
set_use_vsync(p_desired.use_vsync);
|
||||||
|
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
|
|
||||||
_update_window();
|
_update_window();
|
||||||
|
|
|
@ -241,6 +241,7 @@ void OSUWP::initialize(const VideoMode &p_desired, int p_video_driver, int p_aud
|
||||||
|
|
||||||
RasterizerGLES3::register_config();
|
RasterizerGLES3::register_config();
|
||||||
RasterizerGLES3::make_current();
|
RasterizerGLES3::make_current();
|
||||||
|
gl_context->set_use_vsync(vm.use_vsync);
|
||||||
|
|
||||||
visual_server = memnew(VisualServerRaster);
|
visual_server = memnew(VisualServerRaster);
|
||||||
// FIXME: Reimplement threaded rendering? Or remove?
|
// FIXME: Reimplement threaded rendering? Or remove?
|
||||||
|
|
|
@ -1074,6 +1074,8 @@ void OS_Windows::initialize(const VideoMode &p_desired, int p_video_driver, int
|
||||||
RasterizerGLES3::register_config();
|
RasterizerGLES3::register_config();
|
||||||
|
|
||||||
RasterizerGLES3::make_current();
|
RasterizerGLES3::make_current();
|
||||||
|
|
||||||
|
gl_context->set_use_vsync(video_mode.use_vsync);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
visual_server = memnew(VisualServerRaster);
|
visual_server = memnew(VisualServerRaster);
|
||||||
|
|
|
@ -286,6 +286,8 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
|
||||||
|
|
||||||
RasterizerGLES3::make_current();
|
RasterizerGLES3::make_current();
|
||||||
|
|
||||||
|
context_gl->set_use_vsync(current_videomode.use_vsync);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
visual_server = memnew(VisualServerRaster);
|
visual_server = memnew(VisualServerRaster);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue