Here is a script to manually change to any resolution. You always want the window / canvas at native resolution.
extends Node2D
const RES_SD = Vector2(854, 480)
const RES_HD = Vector2(1280, 720)
const RES_FHD = Vector2(1920, 1080)
const RES_QHD = Vector2(2560, 1440)
const RES_UHD = Vector2(3840, 2160)
enum RESOLUTION {NATIVE, SD, HD, FHD, QHD, UHD}
export (RESOLUTION) var resolution = RESOLUTION.NATIVE setget update_resolution
var viewport
var viewport_size
var native_res
func _ready():
viewport = get_viewport()
viewport.connect("size_changed", self, "on_window_resize")
var texture = viewport.get_texture()
texture.flags = Texture.FLAG_FILTER
texture.viewport_path = viewport.get_path()
get_screen_size()
set_viewport_size()
on_window_resize()
func set_viewport_size():
var view_res = RES_SD
match resolution:
RESOLUTION.NATIVE:
view_res = native_res
RESOLUTION.SD:
view_res = RES_SD
RESOLUTION.HD:
view_res = RES_HD
RESOLUTION.FHD:
view_res = RES_FHD
RESOLUTION.QHD:
view_res = RES_QHD
RESOLUTION.UHD:
view_res = RES_UHD
viewport_size = view_res
func update_resolution(res):
resolution = res
set_viewport_size()
on_window_resize()
func on_window_resize():
get_screen_size()
set_viewport_size()
resize_viewport()
func resize_viewport():
if viewport:
viewport.size = viewport_size
func get_screen_size():
var window = OS.window_size
native_res = window