mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge branch 'examples_refactor2' into viewport (#1870)
# Conflicts: # examples/README.txt # examples/directx11_example/main.cpp # examples/directx12_example/main.cpp # examples/imgui_impl_dx10.cpp # examples/imgui_impl_dx11.cpp # examples/imgui_impl_dx12.cpp # examples/imgui_impl_glfw.cpp # examples/imgui_impl_opengl2.cpp # examples/imgui_impl_opengl2.h # examples/imgui_impl_opengl3.cpp # examples/imgui_impl_sdl2.cpp # examples/imgui_impl_sdl2.h # examples/imgui_impl_vulkan.cpp # examples/imgui_impl_vulkan.h # examples/imgui_impl_win32.cpp # examples/imgui_impl_win32.h # examples/opengl2_example/main.cpp # examples/opengl3_example/main.cpp # examples/sdl_opengl2_example/main.cpp # examples/sdl_opengl3_example/main.cpp # examples/sdl_vulkan_example/main.cpp # examples/vulkan_example/main.cpp # imgui.cpp # imgui.h
This commit is contained in:
		@@ -39,6 +39,16 @@ Breaking Changes:
 | 
			
		||||
   The only difference is if you were using TreeNodeEx() manually with ImGuiTreeNodeFlags_CollapsingHeader and without ImGuiTreeNodeFlags_NoTreePushOnOpen. In which case
 | 
			
		||||
   you can remove the ImGuiTreeNodeFlags_NoTreePushOnOpen flag from your call (ImGuiTreeNodeFlags_CollapsingHeader & ~ImGuiTreeNodeFlags_NoTreePushOnOpen). (#1864)
 | 
			
		||||
 - ImFontAtlas: Renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set. (#1859)
 | 
			
		||||
 - Examples Bindings have been refactored to separate them into "Platform" and "Renderer" components that are more easy to combine.
 | 
			
		||||
   - The "Platform" bindings are in charge of: mouse/keyboard/gamepad inputs, cursor shape, timing, etc.
 | 
			
		||||
     Examples: Windows (imgui_impl_win32.cpp), GLFW (imgui_impl_glfw.cpp), SDL2 (imgui_impl_sdl2.cpp).
 | 
			
		||||
   - The "Renderer" bindings are in charge of: creating the main font texture, rendering imgui draw data.
 | 
			
		||||
     Examples: DirectX11 (imgui_impl_dx11.cpp), GL3 (imgui_impl_opengl3.cpp), Vulkan (imgui_impl_vulkan.cpp)
 | 
			
		||||
   - This is not strictly a breaking change if you keep your old bindings, but _WHEN_ you'll want to fully update your bindings, 
 | 
			
		||||
     expect to have to reshuffle a few things. This refactor will greatly facilitate maintenance and re-usability, and was designed 
 | 
			
		||||
     to get us closer to the upcoming "multi-viewport" feature branch.
 | 
			
		||||
   - Please read examples/README.txt for details.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Other Changes:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -294,8 +294,10 @@ int main(int, char**)
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplWin32_Init(hwnd);
 | 
			
		||||
    ImGui_ImplDX12_Init(g_pd3dDevice, NUM_FRAMES_IN_FLIGHT, DXGI_FORMAT_R8G8B8A8_UNORM,
 | 
			
		||||
                        g_pd3dSrvDescHeap->GetCPUDescriptorHandleForHeapStart(), g_pd3dSrvDescHeap->GetGPUDescriptorHandleForHeapStart());
 | 
			
		||||
    ImGui_ImplDX12_Init(g_pd3dDevice, NUM_FRAMES_IN_FLIGHT, 
 | 
			
		||||
        DXGI_FORMAT_R8G8B8A8_UNORM,
 | 
			
		||||
        g_pd3dSrvDescHeap->GetCPUDescriptorHandleForHeapStart(), 
 | 
			
		||||
        g_pd3dSrvDescHeap->GetGPUDescriptorHandleForHeapStart());
 | 
			
		||||
 | 
			
		||||
    // Setup style
 | 
			
		||||
    ImGui::StyleColorsDark();
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,8 @@
 | 
			
		||||
// CHANGELOG 
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-XX-XX: DirectX10: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications).
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_dx10.cpp/.h away from the old combined DX10+Win32 example.
 | 
			
		||||
//  2018-06-08: DirectX10: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-04-09: Misc: Fixed erroneous call to io.Fonts->ClearInputData() + ClearTexData() that was left in DX10 example but removed in 1.47 (Nov 2015) on other back-ends.
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX10_RenderDrawData() in the .h file so you can call it yourself.
 | 
			
		||||
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
 | 
			
		||||
@@ -48,7 +49,7 @@ static int                      g_VertexBufferSize = 5000, g_IndexBufferSize = 1
 | 
			
		||||
 | 
			
		||||
struct VERTEX_CONSTANT_BUFFER
 | 
			
		||||
{
 | 
			
		||||
    float        mvp[4][4];
 | 
			
		||||
    float   mvp[4][4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Forward Declarations
 | 
			
		||||
@@ -108,7 +109,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    g_pIB->Unmap();
 | 
			
		||||
 | 
			
		||||
    // Setup orthographic projection matrix into our constant buffer
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps.
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    {
 | 
			
		||||
        void* mapped_resource;
 | 
			
		||||
        if (g_pVertexConstantBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, &mapped_resource) != S_OK)
 | 
			
		||||
@@ -199,7 +200,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    // Render command lists
 | 
			
		||||
    int vtx_offset = 0;
 | 
			
		||||
    int idx_offset = 0;
 | 
			
		||||
    ImVec2 display_pos = draw_data->DisplayPos;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -214,9 +215,8 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // Apply scissor/clipping rectangle
 | 
			
		||||
                const ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - display_pos.x, pcmd->ClipRect.y - display_pos.y, pcmd->ClipRect.z - display_pos.x, pcmd->ClipRect.w - display_pos.y);
 | 
			
		||||
                const D3D10_RECT clip_rect_dx = { (LONG)clip_rect.x, (LONG)clip_rect.y, (LONG)clip_rect.z, (LONG)clip_rect.w };
 | 
			
		||||
                ctx->RSSetScissorRects(1, &clip_rect_dx);
 | 
			
		||||
                const D3D10_RECT r = { (LONG)(pcmd->ClipRect.x - pos.x), (LONG)(pcmd->ClipRect.y - pos.y), (LONG)(pcmd->ClipRect.z - pos.x), (LONG)(pcmd->ClipRect.w - pos.y)};
 | 
			
		||||
                ctx->RSSetScissorRects(1, &r);
 | 
			
		||||
 | 
			
		||||
                // Bind texture, Draw
 | 
			
		||||
                ctx->PSSetShaderResources(0, 1, (ID3D10ShaderResourceView**)&pcmd->TextureId);
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,8 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-XX-XX: DirectX11: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications).
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_dx11.cpp/.h away from the old combined DX11+Win32 example.
 | 
			
		||||
//  2018-06-08: DirectX11: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX11_RenderDrawData() in the .h file so you can call it yourself.
 | 
			
		||||
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
 | 
			
		||||
//  2016-05-07: DirectX11: Disabling depth-write.
 | 
			
		||||
@@ -47,7 +48,7 @@ static int                      g_VertexBufferSize = 5000, g_IndexBufferSize = 1
 | 
			
		||||
 | 
			
		||||
struct VERTEX_CONSTANT_BUFFER
 | 
			
		||||
{
 | 
			
		||||
    float        mvp[4][4];
 | 
			
		||||
    float   mvp[4][4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Forward Declarations
 | 
			
		||||
@@ -109,7 +110,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    ctx->Unmap(g_pIB, 0);
 | 
			
		||||
 | 
			
		||||
    // Setup orthographic projection matrix into our constant buffer
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps.
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    {
 | 
			
		||||
        D3D11_MAPPED_SUBRESOURCE mapped_resource;
 | 
			
		||||
        if (ctx->Map(g_pVertexConstantBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mapped_resource) != S_OK)
 | 
			
		||||
@@ -203,7 +204,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    // Render command lists
 | 
			
		||||
    int vtx_offset = 0;
 | 
			
		||||
    int idx_offset = 0;
 | 
			
		||||
    ImVec2 display_pos = draw_data->DisplayPos;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -218,9 +219,8 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // Apply scissor/clipping rectangle
 | 
			
		||||
                const ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - display_pos.x, pcmd->ClipRect.y - display_pos.y, pcmd->ClipRect.z - display_pos.x, pcmd->ClipRect.w - display_pos.y);
 | 
			
		||||
                const D3D11_RECT clip_rect_dx = { (LONG)clip_rect.x, (LONG)clip_rect.y, (LONG)clip_rect.z, (LONG)clip_rect.w };
 | 
			
		||||
                ctx->RSSetScissorRects(1, &clip_rect_dx);
 | 
			
		||||
                const D3D11_RECT r = { (LONG)(pcmd->ClipRect.x - pos.x), (LONG)(pcmd->ClipRect.y - pos.y), (LONG)(pcmd->ClipRect.z - pos.x), (LONG)(pcmd->ClipRect.w - pos.y) };
 | 
			
		||||
                ctx->RSSetScissorRects(1, &r);
 | 
			
		||||
 | 
			
		||||
                // Bind texture, Draw
 | 
			
		||||
                ctx->PSSetShaderResources(0, 1, (ID3D11ShaderResourceView**)&pcmd->TextureId);
 | 
			
		||||
@@ -494,6 +494,7 @@ bool    ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_co
 | 
			
		||||
    io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports;    // We can create multi-viewports on the Renderer side (optional)
 | 
			
		||||
    if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
 | 
			
		||||
        ImGui_ImplDX11_InitPlatformInterface();
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_dx12.cpp/.h away from the old combined DX12+Win32 example.
 | 
			
		||||
//  2018-06-08: DirectX12: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle (to ease support for future multi-viewport).
 | 
			
		||||
//  2018-02-22: Merged into master with all Win32 code synchronized to other examples.
 | 
			
		||||
 | 
			
		||||
#include "imgui.h"
 | 
			
		||||
@@ -46,7 +48,7 @@ static UINT                         g_frameIndex = UINT_MAX;
 | 
			
		||||
 | 
			
		||||
struct VERTEX_CONSTANT_BUFFER
 | 
			
		||||
{
 | 
			
		||||
    float        mvp[4][4];
 | 
			
		||||
    float   mvp[4][4];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Forward Declarations
 | 
			
		||||
@@ -57,7 +59,7 @@ static void ImGui_ImplDX12_ShutdownPlatformInterface();
 | 
			
		||||
// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop)
 | 
			
		||||
void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
{
 | 
			
		||||
    // NOTE: I'm assuming that this only get's called once per frame!
 | 
			
		||||
    // FIXME: I'm assuming that this only gets called once per frame!
 | 
			
		||||
    // If not, we can't just re-allocate the IB or VB, we'll have to do a proper allocator.
 | 
			
		||||
    g_frameIndex = g_frameIndex + 1;
 | 
			
		||||
    FrameResources* frameResources = &g_pFrameResources[g_frameIndex % g_numFramesInFlight];
 | 
			
		||||
@@ -88,8 +90,7 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
        desc.SampleDesc.Count = 1;
 | 
			
		||||
        desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
 | 
			
		||||
        desc.Flags = D3D12_RESOURCE_FLAG_NONE;
 | 
			
		||||
        if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE,
 | 
			
		||||
            &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&g_pVB)) < 0)
 | 
			
		||||
        if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&g_pVB)) < 0)
 | 
			
		||||
            return;
 | 
			
		||||
        frameResources->VB = g_pVB;
 | 
			
		||||
        frameResources->VertexBufferSize = g_VertexBufferSize;
 | 
			
		||||
