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:
Stefano Bonicatti 2017-12-08 17:58:28 +01:00
parent 146bdf031d
commit c067cf2c6a
7 changed files with 12 additions and 4 deletions

View file

@ -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;
} }
}; };

View file

@ -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");

View file

@ -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);

View file

@ -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();

View file

@ -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?

View file

@ -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);

View file

@ -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);