diff --git a/source/simple/graphical/gl_window.cpp b/source/simple/graphical/gl_window.cpp
index c024486b6c5182631649d218d3958d08b900ff3d..ec9febb2917f0e37b9496a500577002f90db8cb9 100644
--- a/source/simple/graphical/gl_window.cpp
+++ b/source/simple/graphical/gl_window.cpp
@@ -71,7 +71,7 @@ void gl_window::update() noexcept
 	SDL_GL_SwapWindow(guts().get());
 }
 
-auto gl_window::vsync() -> vsync_mode
+auto gl_window::vsync() const noexcept -> vsync_mode
 {
 	return static_cast<vsync_mode>(SDL_GL_GetSwapInterval());
 }
@@ -82,9 +82,16 @@ void gl_window::require_vsync(vsync_mode mode)
 		SDL_GL_SetSwapInterval(support::to_integer(mode)) );
 }
 
-bool gl_window::request_vsync(vsync_mode mode)
+bool gl_window::request_vsync(vsync_mode mode) noexcept
 {
 	return !sdlcore::utils::check_error(
 		SDL_GL_SetSwapInterval(support::to_integer(mode)) );
 }
 
+int2 gl_window::framebuffer_size() const noexcept
+{
+	int2 size;
+	SDL_GL_GetDrawableSize(guts().get(), &size.x(), &size.y());
+	return size;
+}
+
diff --git a/source/simple/graphical/gl_window.h b/source/simple/graphical/gl_window.h
index 4fb11318437bf6b44103755f0db4d97f2c29a5db..5c002a77038db9a022890c73941319d1a6dcec90 100644
--- a/source/simple/graphical/gl_window.h
+++ b/source/simple/graphical/gl_window.h
@@ -262,10 +262,12 @@ namespace simple::graphical
 
 		void update() noexcept;
 
-		vsync_mode vsync();
-		bool request_vsync(vsync_mode);
+		vsync_mode vsync() const noexcept;
+		bool request_vsync(vsync_mode) noexcept;
 		void require_vsync(vsync_mode);
 
+		int2 framebuffer_size() const noexcept;
+
 	};