@@ -114,8 +115,7 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
        desc.SampleDesc.Count = 1;
 | 
			
		||||
        desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;
 | 
			
		||||
        desc.Flags = D3D12_RESOURCE_FLAG_NONE;
 | 
			
		||||
        if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE,
 | 
			
		||||
            &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&g_pIB)) < 0)
 | 
			
		||||
        if (g_pd3dDevice->CreateCommittedResource(&props, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_GENERIC_READ, NULL, IID_PPV_ARGS(&g_pIB)) < 0)
 | 
			
		||||
            return;
 | 
			
		||||
        frameResources->IB = g_pIB;
 | 
			
		||||
        frameResources->IndexBufferSize = g_IndexBufferSize;
 | 
			
		||||
@@ -143,13 +143,14 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    g_pIB->Unmap(0, &range);
 | 
			
		||||
 | 
			
		||||
    // Setup orthographic projection matrix into our constant buffer
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    VERTEX_CONSTANT_BUFFER vertex_constant_buffer;
 | 
			
		||||
    {
 | 
			
		||||
        VERTEX_CONSTANT_BUFFER* constant_buffer = &vertex_constant_buffer;
 | 
			
		||||
        float L = 0.0f;
 | 
			
		||||
        float R = ImGui::GetIO().DisplaySize.x;
 | 
			
		||||
        float B = ImGui::GetIO().DisplaySize.y;
 | 
			
		||||
        float T = 0.0f;
 | 
			
		||||
        float L = draw_data->DisplayPos.x;
 | 
			
		||||
        float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x;
 | 
			
		||||
        float T = draw_data->DisplayPos.y;
 | 
			
		||||
        float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y;
 | 
			
		||||
        float mvp[4][4] =
 | 
			
		||||
        {
 | 
			
		||||
            { 2.0f/(R-L),   0.0f,           0.0f,       0.0f },
 | 
			
		||||
@@ -163,8 +164,8 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    // Setup viewport
 | 
			
		||||
    D3D12_VIEWPORT vp;
 | 
			
		||||
    memset(&vp, 0, sizeof(D3D12_VIEWPORT));
 | 
			
		||||
    vp.Width = ImGui::GetIO().DisplaySize.x;
 | 
			
		||||
    vp.Height = ImGui::GetIO().DisplaySize.y;
 | 
			
		||||
    vp.Width = draw_data->DisplaySize.x;
 | 
			
		||||
    vp.Height = draw_data->DisplaySize.y;
 | 
			
		||||
    vp.MinDepth = 0.0f;
 | 
			
		||||
    vp.MaxDepth = 1.0f;
 | 
			
		||||
    vp.TopLeftX = vp.TopLeftY = 0.0f;
 | 
			
		||||
@@ -197,6 +198,7 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    // Render command lists
 | 
			
		||||
    int vtx_offset = 0;
 | 
			
		||||
    int idx_offset = 0;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -209,7 +211,7 @@ void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                const D3D12_RECT r = { (LONG)pcmd->ClipRect.x, (LONG)pcmd->ClipRect.y, (LONG)pcmd->ClipRect.z, (LONG)pcmd->ClipRect.w };
 | 
			
		||||
                const D3D12_RECT r = { (LONG)(pcmd->ClipRect.x - pos.x), (LONG)(pcmd->ClipRect.y - pos.y), (LONG)(pcmd->ClipRect.z - pos.x), (LONG)(pcmd->ClipRect.w - pos.y) };
 | 
			
		||||
                ctx->SetGraphicsRootDescriptorTable(1, *(D3D12_GPU_DESCRIPTOR_HANDLE*)&pcmd->TextureId);
 | 
			
		||||
                ctx->RSSetScissorRects(1, &r);
 | 
			
		||||
                ctx->DrawIndexedInstanced(pcmd->ElemCount, 1, idx_offset, vtx_offset, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG 
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_dx9.cpp/.h away from the old combined DX9+Win32 example.
 | 
			
		||||
//  2018-06-08: DirectX9: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-05-07: Render: Saving/restoring Transform because they don't seem to be included in the StateBlock. Setting shading mode to Gouraud.
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplDX9_RenderDrawData() in the .h file so you can call it yourself.
 | 
			
		||||
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
 | 
			
		||||
@@ -139,6 +141,7 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
 | 
			
		||||
 | 
			
		||||
    // Setup orthographic projection matrix
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    // Being agnostic of whether <d3dx9.h> or <DirectXMath.h> can be used, we aren't relying on D3DXMatrixIdentity()/D3DXMatrixOrthoOffCenterLH() or DirectX::XMMatrixIdentity()/DirectX::XMMatrixOrthographicOffCenterLH()
 | 
			
		||||
    {
 | 
			
		||||
        float L = draw_data->DisplayPos.x + 0.5f;
 | 
			
		||||
@@ -161,6 +164,7 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    // Render command lists
 | 
			
		||||
    int vtx_offset = 0;
 | 
			
		||||
    int idx_offset = 0;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -173,7 +177,7 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                const RECT r = { (LONG)pcmd->ClipRect.x, (LONG)pcmd->ClipRect.y, (LONG)pcmd->ClipRect.z, (LONG)pcmd->ClipRect.w };
 | 
			
		||||
                const RECT r = { (LONG)(pcmd->ClipRect.x - pos.x), (LONG)(pcmd->ClipRect.y - pos.y), (LONG)(pcmd->ClipRect.z - pos.x), (LONG)(pcmd->ClipRect.w - pos.y) };
 | 
			
		||||
                g_pd3dDevice->SetTexture(0, (LPDIRECT3DTEXTURE9)pcmd->TextureId);
 | 
			
		||||
                g_pd3dDevice->SetScissorRect(&r);
 | 
			
		||||
                g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, vtx_offset, 0, (UINT)cmd_list->VtxBuffer.Size, idx_offset, pcmd->ElemCount/3);
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,7 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_glfw.cpp/.h away from the old combined GLFW+OpenGL/Vulkan examples.
 | 
			
		||||
//  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag.
 | 
			
		||||
//  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value, passed to glfwSetCursor()).
 | 
			
		||||
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,8 @@
 | 
			
		||||
// CHANGELOG 
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications).
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_opengl2.cpp/.h away from the old combined GLFW/SDL+OpenGL2 examples.
 | 
			
		||||
//  2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplGlfwGL2_RenderDrawData() in the .h file so you can call it yourself.
 | 
			
		||||
//  2017-09-01: OpenGL: Save and restore current polygon mode.
 | 
			
		||||
//  2016-09-10: OpenGL: Uploading font texture as RGBA32 to increase compatibility with users shaders (not ideal).
 | 
			
		||||
@@ -101,7 +102,7 @@ void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound
 | 
			
		||||
 | 
			
		||||
    // Setup viewport, orthographic projection matrix
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps.
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
			
		||||
    glMatrixMode(GL_PROJECTION);
 | 
			
		||||
    glPushMatrix();
 | 
			
		||||
@@ -112,7 +113,7 @@ void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    glLoadIdentity();
 | 
			
		||||
 | 
			
		||||
    // Render command lists
 | 
			
		||||
    ImVec2 display_pos = draw_data->DisplayPos;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -132,7 +133,7 @@ void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - display_pos.x, pcmd->ClipRect.y - display_pos.y, pcmd->ClipRect.z - display_pos.x, pcmd->ClipRect.w - display_pos.y);
 | 
			
		||||
                ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - pos.x, pcmd->ClipRect.y - pos.y, pcmd->ClipRect.z - pos.x, pcmd->ClipRect.w - pos.y);
 | 
			
		||||
                if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
 | 
			
		||||
                {
 | 
			
		||||
                    // Apply scissor/clipping rectangle
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,8 @@
 | 
			
		||||
// CHANGELOG 
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-XX-XX: OpenGL: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications).
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples.
 | 
			
		||||
