mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
@@ -135,6 +135,7 @@ DisplayServerEmbedded::DisplayServerEmbedded(const String &p_rendering_driver, W
|
||||
if (err != OK) {
|
||||
ERR_FAIL_MSG("Could not create OpenGL context.");
|
||||
}
|
||||
gl_manager->set_vsync_enabled(p_vsync_mode != DisplayServer::VSYNC_DISABLED);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -708,15 +709,44 @@ void DisplayServerEmbedded::window_set_ime_position(const Point2i &p_pos, Window
|
||||
}
|
||||
|
||||
void DisplayServerEmbedded::set_state(const DisplayServerEmbeddedState &p_state) {
|
||||
if (state == p_state) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t old_display_id = state.display_id;
|
||||
|
||||
state = p_state;
|
||||
|
||||
if (state.display_id != old_display_id) {
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (gl_manager) {
|
||||
gl_manager->set_display_id(state.display_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayServerEmbedded::window_set_vsync_mode(DisplayServer::VSyncMode p_vsync_mode, WindowID p_window) {
|
||||
// Not supported
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (gl_manager) {
|
||||
gl_manager->set_vsync_enabled(p_vsync_mode != DisplayServer::VSYNC_DISABLED);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(RD_ENABLED)
|
||||
if (rendering_context) {
|
||||
rendering_context->window_set_vsync_mode(p_window, p_vsync_mode);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
DisplayServer::VSyncMode DisplayServerEmbedded::window_get_vsync_mode(WindowID p_window) const {
|
||||
_THREAD_SAFE_METHOD_
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (gl_manager) {
|
||||
return (gl_manager->is_vsync_enabled() ? DisplayServer::VSyncMode::VSYNC_ENABLED : DisplayServer::VSyncMode::VSYNC_DISABLED);
|
||||
}
|
||||
#endif
|
||||
#if defined(RD_ENABLED)
|
||||
if (rendering_context) {
|
||||
return rendering_context->window_get_vsync_mode(p_window);
|
||||
@@ -762,14 +792,15 @@ void DisplayServerEmbedded::swap_buffers() {
|
||||
}
|
||||
|
||||
void DisplayServerEmbeddedState::serialize(PackedByteArray &r_data) {
|
||||
r_data.resize(8);
|
||||
r_data.resize(12);
|
||||
|
||||
uint8_t *data = r_data.ptrw();
|
||||
data += encode_float(screen_max_scale, data);
|
||||
data += encode_float(screen_dpi, data);
|
||||
data += encode_uint32(display_id, data);
|
||||
|
||||
// Assert we had enough space.
|
||||
DEV_ASSERT(data - r_data.ptrw() >= r_data.size());
|
||||
DEV_ASSERT((data - r_data.ptrw()) >= r_data.size());
|
||||
}
|
||||
|
||||
Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
|
||||
@@ -778,6 +809,8 @@ Error DisplayServerEmbeddedState::deserialize(const PackedByteArray &p_data) {
|
||||
screen_max_scale = decode_float(data);
|
||||
data += sizeof(float);
|
||||
screen_dpi = decode_float(data);
|
||||
data += sizeof(float);
|
||||
display_id = decode_uint32(data);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user