diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-04-27 03:39:41 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-04-27 03:39:41 +0000 |
| commit | a3ce5f65072388091995d72d40c40246588c54e9 (patch) | |
| tree | e91e56e4c44c18895bdf10cd29b786cbabd926ce /Imgui/src/ImGuiImplAndroid.cpp | |
| parent | Updated .gitignore (diff) | |
| download | DiligentTools-a3ce5f65072388091995d72d40c40246588c54e9.tar.gz DiligentTools-a3ce5f65072388091995d72d40c40246588c54e9.zip | |
Imgui: handling surface pretransform
Diffstat (limited to 'Imgui/src/ImGuiImplAndroid.cpp')
| -rw-r--r-- | Imgui/src/ImGuiImplAndroid.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/Imgui/src/ImGuiImplAndroid.cpp b/Imgui/src/ImGuiImplAndroid.cpp index 5fd9340..946a77a 100644 --- a/Imgui/src/ImGuiImplAndroid.cpp +++ b/Imgui/src/ImGuiImplAndroid.cpp @@ -28,6 +28,8 @@ #include "imgui.h" #include "ImGuiImplAndroid.hpp" +#include "GraphicsTypes.h" +#include "DebugUtilities.hpp" namespace Diligent { @@ -35,14 +37,12 @@ namespace Diligent ImGuiImplAndroid::ImGuiImplAndroid(IRenderDevice* pDevice, TEXTURE_FORMAT BackBufferFmt, TEXTURE_FORMAT DepthBufferFmt, - Uint32 DisplayWidth, - Uint32 DisplayHeight, Uint32 InitialVertexBufferSize, Uint32 InitialIndexBufferSize) : ImGuiImplDiligent{pDevice, BackBufferFmt, DepthBufferFmt, InitialVertexBufferSize, InitialIndexBufferSize} { - auto& io = ImGui::GetIO(); - io.DisplaySize = ImVec2(DisplayWidth, DisplayHeight); + auto& io = ImGui::GetIO(); + io.FontGlobalScale = 2; io.BackendPlatformName = "Diligent-ImGuiImplAndroid"; @@ -53,7 +53,9 @@ ImGuiImplAndroid::~ImGuiImplAndroid() { } -void ImGuiImplAndroid::NewFrame() +void ImGuiImplAndroid::NewFrame(Uint32 RenderSurfaceWidth, + Uint32 RenderSurfaceHeight, + SURFACE_TRANSFORM SurfacePreTransform) { auto now = std::chrono::high_resolution_clock::now(); auto elapsed_ns = now - m_LastTimestamp; @@ -61,7 +63,34 @@ void ImGuiImplAndroid::NewFrame() auto& io = ImGui::GetIO(); io.DeltaTime = static_cast<float>(elapsed_ns.count() / 1e+9); - ImGuiImplDiligent::NewFrame(); + // DisplaySize must always refer to the logical size that accounts for the pre-transform + io.DisplaySize.x = static_cast<float>(RenderSurfaceWidth); + io.DisplaySize.y = static_cast<float>(RenderSurfaceHeight); + switch (SurfacePreTransform) + { + case SURFACE_TRANSFORM_IDENTITY: + case SURFACE_TRANSFORM_ROTATE_180: + case SURFACE_TRANSFORM_HORIZONTAL_MIRROR: + case SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180: + // Do nothing + break; + + case SURFACE_TRANSFORM_ROTATE_90: + case SURFACE_TRANSFORM_ROTATE_270: + case SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90: + case SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270: + std::swap(io.DisplaySize.x, io.DisplaySize.y); + break; + + case SURFACE_TRANSFORM_OPTIMAL: + UNEXPECTED("SURFACE_TRANSFORM_OPTIMAL is only valid as parameter during swap chain initialization."); + break; + + default: + UNEXPECTED("Unknown transform"); + } + + ImGuiImplDiligent::NewFrame(RenderSurfaceWidth, RenderSurfaceHeight, SurfacePreTransform); } bool ImGuiImplAndroid::BeginDrag(float x, float y) |