//  2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state.
 | 
			
		||||
//  2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer.
 | 
			
		||||
//  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150".
 | 
			
		||||
@@ -57,6 +58,7 @@ bool    ImGui_ImplOpenGL3_Init(const char* glsl_version)
 | 
			
		||||
    io.BackendFlags |= ImGuiBackendFlags_RendererHasViewports;    // We can create multi-viewports on the Renderer side (optional)
 | 
			
		||||
    if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
 | 
			
		||||
        ImGui_ImplOpenGL3_InitPlatformInterface();
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -117,7 +119,7 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 | 
			
		||||
 | 
			
		||||
    // Setup viewport, orthographic projection matrix
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps.
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
 | 
			
		||||
    float L = draw_data->DisplayPos.x;
 | 
			
		||||
    float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x;
 | 
			
		||||
@@ -149,7 +151,7 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    glVertexAttribPointer(g_AttribLocationColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col));
 | 
			
		||||
 | 
			
		||||
    // Draw
 | 
			
		||||
    ImVec2 display_pos = draw_data->DisplayPos;
 | 
			
		||||
    ImVec2 pos = draw_data->DisplayPos;
 | 
			
		||||
    for (int n = 0; n < draw_data->CmdListsCount; n++)
 | 
			
		||||
    {
 | 
			
		||||
        const ImDrawList* cmd_list = draw_data->CmdLists[n];
 | 
			
		||||
@@ -171,7 +173,7 @@ void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - display_pos.x, pcmd->ClipRect.y - display_pos.y, pcmd->ClipRect.z - display_pos.x, pcmd->ClipRect.w - display_pos.y);
 | 
			
		||||
                ImVec4 clip_rect = ImVec4(pcmd->ClipRect.x - pos.x, pcmd->ClipRect.y - pos.y, pcmd->ClipRect.z - pos.x, pcmd->ClipRect.w - pos.y);
 | 
			
		||||
                if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
 | 
			
		||||
                {
 | 
			
		||||
                    // Apply scissor/clipping rectangle
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@
 | 
			
		||||
 | 
			
		||||
// Implemented features:
 | 
			
		||||
//  [X] Multi-viewport windows (when ImGuiConfigFlags_ViewportsEnable is enabled).
 | 
			
		||||
// Missing features:
 | 
			
		||||
//  [ ] SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME.
 | 
			
		||||
 | 
			
		||||
// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
 | 
			
		||||
// If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown().
 | 
			
		||||
@@ -13,7 +15,8 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-XX-XX: Misc: ImGui_ImplSDL2_Init() now takes a SDL_GLContext parameter. 
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_sdl2.cpp/.h away from the old combined SDL2+OpenGL/Vulkan examples.
 | 
			
		||||
//  2018-06-08: Misc: Renamed ImGui_ImplSDL2_Init() to ImGui_ImplSDL2_InitForOpenGL() which now takes the SDL_GLContext parameter. 
 | 
			
		||||
//  2018-05-09: Misc: Fixed clipboard paste memory leak (we didn't call SDL_FreeMemory on the data returned by SDL_GetClipboardText).
 | 
			
		||||
//  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag.
 | 
			
		||||
//  2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value.
 | 
			
		||||
@@ -130,7 +133,7 @@ bool ImGui_ImplSDL2_ProcessEvent(SDL_Event* event)
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool    ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context)
 | 
			
		||||
