{{newin|[[0.9.0]]|090|type=function|text=Moved from [[love.graphics.setMode]]}}

Sets the display mode and properties of the window.

If width or height is 0, setMode will use the width and height of the desktop. 

Changing the display mode may have side effects: for example, [[Canvas|canvases]] will be cleared and values sent to shaders with [[Shader:send]] will be erased. Make sure to save the contents of [[Canvas|canvases]] beforehand or re-draw to them afterward if you need to.
== Function ==
=== Synopsis ===
<source lang="lua">
success = love.window.setMode( width, height, flags )
</source>
=== Arguments ===
{{param|number|width|Display width.}}
{{param|number|height|Display height.}}
{{param|table|flags|The flags table with the options:}}
{{subparam|boolean|fullscreen (false)|Fullscreen (true), or windowed (false).}}
{{subparam|FullscreenType|fullscreentype ("desktop")|The type of fullscreen to use. This defaults to "normal" in [[0.9.0]] through [[0.9.2]] and to "desktop" in [[0.10.0]] and older.}}
{{subparam|boolean|vsync (true)|True if LÖVE should wait for vsync, false otherwise.}}
{{subparam|number|msaa (0)|The number of antialiasing samples.}}
{{subparam|boolean|stencil (true)|Whether a stencil buffer should be allocated. If true, the stencil buffer will have 8 bits.}}
{{subparam|number|depth (0)|The number of bits in the depth buffer.}}
{{subparam|boolean|resizable (false)|True if the window should be resizable in windowed mode, false otherwise.}}
{{subparam|boolean|borderless (false)|True if the window should be borderless in windowed mode, false otherwise.}}
{{subparam|boolean|centered (true)|True if the window should be centered in windowed mode, false otherwise.}}
{{subparam|number|display (1)|The index of the display to show the window in, if multiple monitors are available.}}
{{subparam|number|minwidth (1)|The minimum width of the window, if it's resizable. Cannot be less than 1.}}
{{subparam|number|minheight (1)|The minimum height of the window, if it's resizable. Cannot be less than 1.}}
{{New feature|0.9.1|
{{subparam|boolean|highdpi (false)|True if [[love.window.getPixelScale|high-dpi mode]] should be used on Retina displays in macOS and iOS. Does nothing on non-Retina displays.}} }}
{{New feature|0.9.2|
{{subparam|number|x (nil)|The x-coordinate of the window's position in the specified display.}}
{{subparam|number|y (nil)|The y-coordinate of the window's position in the specified display.}} }}
{{New feature|11.3|
{{subparam|boolean|usedpiscale (true)|Disables automatic DPI scaling when false.}} }}
{{Removed new feature|0.9.1|0.10.0|
{{subparam|boolean|srgb (false)|Removed in [[0.10.0]] (set t.gammacorrect in [[conf.lua]] instead). True if sRGB gamma correction should be applied when drawing to the screen.}} }}

=== Returns ===
{{param|boolean|success|True if successful, false otherwise.}}

== Notes ==
* If fullscreen is enabled and the width or height is not supported (see [[love.window.getFullscreenModes]]), the window may be resized to the closest available resolution and a [[love.resize|resize]] event will be triggered.

* If the fullscreen type is "desktop", then the window will be automatically resized to the desktop resolution.

* If the width and height is bigger than or equal to the desktop dimensions (this includes setting both to 0) and fullscreen is set to false, it will appear "visually" fullscreen, but it's not true fullscreen and [[love.window.getFullscreen]] will return false in this case. This also applies to [[love.window.updateMode]] as well.

* If you have disabled the window in [[Config_Files|conf.lua]] (i.e. <code>t.window = false</code>) and use this function to manually create the window, then you must not call any other [[love.graphics]].* function before this one. Doing so will result in undefined behavior and/or crashes because OpenGL cannot function properly without a window.

* Transparent backgrounds are currently not supported.

== Examples ==
=== Make the window resizable with vsync disabled and a minimum width and height set. ===
<source lang="lua">
function love.load()
    love.window.setMode(800, 600, {resizable=true, vsync=false, minwidth=400, minheight=300})
end
</source>

== See Also ==
* [[parent::love.window]]
* [[love.window.getMode]]
* [[love.window.getFullscreenModes]]
* [[love.resize]]
[[Category:Functions]]
{{#set:Description=Sets the display mode and properties of the window.}}
{{#set:Since=090}}
== Other Languages ==
{{i18n|love.window.setMode}}