diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs
index e5a949f3b..29549977e 100644
--- a/Source/Editor/Editor.cs
+++ b/Source/Editor/Editor.cs
@@ -1408,6 +1408,23 @@ namespace FlaxEditor
}
}
+ internal void Internal_GetGameWindowViewportSize(out Float2 result)
+ {
+ result = new Float2(1280, 720);
+ var gameWin = Windows.GameWin;
+ if (gameWin?.Root?.RootWindow is WindowRootControl root)
+ {
+ // Handle case when Game window is not selected in tab view
+ var dockedTo = gameWin.ParentDockPanel;
+ if (dockedTo != null && dockedTo.SelectedTab != gameWin && dockedTo.SelectedTab != null)
+ result = dockedTo.SelectedTab.Size * root.DpiScale;
+ else
+ result = gameWin.Viewport.Size * root.DpiScale;
+
+ result = Float2.Round(result);
+ }
+ }
+
internal bool Internal_OnAppExit()
{
// In editor play mode (when main window is not closed) just skip engine exit and leave the play mode
diff --git a/Source/Editor/Managed/ManagedEditor.cpp b/Source/Editor/Managed/ManagedEditor.cpp
index fdabf9056..5b45ea7d6 100644
--- a/Source/Editor/Managed/ManagedEditor.cpp
+++ b/Source/Editor/Managed/ManagedEditor.cpp
@@ -457,6 +457,24 @@ Float2 ManagedEditor::GetGameWindowSize()
return Float2::Zero;
}
+Float2 ManagedEditor::GetGameWindowViewportSize()
+{
+ if (HasManagedInstance())
+ {
+ if (Internal_GetGameWindowSize == nullptr)
+ {
+ Internal_GetGameWindowSize = GetClass()->GetMethod("Internal_GetGameWindowViewportSize", 1);
+ ASSERT(Internal_GetGameWindowSize);
+ }
+ Float2 size;
+ void* params[1];
+ params[0] = &size;
+ Internal_GetGameWindowSize->Invoke(GetManagedInstance(), params, nullptr);
+ return size;
+ }
+ return Float2::Zero;
+}
+
bool ManagedEditor::OnAppExit()
{
if (!HasManagedInstance())
diff --git a/Source/Editor/Managed/ManagedEditor.h b/Source/Editor/Managed/ManagedEditor.h
index 36fc0c234..cfacce2da 100644
--- a/Source/Editor/Managed/ManagedEditor.h
+++ b/Source/Editor/Managed/ManagedEditor.h
@@ -133,6 +133,12 @@ public:
/// The size.
Float2 GetGameWindowSize();
+ ///
+ /// Gets the size of the game window viewport output.
+ ///
+ /// The size.
+ Float2 GetGameWindowViewportSize();
+
///
/// Called when application code calls exit. Editor may end play mode or exit normally.
///
diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp
index ea161c38a..3e19403cd 100644
--- a/Source/Engine/Level/Actors/Camera.cpp
+++ b/Source/Engine/Level/Actors/Camera.cpp
@@ -189,7 +189,7 @@ Viewport Camera::GetViewport() const
#if USE_EDITOR
// Editor
if (Editor::Managed)
- result.Size = Editor::Managed->GetGameWindowSize();
+ result.Size = Editor::Managed->GetGameWindowViewportSize();
#else
// game
auto mainWin = Engine::MainWindow;