static bool    ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context)
 | 
			
		||||
{
 | 
			
		||||
    g_Window = window;
 | 
			
		||||
 | 
			
		||||
@@ -191,6 +194,20 @@ bool    ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context)
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context)
 | 
			
		||||
{
 | 
			
		||||
    (void)sdl_gl_context; // Viewport branch will need this.
 | 
			
		||||
    return ImGui_ImplSDL2_Init(window, sdl_gl_context);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window)
 | 
			
		||||
{
 | 
			
		||||
    #if !SDL_HAS_VULKAN
 | 
			
		||||
    IM_ASSERT(0 && "Unsupported");
 | 
			
		||||
    #endif
 | 
			
		||||
    return ImGui_ImplSDL2_Init(window, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui_ImplSDL2_Shutdown()
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplSDL2_ShutdownPlatformInterface();
 | 
			
		||||
@@ -237,8 +254,8 @@ static void ImGui_ImplSDL2_UpdateMousePosAndButtons()
 | 
			
		||||
    SDL_Window* focused_window = SDL_GetKeyboardFocus();
 | 
			
		||||
    if (focused_window)
 | 
			
		||||
    {
 | 
			
		||||
        // SDL_GetMouseState() gives me mouse position seemingly based on the last window entered/focused(?)
 | 
			
		||||
        // The creation of new window and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally.
 | 
			
		||||
        // SDL_GetMouseState() gives mouse position seemingly based on the last window entered/focused(?)
 | 
			
		||||
        // The creation of new windows at runtime and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally.
 | 
			
		||||
        int wx, wy;
 | 
			
		||||
        SDL_GetWindowPosition(focused_window, &wx, &wy);
 | 
			
		||||
        SDL_GetGlobalMouseState(&mx, &my);
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@
 | 
			
		||||
 | 
			
		||||
// Implemented features:
 | 
			
		||||
//  [X] Multi-viewport windows (when ImGuiConfigFlags_ViewportsEnable is enabled).
 | 
			
		||||
// Missing features:
 | 
			
		||||
//  [ ] SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME.
 | 
			
		||||
 | 
			
		||||
// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
 | 
			
		||||
// If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown().
 | 
			
		||||
@@ -13,7 +15,8 @@
 | 
			
		||||
struct SDL_Window;
 | 
			
		||||
typedef union SDL_Event SDL_Event;
 | 
			
		||||
 | 
			
		||||
IMGUI_API bool      ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context);
 | 
			
		||||
IMGUI_API bool      ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context);
 | 
			
		||||
IMGUI_API bool      ImGui_ImplSDL2_InitForVulkan(SDL_Window* window);
 | 
			
		||||
IMGUI_API void      ImGui_ImplSDL2_Shutdown();
 | 
			
		||||
IMGUI_API void      ImGui_ImplSDL2_NewFrame(SDL_Window* window);
 | 
			
		||||
IMGUI_API bool      ImGui_ImplSDL2_ProcessEvent(SDL_Event* event);
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
 | 
			
		||||
// Missing features:
 | 
			
		||||
//  [ ] User texture binding. Changes of ImTextureID aren't supported by this binding! See https://github.com/ocornut/imgui/pull/914
 | 
			
		||||
//  [ ] Multi-viewport rendering (when ImGuiConfigFlags_ViewportsEnable is enabled). WORK-IN-PROGRESS.
 | 
			
		||||
 | 
			
		||||
// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
 | 
			
		||||
// If you use this binding you'll need to call 5 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXX_CreateFontsTexture(), ImGui_ImplXXXX_NewFrame(), ImGui_ImplXXXX_Render() and ImGui_ImplXXXX_Shutdown().
 | 
			
		||||
@@ -12,10 +11,10 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_vulkan.cpp/.h away from the old combined GLFW+Vulkan example.
 | 
			
		||||
//  2018-06-08: Vulkan: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
 | 
			
		||||
//  2018-03-03: Vulkan: Various refactor, created a couple of ImGui_ImplVulkanH_XXX helper that the example can use and that viewport support will use.
 | 
			
		||||
//  2018-03-01: Vulkan: Renamed ImGui_ImplVulkan_Init_Info to ImGui_ImplVulkan_InitInfo and fields to match more closely Vulkan terminology.
 | 
			
		||||
//  2018-02-18: Vulkan: Offset projection matrix and clipping rectangle by draw_data->DisplayPos (which will be non-zero for multi-viewport applications).
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback, ImGui_ImplVulkan_Render() calls ImGui_ImplVulkan_RenderDrawData() itself.
 | 
			
		||||
//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
 | 
			
		||||
//  2017-05-15: Vulkan: Fix scissor offset being negative. Fix new Vulkan validation warnings. Set required depth member for buffer image copy.
 | 
			
		||||
@@ -39,13 +38,13 @@ static VkDescriptorPool             g_DescriptorPool = VK_NULL_HANDLE;
 | 
			
		||||
static VkRenderPass                 g_RenderPass = VK_NULL_HANDLE;
 | 
			
		||||
static void                         (*g_CheckVkResultFn)(VkResult err) = NULL;
 | 
			
		||||
 | 
			
		||||
static VkDeviceSize           g_BufferMemoryAlignment = 256;
 | 
			
		||||
static VkPipelineCreateFlags  g_PipelineCreateFlags = 0;
 | 
			
		||||
static VkDeviceSize                 g_BufferMemoryAlignment = 256;
 | 
			
		||||
static VkPipelineCreateFlags        g_PipelineCreateFlags = 0;
 | 
			
		||||
 | 
			
		||||
static VkDescriptorSetLayout  g_DescriptorSetLayout = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipelineLayout       g_PipelineLayout = VK_NULL_HANDLE;
 | 
			
		||||
static VkDescriptorSet        g_DescriptorSet = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipeline             g_Pipeline = VK_NULL_HANDLE;
 | 
			
		||||
static VkDescriptorSetLayout        g_DescriptorSetLayout = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipelineLayout             g_PipelineLayout = VK_NULL_HANDLE;
 | 
			
		||||
static VkDescriptorSet              g_DescriptorSet = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipeline                   g_Pipeline = VK_NULL_HANDLE;
 | 
			
		||||
 | 
			
		||||
// Frame data
 | 
			
		||||
struct FrameDataForRender
 | 
			
		||||
@@ -273,7 +272,7 @@ void ImGui_ImplVulkan_RenderDrawData(VkCommandBuffer command_buffer, ImDrawData*
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Setup scale and translation:
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is typically (0,0) for single viewport apps.
 | 
			
		||||
    // Our visible imgui space lies from draw_data->DisplayPps (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayMin is (0,0) for single viewport apps.
 | 
			
		||||
    {
 | 
			
		||||
        float scale[2];
 | 
			
		||||
        scale[0] = 2.0f / draw_data->DisplaySize.x;
 | 
			
		||||
@@ -740,7 +739,7 @@ void ImGui_ImplVulkan_NewFrame()
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h> // malloc
 | 
			
		||||
 | 
			
		||||
ImGui_ImplVulkan_FrameData::ImGui_ImplVulkan_FrameData()
 | 
			
		||||
ImGui_ImplVulkanH_FrameData::ImGui_ImplVulkanH_FrameData()
 | 
			
		||||
{
 | 
			
		||||
    BackbufferIndex = 0;
 | 
			
		||||
    CommandPool = VK_NULL_HANDLE;
 | 
			
		||||
@@ -750,7 +749,7 @@ ImGui_ImplVulkan_FrameData::ImGui_ImplVulkan_FrameData()
 | 
			
		||||
    RenderCompleteSemaphore = VK_NULL_HANDLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ImGui_ImplVulkan_WindowData::ImGui_ImplVulkan_WindowData()
 | 
			
		||||
ImGui_ImplVulkanH_WindowData::ImGui_ImplVulkanH_WindowData()
 | 
			
		||||
{
 | 
			
		||||
    Width = Height = 0;
 | 
			
		||||
    Swapchain = VK_NULL_HANDLE;
 | 
			
		||||
@@ -830,7 +829,7 @@ VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_d
 | 
			
		||||
    return VK_PRESENT_MODE_FIFO_KHR; // Always available
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator)
 | 
			
		||||
void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator)
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(physical_device != NULL && device != NULL);
 | 
			
		||||
    (void)allocator;
 | 
			
		||||
@@ -839,7 +838,7 @@ void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_
 | 
			
		||||
    VkResult err;
 | 
			
		||||
    for (int i = 0; i < IMGUI_VK_QUEUED_FRAMES; i++)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui_ImplVulkan_FrameData* fd = &wd->Frames[i];
 | 
			
		||||
        ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[i];
 | 
			
		||||
        {
 | 
			
		||||
            VkCommandPoolCreateInfo info = {};
 | 
			
		||||
            info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
 | 
			
		||||
@@ -887,7 +886,7 @@ int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_m
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h)
 | 
			
		||||
void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t min_image_count = 2;	// FIXME: this should become a function parameter
 | 
			
		||||
 | 
			
		||||
@@ -1033,14 +1032,14 @@ void ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator)
 | 
			
		||||
void ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator)
 | 
			
		||||
{
 | 
			
		||||
    vkDeviceWaitIdle(device); // FIXME: We could wait on the Queue if we had the queue in wd-> (otherwise VulkanH functions can't use globals)
 | 
			
		||||
    //vkQueueWaitIdle(g_Queue);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < IMGUI_VK_QUEUED_FRAMES; i++)
 | 
			
		||||
    {
 | 
			
		||||
        ImGui_ImplVulkan_FrameData* fd = &wd->Frames[i];
 | 
			
		||||
        ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[i];
 | 
			
		||||
        vkDestroyFence(device, fd->Fence, allocator);
 | 
			
		||||
        vkFreeCommandBuffers(device, fd->CommandPool, 1, &fd->CommandBuffer);
 | 
			
		||||
        vkDestroyCommandPool(device, fd->CommandPool, allocator);
 | 
			
		||||
@@ -1055,7 +1054,7 @@ void ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, I
 | 
			
		||||
    vkDestroyRenderPass(device, wd->RenderPass, allocator);
 | 
			
		||||
    vkDestroySwapchainKHR(device, wd->Swapchain, allocator);
 | 
			
		||||
    vkDestroySurfaceKHR(instance, wd->Surface, allocator);
 | 
			
		||||
    *wd = ImGui_ImplVulkan_WindowData();
 | 
			
		||||
    *wd = ImGui_ImplVulkanH_WindowData();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------------------------------------------
 | 
			
		||||
@@ -1068,7 +1067,7 @@ void ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, I
 | 
			
		||||
 | 
			
		||||
struct ImGuiViewportDataVulkan
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplVulkan_WindowData WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData WindowData;
 | 
			
		||||
 | 
			
		||||
    ImGuiViewportDataVulkan() { }
 | 
			
		||||
    ~ImGuiViewportDataVulkan() { }
 | 
			
		||||
@@ -1078,7 +1077,7 @@ static void ImGui_ImplVulkan_CreateWindow(ImGuiViewport* viewport)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiViewportDataVulkan* data = IM_NEW(ImGuiViewportDataVulkan)();
 | 
			
		||||
    viewport->RendererUserData = data;
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &data->WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &data->WindowData;
 | 
			
		||||
 | 
			
		||||
    // Create surface
 | 
			
		||||
    ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
 | 
			
		||||
@@ -1132,11 +1131,11 @@ static void ImGui_ImplVulkan_SetWindowSize(ImGuiViewport* viewport, ImVec2 size)
 | 
			
		||||
static void ImGui_ImplVulkan_RenderWindow(ImGuiViewport* viewport, void*)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiViewportDataVulkan* data = (ImGuiViewportDataVulkan*)viewport->RendererUserData;
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &data->WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &data->WindowData;
 | 
			
		||||
    VkResult err;
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
        ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
        for (;;)
 | 
			
		||||
        {
 | 
			
		||||
            err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, 100);
 | 
			
		||||
@@ -1176,7 +1175,7 @@ static void ImGui_ImplVulkan_RenderWindow(ImGuiViewport* viewport, void*)
 | 
			
		||||
    ImGui_ImplVulkan_RenderDrawData(wd->Frames[wd->FrameIndex].CommandBuffer, viewport->DrawData);
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
        ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
        ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
        vkCmdEndRenderPass(fd->CommandBuffer);
 | 
			
		||||
        {
 | 
			
		||||
            VkPipelineStageFlags wait_stage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
 | 
			
		||||
@@ -1203,12 +1202,12 @@ static void ImGui_ImplVulkan_RenderWindow(ImGuiViewport* viewport, void*)
 | 
			
		||||
static void ImGui_ImplVulkan_SwapBuffers(ImGuiViewport* viewport, void*)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiViewportDataVulkan* data = (ImGuiViewportDataVulkan*)viewport->RendererUserData;
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &data->WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &data->WindowData;
 | 
			
		||||
 | 
			
		||||
    VkResult err;
 | 
			
		||||
    uint32_t PresentIndex = wd->FrameIndex;
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplVulkan_FrameData* fd = &wd->Frames[PresentIndex];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[PresentIndex];
 | 
			
		||||
    VkPresentInfoKHR info = {};
 | 
			
		||||
    info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
 | 
			
		||||
    info.waitSemaphoreCount = 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -47,17 +47,17 @@ IMGUI_API bool        ImGui_ImplVulkan_CreateDeviceObjects();
 | 
			
		||||
// NB: Those functions do NOT use any of the state used/affected by the regular ImGui_ImplVulkan_XXX functions.
 | 
			
		||||
//-------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
struct ImGui_ImplVulkan_FrameData;
 | 
			
		||||
struct ImGui_ImplVulkan_WindowData;
 | 
			
		||||
struct ImGui_ImplVulkanH_FrameData;
 | 
			
		||||
struct ImGui_ImplVulkanH_WindowData;
 | 
			
		||||
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator);
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h);
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkan_WindowData* wd, const VkAllocationCallbacks* allocator);
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator);
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_CreateWindowDataSwapChainAndFramebuffer(VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator, int w, int h);
 | 
			
		||||
