forked from Green-Sky/tomato
Green Sky
84b1bb45b9
8199457a7d9 Version 1.91.0 ec9a4ef487a Clipper: accept that no item have been submitted if in indeterminate Begin(INT_MAX) mode. (#1311, #3823) 1b44e404449 Demo: re-use tree data. Fix property editor vertical alignment. Tweak recent memory allocation monitor. 1f634f1d94e Eaxmples: Android: Fix build failed issue. (#7832) ce3a8d7c79f Demo: MultiSelect: added tree demo. (#6990, #3823, #1861) c2a3d5e47b0 Comments, minor tweaks to ImGuiTextFilter. df387049268 Added SetNextItemStorageID() for tree nodes. (#7553, #6990, #3823, #1131) b847c414372 MultiSelect: BoxSelect: fixed using in frozen table. (#7821, #5143) + added Demo. 249d5caedbe Tables: storing LastFrozenHeight for frozen requests that don't have actual freezing due to zero scrolling. (#7821, #5143) c7b92560977 Selectable: added ImGuiSelectableFlags_Highlight flag to highlight items independently from the hovered state. (#7820) 96460a8a126 InputText: Added '\' and '/' as word seperator. (#7824, #7704) 79e83d65352 Docs: misc update. d42fa46dc6b Misc micro-optimizations related to hot-path of dealing with a large clipped tree. 692bee5f221 Added GetID(int) variant for consistency. (#7111) b3ba6b30952 Added io.ConfigNavSwapGamepadButtons to swap Activate/Cancel (A<>B) buttons, to match the typical "Nintendo/Japanese consoles" button layout when using Gamepad navigation. (#787, #5723) 3f9a90e2a3c Docs: added extraneous link to Getting Started section. b20f62b162e Obsoleted GetContentRegionMax(). 4227402b2fe Internals: removed GetContentRegionMaxAbs() which was only meaningfully used in place of GetContentRegionAvail(). 055b2e80fbe Moved everyone's best friend GetContentRegionAvail() to a more prominent position. aad86b8756b Obsoleted GetWindowContentRegionMin() and GetWindowContentRegionMax(). 55f54fa512f Internals: comment out obsolete g.ActiveIdUsingNavInputMask obsoleted two years ago. (#4921, #4858, #787, #1599, #323) ed356dc1812 MultiSelect: BoxSelect: fixed box-select from void setting nav id multiple times. 237165a9359 MultiSelect: fixed an issue caused by previous commit. a285835ac4a MultiSelect: add internal MultiSelectAddSetAll() helper. 79b77d91c98 MultiSelect: sequential SetRange merging not generally handled by box-select path, useful for others. e3da939b86f Groups, Tables: fixed EndGroup() failing to correctly capture current table occupied size. (#7543) b67b375ae69 Debug Log: fixed incorrect checkbox layout when partially clipped., doesn't parse 64-bits hex value as ImGuiID lookups. 97c6f4047cc CollapsingHeader: left-side outer extend matches right-side one (moved left by one pixel) 1230b4410cd Internals, TreeNode, Selectable: tweak span_all_columns paths for clarity. 4d8c56c8133 Internals, TreeNode: indent all render block into its own scope (aim is to add a is_visible test there later) fe09ebbe0a1 Backends: OpenGL3: Fixed unsupported option warning with apple clang (#7810) 605c8d71101 Demo: Property Editor: using ImGuiChildFlags_NavFlattened now that a bug is fixed. Fixed static analyzer. 97ff9bd3703 Nav: fixed c licking window decorations (e.g. resize borders) from losing focused item when within a child window using ImGuiChildFlags_NavFlattened. c3dca77a197 Demo: rework Property Editor. fd994943c2d Added a comment hinting at how to set IMGUI_API for shared librairies on e.g. Linux, macOS (#7806) da363363219 TabBar, Style: added style option for the size of the Tab-Bar Overline (#7804) eb72b5a8eee Backends: SDL3: Update for API changes: SDL_GetGamepads() memory ownership change. (#7807) f9cda1fa245 Inputs: added SetItemKeyOwner(ImGuiKey key) in public API. (#456, #2637, #2620, #2891, #3370, #3724, #4828, #5108, #5242, #5641) b6e313bc05d MultiSelect: using ImGuiMultiSelectFlags_NoRangeSelect ensure never having to interpolate between two ImGuiSelectionUserData. 168ef39984c Demo: moved menu bar code to its own function. 57eea6746e6 Demo: moved some fields inside a struct. 2546d0a0dbe Demo: moved ExampleTreeNode, ExampleMemberInfo above in the demo file. Tidying up index. d7e605d4309 Merge branch 'features/range_select' 02c31a8dd1f MultiSelect: added Changelog for the feature. Removed IMGUI_HAS_MULTI_SELECT. 2688562fd2d MultiSelect: Better document how TreeNode() is not trivially usable yet. 7814518049e MultiSelect: ImGuiSelectionBasicStorage: optimized for smaller insertion amounts in larger sets + fix caling batch select with same value. 1b635224465 MultiSelect: Box-Select: handle Esc to disable box-select. 2697cfe3546 MultiSelect: Box-Select: uses SetActiveIdUsingAllKeyboardKeys() to avoid nav interference, much like most drag operations. 7d4de84ee3c MultiSelect: added courtesy ImGuiMultiSelectFlags_NavWrapX flag so we can demo this until a nav api is designed. d411c9054ad MultiSelect: minor tidying up. 3f34c83bc6e MultiSelect: added ImGuiMultiSelectFlags_NoAutoClearOnReselect + tweak flags comments. (#7424) 529c73ba218 MultiSelect: Shift+Tab doesn't enable Shift select on landing item. a8a1f295126 MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_BoxSelect -> ImGuiMultiSelectFlags_BoxSelect2d. Which include not assuming one flag imply the other. c52346850d7 MultiSelect: ImGuiSelectionBasicStorage: added PreserveOrder, maintain implicit order data in storage. df664329cb5 MultiSelect: provide RangeDirection to allow selection handler to handler backward shift+click. 3ac367ff41b MultiSelect: ImGuiSelectionBasicStorage: (breaking) rework GetNextSelectedItem() api to avoid ambiguity/failure when user uses a zero id. f472f170540 Demo: Assets Browser: added a way to disable sorting and hide sorting options. c07864f64ab MultiSelect: ImGuiSelectionBasicStorage: move function bodies to cpp file. 2af3b2ac815 MultiSelect: ImGuiSelectionBasicStorage: simplify by removing compacting code (compacting may be opt-in?). e61612a6873 MultiSelect: ImGuiSelectionBasicStorage: rework to accept massive selections requests without flinching. e1fd25051e1 MultiSelect: ImGuiSelectionBasicStorage: added GetNextSelectedItem() to abstract selection storage from user. Amend Assets Browser demo to handle drag and drop correctly. c3d7aa252b3 MultiSelect: comments, header tweaks., simplication (some of it on wiki). db4898cb913 MultiSelect: added ImGuiSelectionExternalStorage helper. Simplify bool demo. f9caf4447a6 MultiSelect: fixed ImGuiSelectionBasicStorage::Swap() helper. c94cf6f01fe MultiSelect: added ImGuiSelectionBasicStorage::GetStorageIdFromIndex() indirection to be easier on the reader. ab995d3d4f3 MultiSelect: (breaking) Added 'items_count' parameter to BeginMultiSelect(). Will enable extra features, and remove equivalent param from ImGuiSelectionBasicStorage::ApplyRequests(. 443b034895c MultiSelect: mark parent child window as navigable into, with highlight. Assume user will always submit interactive items. f6b5caf82c7 MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_BoxSelect -> ImGuiMultiSelectFlags_BoxSelect1d, ImGuiMultiSelectFlags_BoxSelect2d -> ImGuiMultiSelectFlags_BoxSelect. 7bbbbea2004 MultiSelect: Box-Select: fixes for checkboxes support. Comments. 2f56df48398 MultiSelect: (breaking) renamed ImGuiSelectionBasicStorage::AdapterData to UserData. 1113f13f838 MultiSelect: Box-Select: fixed "when dragging from void" implementation messing with calling BeginMultiSelect() without a selection size. 81548cb6bf3 MultiSelect: added GetMultiSelectState() + store LastSelectionSize as provided by user, convenient for quick debugging and testing. dc0a1682e3b MultiSelect: Box-Select: when dragging from void, first hit item sets NavId by simulating a press, so navigation can resume from that spot. 65ebc0513b2 MultiSelect: Box-Select: minor refactor, tidying up. 9435a3185af RangeSelect/MultiSelect: (Breaking) Added current_selection_size to BeginMultiSelect(). 955210ae5bf MultiSelect: Demo: use Shortcut(). 0be238ec587 MultiSelect: Box-Select: fix preventing focus. amend determination of scope_hovered for decorated/non-child windows + avoid stealing NavId. (#7424) e7a734f78d1 MultiSelect: added ImGuiMultiSelectFlags_NoAutoSelect, ImGuiMultiSelectFlags_NoAutoClear features + added Checkbox Demo a639346fbaf MultiSelect: Demo: make various child windows resizable, with synched heights for the dual list box demo. 2111e3597bc MultiSelect: Comments + tweaked location for widgets to test ImGuiItemFlags_IsMultiSelect to avoid misleading into thinking doing it before ItemAdd() is necessary. dbc67bbf23f MultiSelect: Simplified ImGuiSelectionBasicStorage by using a single SetItemSelected() entry point. f36a03c317a MultiSelect: (Breaking) merge ImGuiSelectionRequestType_Clear and ImGuiSelectionRequestType_SelectAll into ImGuiSelectionRequestType_SetAll., rename ImGuiSelectionRequest::RangeSelected to Selected. b13a78e6b2d MultiSelect: Fixed ImGuiMultiSelectFlags_SelectOnClickRelease over tree node arrow. 9337151a013 MultiSelect: Box-Select: Fixed initial drag from not claiming hovered id, preventing window behind to move for a frame. 3141d87ef81 MultiSelect: Box-Select: Fixed CTRL+drag from void clearing items. 8312c75fef0 MultiSelect: Added ImGuiMultiSelectFlags_NoRangeSelect. Fixed ImGuiMultiSelectFlags_ScopeRect not querying proper window hover. d439f590ab5 MultiSelect: Comments + Assets Browser : Tweak colors. 6c4bf8e56ec MultiSelect: Fixed ImGuiSelectionBasicStorage::ApplyRequests() incorrectly maintaining selection size on SelectAll. f3d77d8e71b MultiSelect: Box-Select: Further refactor to extra mode code away from multi-select function into box-select funcitons. 907268a4305 MultiSelect: Box-Select: Fixed scrolling on high framerates. 5d9de14493c MultiSelect: Box-Select: Refactor: Renames. 75bac1aac67 MultiSelect: Box-Select: Refactor into its own structure, designed for single-instance but closer to being reusable outside Multi-Select. 15391762ddb MultiSelect: Box-Select: Added ImGuiMultiSelectFlags_BoxSelect2d support. Enabled in Asset Browser. Selectable() supports it. 1ac469b50f5 MultiSelect: Box-Select: Fixed holes when using with clipper (in 1D list.) 7546a2d345c MultiSelect: Demo: Assets Browser: track scrolling target so we can roughly land on hovered item. 750e23998f5 MultiSelect: Demo: Assets Browser: added deletion support. Store ID in selection. Moved QueueDeletion to local var to emphasis that this is a user extension. 51fe0bfcf64 MultiSelect: reworked comments in imgui.h now that we have our own section. 0f633c1d99b MultiSelect: move demo's ExampleSelection to main api as a convenient ImGuiSelectionBasicStorage for basic users. e0282347db7 MultiSelect: remove ImGuiSelectionRequest/ImGuiMultiSelectIO details from public api to reduce confusion + comments. 0af6fbb51d5 MultiSelect: added support for nested/stacked BeginMultiSelect(). b747d6fe591 MultiSelect: Demo: rework and move selection adapter inside ExampleSelection. aa4d64be925 MultiSelect: Box-Select: added scroll support. f904a6646c2 MultiSelect: Box-Select: added support for ImGuiMultiSelectFlags_BoxSelect. 90305c57e43 MultiSelect: (breaking) renamed ImGuiMultiSelectFlags_ClearOnClickWindowVoid -> ImGuiMultiSelectFlags_ClearOnClickVoid. Added ImGuiMultiSelectFlags_ScopeWindow, ImGuiMultiSelectFlags_ScopeRect. bf017954830 Demo: Assets Browser: add hit spacing, requierd for box-select patterns. 3d41994a632 MultiSelect: simplify clearing ImGuiMultiSelectTempData. 33fc61a091e MultiSelect: use a single ImGuiMultiSelectIO buffer. 5941edd9f7c MultiSelect: added support for recovery in ErrorCheckEndWindowRecover(). c527cba4700 MultiSelect: we don't need to ever write to EndIO.RangeSrcItem as this is not meant to be used. 6feff6ff051 MultiSelect: (Breaking) io contains a ImVector<ImGuiSelectionRequest> list. a6adfb2b494 MultiSelect: added missing call on Shutdown(). Better reuse selection buffer. c3998b70ccb MultiSelect: clarified purpose and use of IsItemToggledSelection(). Added assert. Moved to multi-selection section of imgui.h. 2765fdb43ea MultiSelect: removed seemingly unnecessary block in BeginMultiSelect(). 88df5901458 Demo: Assets Browser: store items, sorting, type overlay. d18e57e6732 Demo: Assets Browser: Added assets browser demo. 82de6c470b1 MultiSelect: Added ImGuiMultiSelectFlags_SelectOnClickRelease to allow dragging an unselected item without altering selection + update drag and drop demo. 5628dda5a5c MultiSelect: move shared logic to MultiSelectItemHeader(). 9da4efed2a1 MultiSelect: moved RequestClear output so it'll match request list version better. Use Storage->RangeSrcItem in EndMultiSelect(). a6f43dfadda MultiSelect: ImGuiMultiSelectIO's field are not used during loop anymore, stripping them out of comments. dce02f5c4b0 Demo: Dual List Box: Added a dual list box (6648) ba698df7bbd MultiSelect: Demo: Deletion: Various renames to clarify. Use adapter and item list in both ApplyDeletion functions. e1d21092087 MultiSelect: Demo: Deletion: Rework ApplyDeletionPreLoop to use adapter + fix PostLoop not using right value of RequestFocusItem. fa516c3d765 MultiSelect: Demo: Make ExampleSelection use ImGuiID. More self-explanatory. 530155d85aa MultiSelect: Demo: Remove UserDataToIndex from ExampleSelectionAdapter. 8c1f659b3dc MultiSelect: Demo: rework ExampleSelection with an ExampleSelectionAdapter layer, allowing to share more code accross examples using different storage systems. 8fe6b319528 MultiSelect: (Breaking) Removed RangeSrcPassedBy in favor of favoring user to call IncludeByIndex(RangeSrcItem) which is easier/simpler to honor. 6ddc5f38afa MultiSelect: Demo: added simpler demo using Clipper. Clarify RangeSrcPassedBy doc. c3753809b1d MultiSelect: Demo: rework ExampleSelection names to map better to typical user code + variety of Comments tweaks. ff95fdb668a MultiSelect: (Breaking) RequestSetRange's parameter are RangeFirstItem...RangeLastItem (which was always ordered unlike RangeSrcItem...RangeDstItme). Removed RangeDstItem. Removed RangeDirection. af83a3eea44 MultiSelect: clear selection when leaving a scope with a nav directional request. 6821401a3f0 MultiSelect: Tweak debug log to print decimal+hex values for item data. c9eb3714e8b MultiSelect: move HasSelectionData to ImGuiItemFlags to facilitate copying around in standardized fieds. e82b49d2d46 MultiSelect: (Breaking) Use ImGuiSelectionUserData (= ImS64) instead of void* for selection user data. 140a2f0565b MultiSelect: Comments, tweaks. 847b1dde8c5 MultiSelect: (Breaking) Fix + Rename ImGuiMultiSelectFlags_NoMultiSelect to ImGuiMultiSelectFlags_SingleSelect as it seems easier to grasp. 0cf376348bc MultiSelect: Cleanup unused comments/code. ab9326f4ae9 MultiSelect: Fixed right-click handling in MultiSelectItemFooter() when not focused. e3616e151ff MultiSelect: Demo: Delete items from menu. c0035705cae MultiSelect: Further simplication of user code to support Deletion. df1eeb9a20d MultiSelect: Maintain NavIdSelected for user. Simplify deletion demo. 9223ffc2552 MultiSelect: (Breaking) BeginMultiSelect() doesn't need two last params maintained by users. Moving some storage from user to core. Proper deletion demo. 564dde0ee34 MultiSelect: Demo: first-draft of user-side deletion idioms. 387fc138945 MultiSelect: Clarify and better enforce lifetime of BeginMultiSelect() value. 961b81c3628 MultiSelect: Tidying up/simpllifying MultiSelectItemFooter(). 1ea9ca748cd MultiSelect: Remove the need for using IsItemToggledSelection(). Update comments. 6ef70a97fd4 MultiSelect: Remove ImGuiMultiSelectFlags_NoUnselect because I currently can't find use for this specific design. ccf43d6a964 MultiSelect: (Breaking) Renamed 'RangeValue' -> 'RangeSelected' + amend comments. a83326bc529 MultiSelect: (Breaking) Renamed 'RangeSrc -> 'RangeSrcItem', "RangeDst' -> 'RangeDstItem' a39f9e76614 MultiSelect: Internals rename of IO fields to avoid ambiguity with io/rw concepts + memset constructors, tweaks. c61ada200f9 MultiSelect: Demo tweak. Removed multi-scope from Advanced (too messy), made it a seperate mini-demo. 35b5ebc9b55 MultiSelect: (Breaking) Rename ImGuiMultiSelectData to ImGuiMultiSelectIO. 11bcae1ebd4 MultiSelect: refactor before introducing persistant state pool and to facilitate adding recursion + debug log calls. 5d71314f712 MultiSelect: removed DragDropActive/preserve_existing_selection logic which seems unused + comments. 85954c845e3 MultiSelect: Enter can alter selection if current item is not selected. d2f208a30c4 MultiSelect: made SetNextItemSelectionData() optional to allow disjoint selection (e.g. with a CollapsingHeader between items). Amend demo. 815c61b82eb MultiSelect: Fixed needing to set RangeSrcPassedBy when not using clipper. 78cb1661cb5 MultiSelect: Shallow tweaks/refactors. a05700e3272 MultiSelect: Enter doesn't alter selection (unlike Space). 35bbadcf0c7 MultiSelect: Added ImGuiMultiSelectFlags_ClearOnClickWindowVoid. + Demo: showcase multiple selection scopes in same window. b91ae122e15 MultiSelect: Demo: Added pointer indirection and indent level. 19086c1c489 MultiSelect: Added ImGuiMultiSelectFlags_ClearOnEscape (unsure of best design), expose IsFocused for custom shortcuts. 919cac14829 MultiSelect: Demo: Add a simpler version. ad5d3c9bff8 MultiSelect: Fixed issue with Ctrl+click on TreeNode + amend demo to test drag and drop. b9721c1ed71 MultiSelect: Temporary fix/work-around for child/popup to not inherit MultiSelectEnabled flag, until we make mulit-select data stackable. 00c4b8f2a34 MultiSelect: Fix testing key mods from after the nav request (remove need to hold the mod longer) 3ba3f0d905f MultiSelect: Fix Selectable() ambiguous return value, clarify need to use IsItemToggledSelection(). 0479b188d06 MultiSelect: Comments. Tweak demo. 9aeebd24f77 MultiSelect: Fixed CTRL+A not testing focus scope id. Fixed CTRL+A not testing active id. Added demo code. 7abda179af6 MultiSelect: Fix for TreeNode following merge of 011d4755. Demo: basic test for tree nodes. 9c7183dd048 MultiSelect: Transition to use FocusScope bits merged in master. 4afbfd5e719 MultiSelect: Renamed SetNextItemMultiSelectData() to SetNextItemSelectionUserData() 17c4c2154a1 MultiSelect: Demo sharing selection helper code. Fixed static analyzer warnings. 57da88093f5 MultiSelect: Added IMGUI_HAS_MULTI_SELECT define. Fixed right-click toggling selection without clearing active id, could lead to MarkItemEdited() asserting. Fixed demo. 8947c35fa1e MultiSelect: Removed SelectableSpacing as I'm not sure it is of use for now (history insert) 554db6bc0f3 MultiSelect: WIP range-select (#1861) (rebased six millions times) git-subtree-dir: external/imgui/imgui git-subtree-split: 8199457a7d9e453f8d3d9cadc14683fb54a858b5
196 lines
11 KiB
C
196 lines
11 KiB
C
// dear imgui: Renderer Backend for Vulkan
|
|
// This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..)
|
|
|
|
// Implemented features:
|
|
// [!] Renderer: User texture binding. Use 'VkDescriptorSet' as ImTextureID. Read the FAQ about ImTextureID! See https://github.com/ocornut/imgui/pull/914 for discussions.
|
|
// [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices.
|
|
|
|
// Important: on 32-bit systems, user texture binding is only supported if your imconfig file has '#define ImTextureID ImU64'.
|
|
// See imgui_impl_vulkan.cpp file for details.
|
|
|
|
// The aim of imgui_impl_vulkan.h/.cpp is to be usable in your engine without any modification.
|
|
// IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/
|
|
|
|
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
|
|
// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
|
|
// Learn about Dear ImGui:
|
|
// - FAQ https://dearimgui.com/faq
|
|
// - Getting Started https://dearimgui.com/getting-started
|
|
// - Documentation https://dearimgui.com/docs (same as your local docs/ folder).
|
|
// - Introduction, links and more at the top of imgui.cpp
|
|
|
|
// Important note to the reader who wish to integrate imgui_impl_vulkan.cpp/.h in their own engine/app.
|
|
// - Common ImGui_ImplVulkan_XXX functions and structures are used to interface with imgui_impl_vulkan.cpp/.h.
|
|
// You will use those if you want to use this rendering backend in your engine/app.
|
|
// - Helper ImGui_ImplVulkanH_XXX functions and structures are only used by this example (main.cpp) and by
|
|
// the backend itself (imgui_impl_vulkan.cpp), but should PROBABLY NOT be used by your own engine/app code.
|
|
// Read comments in imgui_impl_vulkan.h.
|
|
|
|
#pragma once
|
|
#ifndef IMGUI_DISABLE
|
|
#include "imgui.h" // IMGUI_IMPL_API
|
|
|
|
// [Configuration] in order to use a custom Vulkan function loader:
|
|
// (1) You'll need to disable default Vulkan function prototypes.
|
|
// We provide a '#define IMGUI_IMPL_VULKAN_NO_PROTOTYPES' convenience configuration flag.
|
|
// In order to make sure this is visible from the imgui_impl_vulkan.cpp compilation unit:
|
|
// - Add '#define IMGUI_IMPL_VULKAN_NO_PROTOTYPES' in your imconfig.h file
|
|
// - Or as a compilation flag in your build system
|
|
// - Or uncomment here (not recommended because you'd be modifying imgui sources!)
|
|
// - Do not simply add it in a .cpp file!
|
|
// (2) Call ImGui_ImplVulkan_LoadFunctions() before ImGui_ImplVulkan_Init() with your custom function.
|
|
// If you have no idea what this is, leave it alone!
|
|
//#define IMGUI_IMPL_VULKAN_NO_PROTOTYPES
|
|
|
|
// Convenience support for Volk
|
|
// (you can also technically use IMGUI_IMPL_VULKAN_NO_PROTOTYPES + wrap Volk via ImGui_ImplVulkan_LoadFunctions().)
|
|
//#define IMGUI_IMPL_VULKAN_USE_VOLK
|
|
|
|
#if defined(IMGUI_IMPL_VULKAN_NO_PROTOTYPES) && !defined(VK_NO_PROTOTYPES)
|
|
#define VK_NO_PROTOTYPES
|
|
#endif
|
|
#if defined(VK_USE_PLATFORM_WIN32_KHR) && !defined(NOMINMAX)
|
|
#define NOMINMAX
|
|
#endif
|
|
|
|
// Vulkan includes
|
|
#ifdef IMGUI_IMPL_VULKAN_USE_VOLK
|
|
#include <volk.h>
|
|
#else
|
|
#include <vulkan/vulkan.h>
|
|
#endif
|
|
#if defined(VK_VERSION_1_3) || defined(VK_KHR_dynamic_rendering)
|
|
#define IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
#endif
|
|
|
|
// Initialization data, for ImGui_ImplVulkan_Init()
|
|
// - VkDescriptorPool should be created with VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,
|
|
// and must contain a pool size large enough to hold an ImGui VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.
|
|
// - When using dynamic rendering, set UseDynamicRendering=true and fill PipelineRenderingCreateInfo structure.
|
|
// [Please zero-clear before use!]
|
|
struct ImGui_ImplVulkan_InitInfo
|
|
{
|
|
VkInstance Instance;
|
|
VkPhysicalDevice PhysicalDevice;
|
|
VkDevice Device;
|
|
uint32_t QueueFamily;
|
|
VkQueue Queue;
|
|
VkDescriptorPool DescriptorPool; // See requirements in note above
|
|
VkRenderPass RenderPass; // Ignored if using dynamic rendering
|
|
uint32_t MinImageCount; // >= 2
|
|
uint32_t ImageCount; // >= MinImageCount
|
|
VkSampleCountFlagBits MSAASamples; // 0 defaults to VK_SAMPLE_COUNT_1_BIT
|
|
|
|
// (Optional)
|
|
VkPipelineCache PipelineCache;
|
|
uint32_t Subpass;
|
|
|
|
// (Optional) Dynamic Rendering
|
|
// Need to explicitly enable VK_KHR_dynamic_rendering extension to use this, even for Vulkan 1.3.
|
|
bool UseDynamicRendering;
|
|
#ifdef IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING
|
|
VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo;
|
|
#endif
|
|
|
|
// (Optional) Allocation, Debugging
|
|
const VkAllocationCallbacks* Allocator;
|
|
void (*CheckVkResultFn)(VkResult err);
|
|
VkDeviceSize MinAllocationSize; // Minimum allocation size. Set to 1024*1024 to satisfy zealous best practices validation layer and waste a little memory.
|
|
};
|
|
|
|
// Follow "Getting Started" link and check examples/ folder to learn about using backends!
|
|
IMGUI_IMPL_API bool ImGui_ImplVulkan_Init(ImGui_ImplVulkan_InitInfo* info);
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_Shutdown();
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_NewFrame();
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_RenderDrawData(ImDrawData* draw_data, VkCommandBuffer command_buffer, VkPipeline pipeline = VK_NULL_HANDLE);
|
|
IMGUI_IMPL_API bool ImGui_ImplVulkan_CreateFontsTexture();
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_DestroyFontsTexture();
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_SetMinImageCount(uint32_t min_image_count); // To override MinImageCount after initialization (e.g. if swap chain is recreated)
|
|
|
|
// Register a texture (VkDescriptorSet == ImTextureID)
|
|
// FIXME: This is experimental in the sense that we are unsure how to best design/tackle this problem
|
|
// Please post to https://github.com/ocornut/imgui/pull/914 if you have suggestions.
|
|
IMGUI_IMPL_API VkDescriptorSet ImGui_ImplVulkan_AddTexture(VkSampler sampler, VkImageView image_view, VkImageLayout image_layout);
|
|
IMGUI_IMPL_API void ImGui_ImplVulkan_RemoveTexture(VkDescriptorSet descriptor_set);
|
|
|
|
// Optional: load Vulkan functions with a custom function loader
|
|
// This is only useful with IMGUI_IMPL_VULKAN_NO_PROTOTYPES / VK_NO_PROTOTYPES
|
|
IMGUI_IMPL_API bool ImGui_ImplVulkan_LoadFunctions(PFN_vkVoidFunction(*loader_func)(const char* function_name, void* user_data), void* user_data = nullptr);
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Internal / Miscellaneous Vulkan Helpers
|
|
// (Used by example's main.cpp. Used by multi-viewport features. PROBABLY NOT used by your own engine/app.)
|
|
//-------------------------------------------------------------------------
|
|
// You probably do NOT need to use or care about those functions.
|
|
// Those functions only exist because:
|
|
// 1) they facilitate the readability and maintenance of the multiple main.cpp examples files.
|
|
// 2) the multi-viewport / platform window implementation needs them internally.
|
|
// Generally we avoid exposing any kind of superfluous high-level helpers in the bindings,
|
|
// but it is too much code to duplicate everywhere so we exceptionally expose them.
|
|
//
|
|
// Your engine/app will likely _already_ have code to setup all that stuff (swap chain, render pass, frame buffers, etc.).
|
|
// You may read this code to learn about Vulkan, but it is recommended you use you own custom tailored code to do equivalent work.
|
|
// (The ImGui_ImplVulkanH_XXX functions do not interact with any of the state used by the regular ImGui_ImplVulkan_XXX functions)
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct ImGui_ImplVulkanH_Frame;
|
|
struct ImGui_ImplVulkanH_Window;
|
|
|
|
// Helpers
|
|
IMGUI_IMPL_API void ImGui_ImplVulkanH_CreateOrResizeWindow(VkInstance instance, VkPhysicalDevice physical_device, VkDevice device, ImGui_ImplVulkanH_Window* wnd, uint32_t queue_family, const VkAllocationCallbacks* allocator, int w, int h, uint32_t min_image_count);
|
|
IMGUI_IMPL_API void ImGui_ImplVulkanH_DestroyWindow(VkInstance instance, VkDevice device, ImGui_ImplVulkanH_Window* wnd, const VkAllocationCallbacks* allocator);
|
|
IMGUI_IMPL_API VkSurfaceFormatKHR ImGui_ImplVulkanH_SelectSurfaceFormat(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkFormat* request_formats, int request_formats_count, VkColorSpaceKHR request_color_space);
|
|
IMGUI_IMPL_API VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_device, VkSurfaceKHR surface, const VkPresentModeKHR* request_modes, int request_modes_count);
|
|
IMGUI_IMPL_API int ImGui_ImplVulkanH_GetMinImageCountFromPresentMode(VkPresentModeKHR present_mode);
|
|
|
|
// Helper structure to hold the data needed by one rendering frame
|
|
// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.)
|
|
// [Please zero-clear before use!]
|
|
struct ImGui_ImplVulkanH_Frame
|
|
{
|
|
VkCommandPool CommandPool;
|
|
VkCommandBuffer CommandBuffer;
|
|
VkFence Fence;
|
|
VkImage Backbuffer;
|
|
VkImageView BackbufferView;
|
|
VkFramebuffer Framebuffer;
|
|
};
|
|
|
|
struct ImGui_ImplVulkanH_FrameSemaphores
|
|
{
|
|
VkSemaphore ImageAcquiredSemaphore;
|
|
VkSemaphore RenderCompleteSemaphore;
|
|
};
|
|
|
|
// Helper structure to hold the data needed by one rendering context into one OS window
|
|
// (Used by example's main.cpp. Used by multi-viewport features. Probably NOT used by your own engine/app.)
|
|
struct ImGui_ImplVulkanH_Window
|
|
{
|
|
int Width;
|
|
int Height;
|
|
VkSwapchainKHR Swapchain;
|
|
VkSurfaceKHR Surface;
|
|
VkSurfaceFormatKHR SurfaceFormat;
|
|
VkPresentModeKHR PresentMode;
|
|
VkRenderPass RenderPass;
|
|
VkPipeline Pipeline; // The window pipeline may uses a different VkRenderPass than the one passed in ImGui_ImplVulkan_InitInfo
|
|
bool UseDynamicRendering;
|
|
bool ClearEnable;
|
|
VkClearValue ClearValue;
|
|
uint32_t FrameIndex; // Current frame being rendered to (0 <= FrameIndex < FrameInFlightCount)
|
|
uint32_t ImageCount; // Number of simultaneous in-flight frames (returned by vkGetSwapchainImagesKHR, usually derived from min_image_count)
|
|
uint32_t SemaphoreCount; // Number of simultaneous in-flight frames + 1, to be able to use it in vkAcquireNextImageKHR
|
|
uint32_t SemaphoreIndex; // Current set of swapchain wait semaphores we're using (needs to be distinct from per frame data)
|
|
ImGui_ImplVulkanH_Frame* Frames;
|
|
ImGui_ImplVulkanH_FrameSemaphores* FrameSemaphores;
|
|
|
|
ImGui_ImplVulkanH_Window()
|
|
{
|
|
memset((void*)this, 0, sizeof(*this));
|
|
PresentMode = (VkPresentModeKHR)~0; // Ensure we get an error if user doesn't set this.
|
|
ClearEnable = true;
|
|
}
|
|
};
|
|
|
|
#endif // #ifndef IMGUI_DISABLE
|