Browse Source

Merge pull request #14434 from Smjert/fix/13447/vsync

Fixes vsync setting ignored when using a separate thread for rendering
Rémi Verschelde 7 years ago
parent
commit
a8ee9a6116

+ 3 - 1
core/os/os.h

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

+ 1 - 3
main/main.cpp

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

+ 1 - 0
platform/haiku/os_haiku.cpp

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

+ 2 - 0
platform/osx/os_osx.mm

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

+ 1 - 0
platform/uwp/os_uwp.cpp

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

+ 2 - 0
platform/windows/os_windows.cpp

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

+ 2 - 0
platform/x11/os_x11.cpp

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