IMGUI_API void                  ImGui_ImplVulkanH_DestroyWindowData(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator);
 | 
			
		||||
IMGUI_API VkSurfaceFormatKHR    ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space);
 | 
			
		||||
IMGUI_API VkPresentModeKHR      ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count);
 | 
			
		||||
IMGUI_API int                   ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode);
 | 
			
		||||
 | 
			
		||||
struct ImGui_ImplVulkan_FrameData
 | 
			
		||||
struct ImGui_ImplVulkanH_FrameData
 | 
			
		||||
{
 | 
			
		||||
    uint32_t            BackbufferIndex;    // keep track of recently rendered swapchain frame indices
 | 
			
		||||
    VkCommandPool       CommandPool;
 | 
			
		||||
@@ -66,10 +66,10 @@ struct ImGui_ImplVulkan_FrameData
 | 
			
		||||
    VkSemaphore         ImageAcquiredSemaphore;
 | 
			
		||||
    VkSemaphore         RenderCompleteSemaphore;
 | 
			
		||||
 | 
			
		||||
    IMGUI_API ImGui_ImplVulkan_FrameData();
 | 
			
		||||
    IMGUI_API ImGui_ImplVulkanH_FrameData();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct ImGui_ImplVulkan_WindowData
 | 
			
		||||
struct ImGui_ImplVulkanH_WindowData
 | 
			
		||||
{
 | 
			
		||||
    int                 Width;
 | 
			
		||||
    int                 Height;
 | 
			
		||||
@@ -85,8 +85,8 @@ struct ImGui_ImplVulkan_WindowData
 | 
			
		||||
    VkImageView         BackBufferView[16];
 | 
			
		||||
    VkFramebuffer       Framebuffer[16];
 | 
			
		||||
    uint32_t            FrameIndex;
 | 
			
		||||
    ImGui_ImplVulkan_FrameData Frames[IMGUI_VK_QUEUED_FRAMES];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData Frames[IMGUI_VK_QUEUED_FRAMES];
 | 
			
		||||
 | 
			
		||||
    IMGUI_API ImGui_ImplVulkan_WindowData();
 | 
			
		||||
    IMGUI_API ImGui_ImplVulkanH_WindowData();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2018-06-08: Misc: Extracted imgui_impl_win32.cpp/.h away from the old combined DX9/DX10/DX11/DX12 examples.
 | 
			
		||||
//  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors and ImGuiBackendFlags_HasSetMousePos flags + honor ImGuiConfigFlags_NoMouseCursorChange flag.
 | 
			
		||||
//  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value and WM_SETCURSOR message handling).
 | 
			
		||||
//  2018-02-06: Inputs: Added mapping for ImGuiKey_Space.
 | 
			
		||||
@@ -129,8 +130,6 @@ static bool ImGui_ImplWin32_UpdateMouseCursor()
 | 
			
		||||
//                                 io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor.
 | 
			
		||||
//   - io.MousePosViewport ....... viewport which mouse position is based from (generally the focused/active/capturing viewport)
 | 
			
		||||
//   - io.MouseHoveredViewport ... [optional] viewport which mouse is hovering, with _very_ specific/strict conditions (Read comments next to io.MouseHoveredViewport. This is _NOT_ easy to provide in many high-level engine because of how we handle the ImGuiViewportFlags_NoInputs flag)
 | 
			
		||||
// This function overwrite the value of io.MousePos normally updated by the WM_MOUSEMOVE handler. 
 | 
			
		||||
// We keep the WM_MOUSEMOVE handling code so that WndProc function can be copied as-in in applications which do not need multi-viewport support.
 | 
			
		||||
static void ImGui_ImplWin32_UpdateMousePos()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
@@ -257,10 +256,6 @@ IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wPa
 | 
			
		||||
    case WM_MOUSEHWHEEL:
 | 
			
		||||
        io.MouseWheelH += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f;
 | 
			
		||||
        return 0;
 | 
			
		||||
    case WM_MOUSEMOVE:
 | 
			
		||||
        io.MousePos.x = (signed short)(lParam);                 // Note: this is used for single-viewport support, but in reality the code in ImGui_ImplWin32_UpdateMousePos() overwrite this.
 | 
			
		||||
        io.MousePos.y = (signed short)(lParam >> 16);
 | 
			
		||||
        return 0;
 | 
			
		||||
    case WM_KEYDOWN:
 | 
			
		||||
    case WM_SYSKEYDOWN:
 | 
			
		||||
        if (wParam < 256)
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,8 @@ int main(int, char**)
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;   // Enable Gamepad Controls
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplGlfw_InitForOpenGL(window, true);
 | 
			
		||||
    ImGui_ImplOpenGL2_Init();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ int main(int, char**)
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO(); (void)io;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplSDL2_Init(window, gl_context);
 | 
			
		||||
    ImGui_ImplSDL2_InitForOpenGL(window, gl_context);
 | 
			
		||||
    ImGui_ImplOpenGL2_Init();
 | 
			
		||||
 | 
			
		||||
    // Setup style
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ int main(int, char**)
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplSDL2_Init(window, gl_context);
 | 
			
		||||
    ImGui_ImplSDL2_InitForOpenGL(window, gl_context);
 | 
			
		||||
    ImGui_ImplOpenGL3_Init();
 | 
			
		||||
 | 
			
		||||
    // Setup style
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,13 @@
 | 
			
		||||
#include "imgui.h"
 | 
			
		||||
#include "imgui_impl_sdl2.h"
 | 
			
		||||
#include "imgui_impl_vulkan.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdio.h>          // printf, fprintf
 | 
			
		||||
#include <stdlib.h>         // abort
 | 
			
		||||
#include <SDL.h>
 | 
			
		||||
#include <SDL_vulkan.h>
 | 
			
		||||
#include <vulkan/vulkan.h>
 | 
			
		||||
 | 
			
		||||
#define IMGUI_UNLIMITED_FRAME_RATE
 | 
			
		||||
//#define IMGUI_UNLIMITED_FRAME_RATE
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
#define IMGUI_VULKAN_DEBUG_REPORT
 | 
			
		||||
#endif
 | 
			
		||||
@@ -24,7 +25,7 @@ static VkDebugReportCallbackEXT     g_DebugReport = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipelineCache              g_PipelineCache = VK_NULL_HANDLE;
 | 
			
		||||
static VkDescriptorPool             g_DescriptorPool = VK_NULL_HANDLE;
 | 
			
		||||
 | 
			
		||||
static ImGui_ImplVulkan_WindowData  g_WindowData;
 | 
			
		||||
static ImGui_ImplVulkanH_WindowData g_WindowData;
 | 
			
		||||
 | 
			
		||||
static void check_vk_result(VkResult err)
 | 
			
		||||
{
 | 
			
		||||
@@ -172,7 +173,7 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void SetupVulkanWindowData(ImGui_ImplVulkan_WindowData* wd, VkSurfaceKHR surface, int width, int height)
 | 
			
		||||
static void SetupVulkanWindowData(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR surface, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    wd->Surface = surface;
 | 
			
		||||
 | 
			
		||||
@@ -205,7 +206,7 @@ static void SetupVulkanWindowData(ImGui_ImplVulkan_WindowData* wd, VkSurfaceKHR
 | 
			
		||||
 | 
			
		||||
static void CleanupVulkan()
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_DestroyWindowData(g_Instance, g_Device, wd, g_Allocator);
 | 
			
		||||
    vkDestroyDescriptorPool(g_Device, g_DescriptorPool, g_Allocator);
 | 
			
		||||
 | 
			
		||||
@@ -219,7 +220,7 @@ static void CleanupVulkan()
 | 
			
		||||
    vkDestroyInstance(g_Instance, g_Allocator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
 | 
			
		||||
{
 | 
			
		||||
	VkResult err;
 | 
			
		||||
 | 
			
		||||
@@ -227,7 +228,7 @@ static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
	err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
 | 
			
		||||
	check_vk_result(err);
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    {
 | 
			
		||||
		err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);	// wait indefinitely instead of periodically checking
 | 
			
		||||
        check_vk_result(err);
 | 
			
		||||
@@ -280,9 +281,9 @@ static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void FramePresent(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
static void FramePresent(ImGui_ImplVulkanH_WindowData* wd)
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    VkPresentInfoKHR info = {};
 | 
			
		||||
    info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
 | 
			
		||||
    info.waitSemaphoreCount = 1;
 | 
			
		||||
@@ -328,7 +329,7 @@ int main(int, char**)
 | 
			
		||||
    // Create Framebuffers
 | 
			
		||||
    int w, h;
 | 
			
		||||
    SDL_GetWindowSize(window, &w, &h);
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &g_WindowData;
 | 
			
		||||
    SetupVulkanWindowData(wd, surface, w, h);
 | 
			
		||||
 | 
			
		||||
    // Setup ImGui binding
 | 
			
		||||
@@ -339,7 +340,7 @@ int main(int, char**)
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
 | 
			
		||||
    // Setup SDL binding
 | 
			
		||||
    ImGui_ImplSDL2_Init(window, NULL);
 | 
			
		||||
    ImGui_ImplSDL2_InitForVulkan(window);
 | 
			
		||||
 | 
			
		||||
    // Setup Vulkan binding
 | 
			
		||||
    ImGui_ImplVulkan_InitInfo init_info = {};
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
#include "imgui.h"
 | 
			
		||||
#include "imgui_impl_glfw.h"
 | 
			
		||||
#include "imgui_impl_vulkan.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>          // printf, fprintf
 | 
			
		||||
#include <stdlib.h>         // abort
 | 
			
		||||
#define GLFW_INCLUDE_NONE
 | 
			
		||||
@@ -27,7 +26,7 @@ static VkDebugReportCallbackEXT     g_DebugReport = VK_NULL_HANDLE;
 | 
			
		||||
static VkPipelineCache              g_PipelineCache = VK_NULL_HANDLE;
 | 
			
		||||
static VkDescriptorPool             g_DescriptorPool = VK_NULL_HANDLE;
 | 
			
		||||
 | 
			
		||||
static ImGui_ImplVulkan_WindowData  g_WindowData;
 | 
			
		||||
static ImGui_ImplVulkanH_WindowData g_WindowData;
 | 
			
		||||
static bool                         g_ResizeWanted = false;
 | 
			
		||||
static int                          g_ResizeWidth = 0, g_ResizeHeight = 0;
 | 
			
		||||
 | 
			
		||||
@@ -177,7 +176,7 @@ static void SetupVulkan(const char** extensions, uint32_t extensions_count)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void SetupVulkanWindowData(ImGui_ImplVulkan_WindowData* wd, VkSurfaceKHR surface, int width, int height)
 | 
			
		||||
static void SetupVulkanWindowData(ImGui_ImplVulkanH_WindowData* wd, VkSurfaceKHR surface, int width, int height)
 | 
			
		||||
{
 | 
			
		||||
    wd->Surface = surface;
 | 
			
		||||
 | 
			
		||||
@@ -210,7 +209,7 @@ static void SetupVulkanWindowData(ImGui_ImplVulkan_WindowData* wd, VkSurfaceKHR
 | 
			
		||||
 | 
			
		||||
static void CleanupVulkan()
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_DestroyWindowData(g_Instance, g_Device, wd, g_Allocator);
 | 
			
		||||
    vkDestroyDescriptorPool(g_Device, g_DescriptorPool, g_Allocator);
 | 
			
		||||
 | 
			
		||||
@@ -224,7 +223,7 @@ static void CleanupVulkan()
 | 
			
		||||
    vkDestroyInstance(g_Instance, g_Allocator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
static void FrameRender(ImGui_ImplVulkanH_WindowData* wd)
 | 
			
		||||
{
 | 
			
		||||
	VkResult err;
 | 
			
		||||
 | 
			
		||||
@@ -232,7 +231,7 @@ static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
	err = vkAcquireNextImageKHR(g_Device, wd->Swapchain, UINT64_MAX, image_acquired_semaphore, VK_NULL_HANDLE, &wd->FrameIndex);
 | 
			
		||||
	check_vk_result(err);
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    {
 | 
			
		||||
		err = vkWaitForFences(g_Device, 1, &fd->Fence, VK_TRUE, UINT64_MAX);	// wait indefinitely instead of periodically checking
 | 
			
		||||
		check_vk_result(err);
 | 
			
		||||
@@ -285,9 +284,9 @@ static void FrameRender(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void FramePresent(ImGui_ImplVulkan_WindowData* wd)
 | 
			
		||||
static void FramePresent(ImGui_ImplVulkanH_WindowData* wd)
 | 
			
		||||
{
 | 
			
		||||
    ImGui_ImplVulkan_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
    ImGui_ImplVulkanH_FrameData* fd = &wd->Frames[wd->FrameIndex];
 | 
			
		||||
	VkPresentInfoKHR info = {};
 | 
			
		||||
	info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
 | 
			
		||||
	info.waitSemaphoreCount = 1;
 | 
			
		||||
@@ -340,7 +339,7 @@ int main(int, char**)
 | 
			
		||||
    int w, h;
 | 
			
		||||
    glfwGetFramebufferSize(window, &w, &h);
 | 
			
		||||
    glfwSetFramebufferSizeCallback(window, glfw_resize_callback);
 | 
			
		||||
    ImGui_ImplVulkan_WindowData* wd = &g_WindowData;
 | 
			
		||||
    ImGui_ImplVulkanH_WindowData* wd = &g_WindowData;
 | 
			
		||||
    SetupVulkanWindowData(wd, surface, w, h);
 | 
			
		||||
 | 
			
		||||
    // Setup Dear ImGui binding
 | 
			
		||||
@@ -350,6 +349,7 @@ int main(int, char**)
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
 | 
			
		||||
    io.ConfigFlags |= ImGuiConfigFlags_ViewportsNoTaskBarIcons;
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls
 | 
			
		||||
    //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;   // Enable Gamepad Controls
 | 
			
		||||
 | 
			
		||||
    // Setup GLFW binding
 | 
			
		||||
    ImGui_ImplGlfw_InitForVulkan(window, true);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1547,7 +1547,7 @@ typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* c
 | 
			
		||||
struct ImDrawCmd
 | 
			
		||||
{
 | 
			
		||||
    unsigned int    ElemCount;              // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
 | 
			
		||||
    ImVec4          ClipRect;               // Clipping rectangle (x1, y1, x2, y2)
 | 
			
		||||
    ImVec4          ClipRect;               // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
 | 
			
		||||
    ImTextureID     TextureId;              // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
 | 
			
		||||
    ImDrawCallback  UserCallback;           // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
 | 
			
		||||
    void*           UserCallbackData;       // The draw callback code can access this.
 | 
			
		||||
@@ -1708,7 +1708,7 @@ struct ImDrawData
 | 
			
		||||
    int             CmdListsCount;          // Number of ImDrawList* to render
 | 
			
		||||
    int             TotalIdxCount;          // For convenience, sum of all ImDrawList's IdxBuffer.Size
 | 
			
		||||
    int             TotalVtxCount;          // For convenience, sum of all ImDrawList's VtxBuffer.Size
 | 
			
		||||
    ImVec2          DisplayPos;             // Virtual upper-left position of the viewport to render (== ImVec2(0,0) for the main viewport == upper-left of the orthogonal projection matrix to use)
 | 
			
		||||
    ImVec2          DisplayPos;             // Upper-left position of the viewport to render (== upper-left of the orthogonal projection matrix to use)
 | 
			
		||||
    ImVec2          DisplaySize;            // Size of the viewport to render (== io.DisplaySize for the main viewport) (DisplayPos + DisplaySize == lower-right of the orthogonal projection matrix to use)
 | 
			
		||||
 | 
			
		||||
    // Functions
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user