Add epic hack so vsync can be toggled in run-time from script. Fixes #14458.
Call needs to be routed via visual server to reach the proper thread.
This commit is contained in:
parent
d03f35f1bc
commit
652c98a7be
14 changed files with 61 additions and 18 deletions
|
|
@ -181,6 +181,10 @@ void VisualServerRaster::set_debug_generate_wireframes(bool p_generate) {
|
|||
VSG::storage->set_debug_generate_wireframes(p_generate);
|
||||
}
|
||||
|
||||
void VisualServerRaster::call_set_use_vsync(bool p_enable) {
|
||||
OS::get_singleton()->_set_use_vsync(p_enable);
|
||||
}
|
||||
|
||||
VisualServerRaster::VisualServerRaster() {
|
||||
|
||||
VSG::canvas = memnew(VisualServerCanvas);
|
||||
|
|
|
|||
|
|
@ -668,6 +668,8 @@ public:
|
|||
virtual bool has_os_feature(const String &p_feature) const;
|
||||
virtual void set_debug_generate_wireframes(bool p_generate);
|
||||
|
||||
virtual void call_set_use_vsync(bool p_enable);
|
||||
|
||||
VisualServerRaster();
|
||||
~VisualServerRaster();
|
||||
|
||||
|
|
|
|||
|
|
@ -158,9 +158,19 @@ void VisualServerWrapMT::finish() {
|
|||
canvas_occluder_polygon_free_cached_ids();
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::set_use_vsync_callback(bool p_enable) {
|
||||
|
||||
singleton_mt->call_set_use_vsync(p_enable);
|
||||
}
|
||||
|
||||
VisualServerWrapMT *VisualServerWrapMT::singleton_mt = NULL;
|
||||
|
||||
VisualServerWrapMT::VisualServerWrapMT(VisualServer *p_contained, bool p_create_thread) :
|
||||
command_queue(p_create_thread) {
|
||||
|
||||
singleton_mt = this;
|
||||
OS::switch_vsync_function = set_use_vsync_callback; //as this goes to another thread, make sure it goes properly
|
||||
|
||||
visual_server = p_contained;
|
||||
create_thread = p_create_thread;
|
||||
thread = NULL;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ class VisualServerWrapMT : public VisualServer {
|
|||
|
||||
//#define DEBUG_SYNC
|
||||
|
||||
static VisualServerWrapMT *singleton_mt;
|
||||
|
||||
#ifdef DEBUG_SYNC
|
||||
#define SYNC_DEBUG print_line("sync on: " + String(__FUNCTION__));
|
||||
#else
|
||||
|
|
@ -584,6 +586,10 @@ public:
|
|||
virtual bool has_feature(Features p_feature) const { return visual_server->has_feature(p_feature); }
|
||||
virtual bool has_os_feature(const String &p_feature) const { return visual_server->has_os_feature(p_feature); }
|
||||
|
||||
FUNC1(call_set_use_vsync, bool)
|
||||
|
||||
static void set_use_vsync_callback(bool p_enable);
|
||||
|
||||
VisualServerWrapMT(VisualServer *p_contained, bool p_create_thread);
|
||||
~VisualServerWrapMT();
|
||||
|
||||
|
|
|
|||
|
|
@ -1922,6 +1922,7 @@ VisualServer::VisualServer() {
|
|||
|
||||
//ERR_FAIL_COND(singleton);
|
||||
singleton = this;
|
||||
|
||||
GLOBAL_DEF("rendering/vram_compression/import_s3tc", true);
|
||||
GLOBAL_DEF("rendering/vram_compression/import_etc", false);
|
||||
GLOBAL_DEF("rendering/vram_compression/import_etc2", true);
|
||||
|
|
|
|||
|
|
@ -980,6 +980,8 @@ public:
|
|||
|
||||
virtual void set_debug_generate_wireframes(bool p_generate) = 0;
|
||||
|
||||
virtual void call_set_use_vsync(bool p_enable) = 0;
|
||||
|
||||
VisualServer();
|
||||
virtual ~VisualServer();
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue