Ver código fonte

ImGui support

Wolf Clement 1 ano atrás
commit
ad6b4a928e
12 arquivos alterados com 6773 adições e 0 exclusões
  1. 47 0
      LICENSE.md
  2. 1890 0
      cimgui/cdef.lua
  3. 611 0
      cimgui/enums.lua
  4. 0 0
      cimgui/ignored_defaults.txt
  5. 14 0
      cimgui/init.lua
  6. 435 0
      cimgui/love.lua
  7. 1 0
      cimgui/master.lua
  8. 3657 0
      cimgui/wrap.lua
  9. BIN
      libraries/cimgui.dll
  10. BIN
      libraries/cimgui.dylib
  11. BIN
      libraries/cimgui.so
  12. 118 0
      main.lua

+ 47 - 0
LICENSE.md

@@ -0,0 +1,47 @@
+Licensing information
+=====================
+
+- cimgui-love
+	+ Website: https://github.com/apicici/cimgui-love
+	+ License: MIT License
+	+ Copyright (c) 2021 apicici
+- cimgui
+	+ Website: https://github.com/cimgui/cimgui
+	+ License: MIT License
+	+ Copyright (c) 2015 Stephan Dilly
+- Dear ImGui
+	+ Website: https://github.com/ocornut/imgui
+	+ License: MIT License
+	+ Copyright (c) 2014-2021 Omar Cornut
+- love-imgui
+	+ Website: https://github.com/slages/love-imgui
+	+ License: MIT License
+	+ Copyright (c) 2016 slages
+- Proggy Fonts
+	+ Website: https://github.com/bluescan/proggyfonts
+	+ License: MIT License
+	+ Copyright (c) 2004, 2005 Tristan Grimmer
+	
+License text
+============
+
+## MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+

+ 1890 - 0
cimgui/cdef.lua

@@ -0,0 +1,1890 @@
+require("ffi").cdef[[
+typedef struct ImDrawChannel ImDrawChannel;
+typedef struct ImDrawCmd ImDrawCmd;
+typedef struct ImDrawData ImDrawData;
+typedef struct ImDrawList ImDrawList;
+typedef struct ImDrawListSharedData ImDrawListSharedData;
+typedef struct ImDrawListSplitter ImDrawListSplitter;
+typedef struct ImDrawVert ImDrawVert;
+typedef struct ImFont ImFont;
+typedef struct ImFontAtlas ImFontAtlas;
+typedef struct ImFontBuilderIO ImFontBuilderIO;
+typedef struct ImFontConfig ImFontConfig;
+typedef struct ImFontGlyph ImFontGlyph;
+typedef struct ImFontGlyphRangesBuilder ImFontGlyphRangesBuilder;
+typedef struct ImColor ImColor;
+typedef struct ImGuiContext ImGuiContext;
+typedef struct ImGuiIO ImGuiIO;
+typedef struct ImGuiInputTextCallbackData ImGuiInputTextCallbackData;
+typedef struct ImGuiKeyData ImGuiKeyData;
+typedef struct ImGuiListClipper ImGuiListClipper;
+typedef struct ImGuiOnceUponAFrame ImGuiOnceUponAFrame;
+typedef struct ImGuiPayload ImGuiPayload;
+typedef struct ImGuiPlatformIO ImGuiPlatformIO;
+typedef struct ImGuiPlatformMonitor ImGuiPlatformMonitor;
+typedef struct ImGuiPlatformImeData ImGuiPlatformImeData;
+typedef struct ImGuiSizeCallbackData ImGuiSizeCallbackData;
+typedef struct ImGuiStorage ImGuiStorage;
+typedef struct ImGuiStyle ImGuiStyle;
+typedef struct ImGuiTableSortSpecs ImGuiTableSortSpecs;
+typedef struct ImGuiTableColumnSortSpecs ImGuiTableColumnSortSpecs;
+typedef struct ImGuiTextBuffer ImGuiTextBuffer;
+typedef struct ImGuiTextFilter ImGuiTextFilter;
+typedef struct ImGuiViewport ImGuiViewport;
+typedef struct ImGuiWindowClass ImGuiWindowClass;
+struct ImDrawChannel;
+struct ImDrawCmd;
+struct ImDrawData;
+struct ImDrawList;
+struct ImDrawListSharedData;
+struct ImDrawListSplitter;
+struct ImDrawVert;
+struct ImFont;
+struct ImFontAtlas;
+struct ImFontBuilderIO;
+struct ImFontConfig;
+struct ImFontGlyph;
+struct ImFontGlyphRangesBuilder;
+struct ImColor;
+struct ImGuiContext;
+struct ImGuiIO;
+struct ImGuiInputTextCallbackData;
+struct ImGuiKeyData;
+struct ImGuiListClipper;
+struct ImGuiOnceUponAFrame;
+struct ImGuiPayload;
+struct ImGuiPlatformIO;
+struct ImGuiPlatformMonitor;
+struct ImGuiPlatformImeData;
+struct ImGuiSizeCallbackData;
+struct ImGuiStorage;
+struct ImGuiStyle;
+struct ImGuiTableSortSpecs;
+struct ImGuiTableColumnSortSpecs;
+struct ImGuiTextBuffer;
+struct ImGuiTextFilter;
+struct ImGuiViewport;
+struct ImGuiWindowClass;
+typedef int ImGuiCol;
+typedef int ImGuiCond;
+typedef int ImGuiDataType;
+typedef int ImGuiDir;
+typedef int ImGuiKey;
+typedef int ImGuiNavInput;
+typedef int ImGuiMouseButton;
+typedef int ImGuiMouseCursor;
+typedef int ImGuiSortDirection;
+typedef int ImGuiStyleVar;
+typedef int ImGuiTableBgTarget;
+typedef int ImDrawFlags;
+typedef int ImDrawListFlags;
+typedef int ImFontAtlasFlags;
+typedef int ImGuiBackendFlags;
+typedef int ImGuiButtonFlags;
+typedef int ImGuiColorEditFlags;
+typedef int ImGuiConfigFlags;
+typedef int ImGuiComboFlags;
+typedef int ImGuiDockNodeFlags;
+typedef int ImGuiDragDropFlags;
+typedef int ImGuiFocusedFlags;
+typedef int ImGuiHoveredFlags;
+typedef int ImGuiInputTextFlags;
+typedef int ImGuiKeyModFlags;
+typedef int ImGuiPopupFlags;
+typedef int ImGuiSelectableFlags;
+typedef int ImGuiSliderFlags;
+typedef int ImGuiTabBarFlags;
+typedef int ImGuiTabItemFlags;
+typedef int ImGuiTableFlags;
+typedef int ImGuiTableColumnFlags;
+typedef int ImGuiTableRowFlags;
+typedef int ImGuiTreeNodeFlags;
+typedef int ImGuiViewportFlags;
+typedef int ImGuiWindowFlags;
+typedef void* ImTextureID;
+typedef unsigned short ImDrawIdx;
+typedef unsigned int ImGuiID;
+typedef signed char ImS8;
+typedef unsigned char ImU8;
+typedef signed short ImS16;
+typedef unsigned short ImU16;
+typedef signed int ImS32;
+typedef unsigned int ImU32;
+typedef signed long long ImS64;
+typedef unsigned long long ImU64;
+typedef unsigned short ImWchar16;
+typedef unsigned int ImWchar32;
+typedef ImWchar16 ImWchar;
+typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData* data);
+typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
+typedef void* (*ImGuiMemAllocFunc)(size_t sz, void* user_data);
+typedef void (*ImGuiMemFreeFunc)(void* ptr, void* user_data);
+typedef struct ImVec2 ImVec2;
+struct ImVec2
+{
+    float x, y;
+};
+typedef struct ImVec4 ImVec4;
+struct ImVec4
+{
+    float x, y, z, w;
+};
+typedef enum {
+    ImGuiWindowFlags_None = 0,
+    ImGuiWindowFlags_NoTitleBar = 1 << 0,
+    ImGuiWindowFlags_NoResize = 1 << 1,
+    ImGuiWindowFlags_NoMove = 1 << 2,
+    ImGuiWindowFlags_NoScrollbar = 1 << 3,
+    ImGuiWindowFlags_NoScrollWithMouse = 1 << 4,
+    ImGuiWindowFlags_NoCollapse = 1 << 5,
+    ImGuiWindowFlags_AlwaysAutoResize = 1 << 6,
+    ImGuiWindowFlags_NoBackground = 1 << 7,
+    ImGuiWindowFlags_NoSavedSettings = 1 << 8,
+    ImGuiWindowFlags_NoMouseInputs = 1 << 9,
+    ImGuiWindowFlags_MenuBar = 1 << 10,
+    ImGuiWindowFlags_HorizontalScrollbar = 1 << 11,
+    ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12,
+    ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13,
+    ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,
+    ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,
+    ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,
+    ImGuiWindowFlags_NoNavInputs = 1 << 18,
+    ImGuiWindowFlags_NoNavFocus = 1 << 19,
+    ImGuiWindowFlags_UnsavedDocument = 1 << 20,
+    ImGuiWindowFlags_NoDocking = 1 << 21,
+    ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+    ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
+    ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+    ImGuiWindowFlags_NavFlattened = 1 << 23,
+    ImGuiWindowFlags_ChildWindow = 1 << 24,
+    ImGuiWindowFlags_Tooltip = 1 << 25,
+    ImGuiWindowFlags_Popup = 1 << 26,
+    ImGuiWindowFlags_Modal = 1 << 27,
+    ImGuiWindowFlags_ChildMenu = 1 << 28,
+    ImGuiWindowFlags_DockNodeHost = 1 << 29
+}ImGuiWindowFlags_;
+typedef enum {
+    ImGuiInputTextFlags_None = 0,
+    ImGuiInputTextFlags_CharsDecimal = 1 << 0,
+    ImGuiInputTextFlags_CharsHexadecimal = 1 << 1,
+    ImGuiInputTextFlags_CharsUppercase = 1 << 2,
+    ImGuiInputTextFlags_CharsNoBlank = 1 << 3,
+    ImGuiInputTextFlags_AutoSelectAll = 1 << 4,
+    ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5,
+    ImGuiInputTextFlags_CallbackCompletion = 1 << 6,
+    ImGuiInputTextFlags_CallbackHistory = 1 << 7,
+    ImGuiInputTextFlags_CallbackAlways = 1 << 8,
+    ImGuiInputTextFlags_CallbackCharFilter = 1 << 9,
+    ImGuiInputTextFlags_AllowTabInput = 1 << 10,
+    ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11,
+    ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12,
+    ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13,
+    ImGuiInputTextFlags_ReadOnly = 1 << 14,
+    ImGuiInputTextFlags_Password = 1 << 15,
+    ImGuiInputTextFlags_NoUndoRedo = 1 << 16,
+    ImGuiInputTextFlags_CharsScientific = 1 << 17,
+    ImGuiInputTextFlags_CallbackResize = 1 << 18,
+    ImGuiInputTextFlags_CallbackEdit = 1 << 19
+}ImGuiInputTextFlags_;
+typedef enum {
+    ImGuiTreeNodeFlags_None = 0,
+    ImGuiTreeNodeFlags_Selected = 1 << 0,
+    ImGuiTreeNodeFlags_Framed = 1 << 1,
+    ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2,
+    ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3,
+    ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4,
+    ImGuiTreeNodeFlags_DefaultOpen = 1 << 5,
+    ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6,
+    ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7,
+    ImGuiTreeNodeFlags_Leaf = 1 << 8,
+    ImGuiTreeNodeFlags_Bullet = 1 << 9,
+    ImGuiTreeNodeFlags_FramePadding = 1 << 10,
+    ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11,
+    ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12,
+    ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13,
+    ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
+}ImGuiTreeNodeFlags_;
+typedef enum {
+    ImGuiPopupFlags_None = 0,
+    ImGuiPopupFlags_MouseButtonLeft = 0,
+    ImGuiPopupFlags_MouseButtonRight = 1,
+    ImGuiPopupFlags_MouseButtonMiddle = 2,
+    ImGuiPopupFlags_MouseButtonMask_ = 0x1F,
+    ImGuiPopupFlags_MouseButtonDefault_ = 1,
+    ImGuiPopupFlags_NoOpenOverExistingPopup = 1 << 5,
+    ImGuiPopupFlags_NoOpenOverItems = 1 << 6,
+    ImGuiPopupFlags_AnyPopupId = 1 << 7,
+    ImGuiPopupFlags_AnyPopupLevel = 1 << 8,
+    ImGuiPopupFlags_AnyPopup = ImGuiPopupFlags_AnyPopupId | ImGuiPopupFlags_AnyPopupLevel
+}ImGuiPopupFlags_;
+typedef enum {
+    ImGuiSelectableFlags_None = 0,
+    ImGuiSelectableFlags_DontClosePopups = 1 << 0,
+    ImGuiSelectableFlags_SpanAllColumns = 1 << 1,
+    ImGuiSelectableFlags_AllowDoubleClick = 1 << 2,
+    ImGuiSelectableFlags_Disabled = 1 << 3,
+    ImGuiSelectableFlags_AllowItemOverlap = 1 << 4
+}ImGuiSelectableFlags_;
+typedef enum {
+    ImGuiComboFlags_None = 0,
+    ImGuiComboFlags_PopupAlignLeft = 1 << 0,
+    ImGuiComboFlags_HeightSmall = 1 << 1,
+    ImGuiComboFlags_HeightRegular = 1 << 2,
+    ImGuiComboFlags_HeightLarge = 1 << 3,
+    ImGuiComboFlags_HeightLargest = 1 << 4,
+    ImGuiComboFlags_NoArrowButton = 1 << 5,
+    ImGuiComboFlags_NoPreview = 1 << 6,
+    ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
+}ImGuiComboFlags_;
+typedef enum {
+    ImGuiTabBarFlags_None = 0,
+    ImGuiTabBarFlags_Reorderable = 1 << 0,
+    ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1,
+    ImGuiTabBarFlags_TabListPopupButton = 1 << 2,
+    ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3,
+    ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4,
+    ImGuiTabBarFlags_NoTooltip = 1 << 5,
+    ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6,
+    ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7,
+    ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
+    ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown
+}ImGuiTabBarFlags_;
+typedef enum {
+    ImGuiTabItemFlags_None = 0,
+    ImGuiTabItemFlags_UnsavedDocument = 1 << 0,
+    ImGuiTabItemFlags_SetSelected = 1 << 1,
+    ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2,
+    ImGuiTabItemFlags_NoPushId = 1 << 3,
+    ImGuiTabItemFlags_NoTooltip = 1 << 4,
+    ImGuiTabItemFlags_NoReorder = 1 << 5,
+    ImGuiTabItemFlags_Leading = 1 << 6,
+    ImGuiTabItemFlags_Trailing = 1 << 7
+}ImGuiTabItemFlags_;
+typedef enum {
+    ImGuiTableFlags_None = 0,
+    ImGuiTableFlags_Resizable = 1 << 0,
+    ImGuiTableFlags_Reorderable = 1 << 1,
+    ImGuiTableFlags_Hideable = 1 << 2,
+    ImGuiTableFlags_Sortable = 1 << 3,
+    ImGuiTableFlags_NoSavedSettings = 1 << 4,
+    ImGuiTableFlags_ContextMenuInBody = 1 << 5,
+    ImGuiTableFlags_RowBg = 1 << 6,
+    ImGuiTableFlags_BordersInnerH = 1 << 7,
+    ImGuiTableFlags_BordersOuterH = 1 << 8,
+    ImGuiTableFlags_BordersInnerV = 1 << 9,
+    ImGuiTableFlags_BordersOuterV = 1 << 10,
+    ImGuiTableFlags_BordersH = ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH,
+    ImGuiTableFlags_BordersV = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV,
+    ImGuiTableFlags_BordersInner = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH,
+    ImGuiTableFlags_BordersOuter = ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH,
+    ImGuiTableFlags_Borders = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,
+    ImGuiTableFlags_NoBordersInBody = 1 << 11,
+    ImGuiTableFlags_NoBordersInBodyUntilResize = 1 << 12,
+    ImGuiTableFlags_SizingFixedFit = 1 << 13,
+    ImGuiTableFlags_SizingFixedSame = 2 << 13,
+    ImGuiTableFlags_SizingStretchProp = 3 << 13,
+    ImGuiTableFlags_SizingStretchSame = 4 << 13,
+    ImGuiTableFlags_NoHostExtendX = 1 << 16,
+    ImGuiTableFlags_NoHostExtendY = 1 << 17,
+    ImGuiTableFlags_NoKeepColumnsVisible = 1 << 18,
+    ImGuiTableFlags_PreciseWidths = 1 << 19,
+    ImGuiTableFlags_NoClip = 1 << 20,
+    ImGuiTableFlags_PadOuterX = 1 << 21,
+    ImGuiTableFlags_NoPadOuterX = 1 << 22,
+    ImGuiTableFlags_NoPadInnerX = 1 << 23,
+    ImGuiTableFlags_ScrollX = 1 << 24,
+    ImGuiTableFlags_ScrollY = 1 << 25,
+    ImGuiTableFlags_SortMulti = 1 << 26,
+    ImGuiTableFlags_SortTristate = 1 << 27,
+    ImGuiTableFlags_SizingMask_ = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame
+}ImGuiTableFlags_;
+typedef enum {
+    ImGuiTableColumnFlags_None = 0,
+    ImGuiTableColumnFlags_Disabled = 1 << 0,
+    ImGuiTableColumnFlags_DefaultHide = 1 << 1,
+    ImGuiTableColumnFlags_DefaultSort = 1 << 2,
+    ImGuiTableColumnFlags_WidthStretch = 1 << 3,
+    ImGuiTableColumnFlags_WidthFixed = 1 << 4,
+    ImGuiTableColumnFlags_NoResize = 1 << 5,
+    ImGuiTableColumnFlags_NoReorder = 1 << 6,
+    ImGuiTableColumnFlags_NoHide = 1 << 7,
+    ImGuiTableColumnFlags_NoClip = 1 << 8,
+    ImGuiTableColumnFlags_NoSort = 1 << 9,
+    ImGuiTableColumnFlags_NoSortAscending = 1 << 10,
+    ImGuiTableColumnFlags_NoSortDescending = 1 << 11,
+    ImGuiTableColumnFlags_NoHeaderLabel = 1 << 12,
+    ImGuiTableColumnFlags_NoHeaderWidth = 1 << 13,
+    ImGuiTableColumnFlags_PreferSortAscending = 1 << 14,
+    ImGuiTableColumnFlags_PreferSortDescending = 1 << 15,
+    ImGuiTableColumnFlags_IndentEnable = 1 << 16,
+    ImGuiTableColumnFlags_IndentDisable = 1 << 17,
+    ImGuiTableColumnFlags_IsEnabled = 1 << 24,
+    ImGuiTableColumnFlags_IsVisible = 1 << 25,
+    ImGuiTableColumnFlags_IsSorted = 1 << 26,
+    ImGuiTableColumnFlags_IsHovered = 1 << 27,
+    ImGuiTableColumnFlags_WidthMask_ = ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthFixed,
+    ImGuiTableColumnFlags_IndentMask_ = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable,
+    ImGuiTableColumnFlags_StatusMask_ = ImGuiTableColumnFlags_IsEnabled | ImGuiTableColumnFlags_IsVisible | ImGuiTableColumnFlags_IsSorted | ImGuiTableColumnFlags_IsHovered,
+    ImGuiTableColumnFlags_NoDirectResize_ = 1 << 30
+}ImGuiTableColumnFlags_;
+typedef enum {
+    ImGuiTableRowFlags_None = 0,
+    ImGuiTableRowFlags_Headers = 1 << 0
+}ImGuiTableRowFlags_;
+typedef enum {
+    ImGuiTableBgTarget_None = 0,
+    ImGuiTableBgTarget_RowBg0 = 1,
+    ImGuiTableBgTarget_RowBg1 = 2,
+    ImGuiTableBgTarget_CellBg = 3
+}ImGuiTableBgTarget_;
+typedef enum {
+    ImGuiFocusedFlags_None = 0,
+    ImGuiFocusedFlags_ChildWindows = 1 << 0,
+    ImGuiFocusedFlags_RootWindow = 1 << 1,
+    ImGuiFocusedFlags_AnyWindow = 1 << 2,
+    ImGuiFocusedFlags_NoPopupHierarchy = 1 << 3,
+    ImGuiFocusedFlags_DockHierarchy = 1 << 4,
+    ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows
+}ImGuiFocusedFlags_;
+typedef enum {
+    ImGuiHoveredFlags_None = 0,
+    ImGuiHoveredFlags_ChildWindows = 1 << 0,
+    ImGuiHoveredFlags_RootWindow = 1 << 1,
+    ImGuiHoveredFlags_AnyWindow = 1 << 2,
+    ImGuiHoveredFlags_NoPopupHierarchy = 1 << 3,
+    ImGuiHoveredFlags_DockHierarchy = 1 << 4,
+    ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 5,
+    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7,
+    ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 8,
+    ImGuiHoveredFlags_AllowWhenDisabled = 1 << 9,
+    ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
+    ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
+}ImGuiHoveredFlags_;
+typedef enum {
+    ImGuiDockNodeFlags_None = 0,
+    ImGuiDockNodeFlags_KeepAliveOnly = 1 << 0,
+    ImGuiDockNodeFlags_NoDockingInCentralNode = 1 << 2,
+    ImGuiDockNodeFlags_PassthruCentralNode = 1 << 3,
+    ImGuiDockNodeFlags_NoSplit = 1 << 4,
+    ImGuiDockNodeFlags_NoResize = 1 << 5,
+    ImGuiDockNodeFlags_AutoHideTabBar = 1 << 6
+}ImGuiDockNodeFlags_;
+typedef enum {
+    ImGuiDragDropFlags_None = 0,
+    ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0,
+    ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1,
+    ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2,
+    ImGuiDragDropFlags_SourceAllowNullID = 1 << 3,
+    ImGuiDragDropFlags_SourceExtern = 1 << 4,
+    ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5,
+    ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10,
+    ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11,
+    ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12,
+    ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect
+}ImGuiDragDropFlags_;
+typedef enum {
+    ImGuiDataType_S8,
+    ImGuiDataType_U8,
+    ImGuiDataType_S16,
+    ImGuiDataType_U16,
+    ImGuiDataType_S32,
+    ImGuiDataType_U32,
+    ImGuiDataType_S64,
+    ImGuiDataType_U64,
+    ImGuiDataType_Float,
+    ImGuiDataType_Double,
+    ImGuiDataType_COUNT
+}ImGuiDataType_;
+typedef enum {
+    ImGuiDir_None = -1,
+    ImGuiDir_Left = 0,
+    ImGuiDir_Right = 1,
+    ImGuiDir_Up = 2,
+    ImGuiDir_Down = 3,
+    ImGuiDir_COUNT
+}ImGuiDir_;
+typedef enum {
+    ImGuiSortDirection_None = 0,
+    ImGuiSortDirection_Ascending = 1,
+    ImGuiSortDirection_Descending = 2
+}ImGuiSortDirection_;
+typedef enum {
+    ImGuiKey_None = 0,
+    ImGuiKey_Tab = 512,
+    ImGuiKey_LeftArrow,
+    ImGuiKey_RightArrow,
+    ImGuiKey_UpArrow,
+    ImGuiKey_DownArrow,
+    ImGuiKey_PageUp,
+    ImGuiKey_PageDown,
+    ImGuiKey_Home,
+    ImGuiKey_End,
+    ImGuiKey_Insert,
+    ImGuiKey_Delete,
+    ImGuiKey_Backspace,
+    ImGuiKey_Space,
+    ImGuiKey_Enter,
+    ImGuiKey_Escape,
+    ImGuiKey_LeftCtrl, ImGuiKey_LeftShift, ImGuiKey_LeftAlt, ImGuiKey_LeftSuper,
+    ImGuiKey_RightCtrl, ImGuiKey_RightShift, ImGuiKey_RightAlt, ImGuiKey_RightSuper,
+    ImGuiKey_Menu,
+    ImGuiKey_0, ImGuiKey_1, ImGuiKey_2, ImGuiKey_3, ImGuiKey_4, ImGuiKey_5, ImGuiKey_6, ImGuiKey_7, ImGuiKey_8, ImGuiKey_9,
+    ImGuiKey_A, ImGuiKey_B, ImGuiKey_C, ImGuiKey_D, ImGuiKey_E, ImGuiKey_F, ImGuiKey_G, ImGuiKey_H, ImGuiKey_I, ImGuiKey_J,
+    ImGuiKey_K, ImGuiKey_L, ImGuiKey_M, ImGuiKey_N, ImGuiKey_O, ImGuiKey_P, ImGuiKey_Q, ImGuiKey_R, ImGuiKey_S, ImGuiKey_T,
+    ImGuiKey_U, ImGuiKey_V, ImGuiKey_W, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z,
+    ImGuiKey_F1, ImGuiKey_F2, ImGuiKey_F3, ImGuiKey_F4, ImGuiKey_F5, ImGuiKey_F6,
+    ImGuiKey_F7, ImGuiKey_F8, ImGuiKey_F9, ImGuiKey_F10, ImGuiKey_F11, ImGuiKey_F12,
+    ImGuiKey_Apostrophe,
+    ImGuiKey_Comma,
+    ImGuiKey_Minus,
+    ImGuiKey_Period,
+    ImGuiKey_Slash,
+    ImGuiKey_Semicolon,
+    ImGuiKey_Equal,
+    ImGuiKey_LeftBracket,
+    ImGuiKey_Backslash,
+    ImGuiKey_RightBracket,
+    ImGuiKey_GraveAccent,
+    ImGuiKey_CapsLock,
+    ImGuiKey_ScrollLock,
+    ImGuiKey_NumLock,
+    ImGuiKey_PrintScreen,
+    ImGuiKey_Pause,
+    ImGuiKey_Keypad0, ImGuiKey_Keypad1, ImGuiKey_Keypad2, ImGuiKey_Keypad3, ImGuiKey_Keypad4,
+    ImGuiKey_Keypad5, ImGuiKey_Keypad6, ImGuiKey_Keypad7, ImGuiKey_Keypad8, ImGuiKey_Keypad9,
+    ImGuiKey_KeypadDecimal,
+    ImGuiKey_KeypadDivide,
+    ImGuiKey_KeypadMultiply,
+    ImGuiKey_KeypadSubtract,
+    ImGuiKey_KeypadAdd,
+    ImGuiKey_KeypadEnter,
+    ImGuiKey_KeypadEqual,
+    ImGuiKey_GamepadStart,
+    ImGuiKey_GamepadBack,
+    ImGuiKey_GamepadFaceUp,
+    ImGuiKey_GamepadFaceDown,
+    ImGuiKey_GamepadFaceLeft,
+    ImGuiKey_GamepadFaceRight,
+    ImGuiKey_GamepadDpadUp,
+    ImGuiKey_GamepadDpadDown,
+    ImGuiKey_GamepadDpadLeft,
+    ImGuiKey_GamepadDpadRight,
+    ImGuiKey_GamepadL1,
+    ImGuiKey_GamepadR1,
+    ImGuiKey_GamepadL2,
+    ImGuiKey_GamepadR2,
+    ImGuiKey_GamepadL3,
+    ImGuiKey_GamepadR3,
+    ImGuiKey_GamepadLStickUp,
+    ImGuiKey_GamepadLStickDown,
+    ImGuiKey_GamepadLStickLeft,
+    ImGuiKey_GamepadLStickRight,
+    ImGuiKey_GamepadRStickUp,
+    ImGuiKey_GamepadRStickDown,
+    ImGuiKey_GamepadRStickLeft,
+    ImGuiKey_GamepadRStickRight,
+    ImGuiKey_ModCtrl,
+    ImGuiKey_ModShift,
+    ImGuiKey_ModAlt,
+    ImGuiKey_ModSuper,
+    ImGuiKey_COUNT,
+    ImGuiKey_NamedKey_BEGIN = 512,
+    ImGuiKey_NamedKey_END = ImGuiKey_COUNT,
+    ImGuiKey_NamedKey_COUNT = ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN,
+    ImGuiKey_KeysData_SIZE = ImGuiKey_COUNT,
+    ImGuiKey_KeysData_OFFSET = 0
+}ImGuiKey_;
+typedef enum {
+    ImGuiKeyModFlags_None = 0,
+    ImGuiKeyModFlags_Ctrl = 1 << 0,
+    ImGuiKeyModFlags_Shift = 1 << 1,
+    ImGuiKeyModFlags_Alt = 1 << 2,
+    ImGuiKeyModFlags_Super = 1 << 3
+}ImGuiKeyModFlags_;
+typedef enum {
+    ImGuiNavInput_Activate,
+    ImGuiNavInput_Cancel,
+    ImGuiNavInput_Input,
+    ImGuiNavInput_Menu,
+    ImGuiNavInput_DpadLeft,
+    ImGuiNavInput_DpadRight,
+    ImGuiNavInput_DpadUp,
+    ImGuiNavInput_DpadDown,
+    ImGuiNavInput_LStickLeft,
+    ImGuiNavInput_LStickRight,
+    ImGuiNavInput_LStickUp,
+    ImGuiNavInput_LStickDown,
+    ImGuiNavInput_FocusPrev,
+    ImGuiNavInput_FocusNext,
+    ImGuiNavInput_TweakSlow,
+    ImGuiNavInput_TweakFast,
+    ImGuiNavInput_KeyLeft_,
+    ImGuiNavInput_KeyRight_,
+    ImGuiNavInput_KeyUp_,
+    ImGuiNavInput_KeyDown_,
+    ImGuiNavInput_COUNT
+}ImGuiNavInput_;
+typedef enum {
+    ImGuiConfigFlags_None = 0,
+    ImGuiConfigFlags_NavEnableKeyboard = 1 << 0,
+    ImGuiConfigFlags_NavEnableGamepad = 1 << 1,
+    ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2,
+    ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3,
+    ImGuiConfigFlags_NoMouse = 1 << 4,
+    ImGuiConfigFlags_NoMouseCursorChange = 1 << 5,
+    ImGuiConfigFlags_DockingEnable = 1 << 6,
+    ImGuiConfigFlags_ViewportsEnable = 1 << 10,
+    ImGuiConfigFlags_DpiEnableScaleViewports= 1 << 14,
+    ImGuiConfigFlags_DpiEnableScaleFonts = 1 << 15,
+    ImGuiConfigFlags_IsSRGB = 1 << 20,
+    ImGuiConfigFlags_IsTouchScreen = 1 << 21
+}ImGuiConfigFlags_;
+typedef enum {
+    ImGuiBackendFlags_None = 0,
+    ImGuiBackendFlags_HasGamepad = 1 << 0,
+    ImGuiBackendFlags_HasMouseCursors = 1 << 1,
+    ImGuiBackendFlags_HasSetMousePos = 1 << 2,
+    ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3,
+    ImGuiBackendFlags_PlatformHasViewports = 1 << 10,
+    ImGuiBackendFlags_HasMouseHoveredViewport=1 << 11,
+    ImGuiBackendFlags_RendererHasViewports = 1 << 12
+}ImGuiBackendFlags_;
+typedef enum {
+    ImGuiCol_Text,
+    ImGuiCol_TextDisabled,
+    ImGuiCol_WindowBg,
+    ImGuiCol_ChildBg,
+    ImGuiCol_PopupBg,
+    ImGuiCol_Border,
+    ImGuiCol_BorderShadow,
+    ImGuiCol_FrameBg,
+    ImGuiCol_FrameBgHovered,
+    ImGuiCol_FrameBgActive,
+    ImGuiCol_TitleBg,
+    ImGuiCol_TitleBgActive,
+    ImGuiCol_TitleBgCollapsed,
+    ImGuiCol_MenuBarBg,
+    ImGuiCol_ScrollbarBg,
+    ImGuiCol_ScrollbarGrab,
+    ImGuiCol_ScrollbarGrabHovered,
+    ImGuiCol_ScrollbarGrabActive,
+    ImGuiCol_CheckMark,
+    ImGuiCol_SliderGrab,
+    ImGuiCol_SliderGrabActive,
+    ImGuiCol_Button,
+    ImGuiCol_ButtonHovered,
+    ImGuiCol_ButtonActive,
+    ImGuiCol_Header,
+    ImGuiCol_HeaderHovered,
+    ImGuiCol_HeaderActive,
+    ImGuiCol_Separator,
+    ImGuiCol_SeparatorHovered,
+    ImGuiCol_SeparatorActive,
+    ImGuiCol_ResizeGrip,
+    ImGuiCol_ResizeGripHovered,
+    ImGuiCol_ResizeGripActive,
+    ImGuiCol_Tab,
+    ImGuiCol_TabHovered,
+    ImGuiCol_TabActive,
+    ImGuiCol_TabUnfocused,
+    ImGuiCol_TabUnfocusedActive,
+    ImGuiCol_DockingPreview,
+    ImGuiCol_DockingEmptyBg,
+    ImGuiCol_PlotLines,
+    ImGuiCol_PlotLinesHovered,
+    ImGuiCol_PlotHistogram,
+    ImGuiCol_PlotHistogramHovered,
+    ImGuiCol_TableHeaderBg,
+    ImGuiCol_TableBorderStrong,
+    ImGuiCol_TableBorderLight,
+    ImGuiCol_TableRowBg,
+    ImGuiCol_TableRowBgAlt,
+    ImGuiCol_TextSelectedBg,
+    ImGuiCol_DragDropTarget,
+    ImGuiCol_NavHighlight,
+    ImGuiCol_NavWindowingHighlight,
+    ImGuiCol_NavWindowingDimBg,
+    ImGuiCol_ModalWindowDimBg,
+    ImGuiCol_COUNT
+}ImGuiCol_;
+typedef enum {
+    ImGuiStyleVar_Alpha,
+    ImGuiStyleVar_DisabledAlpha,
+    ImGuiStyleVar_WindowPadding,
+    ImGuiStyleVar_WindowRounding,
+    ImGuiStyleVar_WindowBorderSize,
+    ImGuiStyleVar_WindowMinSize,
+    ImGuiStyleVar_WindowTitleAlign,
+    ImGuiStyleVar_ChildRounding,
+    ImGuiStyleVar_ChildBorderSize,
+    ImGuiStyleVar_PopupRounding,
+    ImGuiStyleVar_PopupBorderSize,
+    ImGuiStyleVar_FramePadding,
+    ImGuiStyleVar_FrameRounding,
+    ImGuiStyleVar_FrameBorderSize,
+    ImGuiStyleVar_ItemSpacing,
+    ImGuiStyleVar_ItemInnerSpacing,
+    ImGuiStyleVar_IndentSpacing,
+    ImGuiStyleVar_CellPadding,
+    ImGuiStyleVar_ScrollbarSize,
+    ImGuiStyleVar_ScrollbarRounding,
+    ImGuiStyleVar_GrabMinSize,
+    ImGuiStyleVar_GrabRounding,
+    ImGuiStyleVar_TabRounding,
+    ImGuiStyleVar_ButtonTextAlign,
+    ImGuiStyleVar_SelectableTextAlign,
+    ImGuiStyleVar_COUNT
+}ImGuiStyleVar_;
+typedef enum {
+    ImGuiButtonFlags_None = 0,
+    ImGuiButtonFlags_MouseButtonLeft = 1 << 0,
+    ImGuiButtonFlags_MouseButtonRight = 1 << 1,
+    ImGuiButtonFlags_MouseButtonMiddle = 1 << 2,
+    ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle,
+    ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft
+}ImGuiButtonFlags_;
+typedef enum {
+    ImGuiColorEditFlags_None = 0,
+    ImGuiColorEditFlags_NoAlpha = 1 << 1,
+    ImGuiColorEditFlags_NoPicker = 1 << 2,
+    ImGuiColorEditFlags_NoOptions = 1 << 3,
+    ImGuiColorEditFlags_NoSmallPreview = 1 << 4,
+    ImGuiColorEditFlags_NoInputs = 1 << 5,
+    ImGuiColorEditFlags_NoTooltip = 1 << 6,
+    ImGuiColorEditFlags_NoLabel = 1 << 7,
+    ImGuiColorEditFlags_NoSidePreview = 1 << 8,
+    ImGuiColorEditFlags_NoDragDrop = 1 << 9,
+    ImGuiColorEditFlags_NoBorder = 1 << 10,
+    ImGuiColorEditFlags_AlphaBar = 1 << 16,
+    ImGuiColorEditFlags_AlphaPreview = 1 << 17,
+    ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18,
+    ImGuiColorEditFlags_HDR = 1 << 19,
+    ImGuiColorEditFlags_DisplayRGB = 1 << 20,
+    ImGuiColorEditFlags_DisplayHSV = 1 << 21,
+    ImGuiColorEditFlags_DisplayHex = 1 << 22,
+    ImGuiColorEditFlags_Uint8 = 1 << 23,
+    ImGuiColorEditFlags_Float = 1 << 24,
+    ImGuiColorEditFlags_PickerHueBar = 1 << 25,
+    ImGuiColorEditFlags_PickerHueWheel = 1 << 26,
+    ImGuiColorEditFlags_InputRGB = 1 << 27,
+    ImGuiColorEditFlags_InputHSV = 1 << 28,
+    ImGuiColorEditFlags_DefaultOptions_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar,
+    ImGuiColorEditFlags_DisplayMask_ = ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex,
+    ImGuiColorEditFlags_DataTypeMask_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float,
+    ImGuiColorEditFlags_PickerMask_ = ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar,
+    ImGuiColorEditFlags_InputMask_ = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV
+}ImGuiColorEditFlags_;
+typedef enum {
+    ImGuiSliderFlags_None = 0,
+    ImGuiSliderFlags_AlwaysClamp = 1 << 4,
+    ImGuiSliderFlags_Logarithmic = 1 << 5,
+    ImGuiSliderFlags_NoRoundToFormat = 1 << 6,
+    ImGuiSliderFlags_NoInput = 1 << 7,
+    ImGuiSliderFlags_InvalidMask_ = 0x7000000F
+}ImGuiSliderFlags_;
+typedef enum {
+    ImGuiMouseButton_Left = 0,
+    ImGuiMouseButton_Right = 1,
+    ImGuiMouseButton_Middle = 2,
+    ImGuiMouseButton_COUNT = 5
+}ImGuiMouseButton_;
+typedef enum {
+    ImGuiMouseCursor_None = -1,
+    ImGuiMouseCursor_Arrow = 0,
+    ImGuiMouseCursor_TextInput,
+    ImGuiMouseCursor_ResizeAll,
+    ImGuiMouseCursor_ResizeNS,
+    ImGuiMouseCursor_ResizeEW,
+    ImGuiMouseCursor_ResizeNESW,
+    ImGuiMouseCursor_ResizeNWSE,
+    ImGuiMouseCursor_Hand,
+    ImGuiMouseCursor_NotAllowed,
+    ImGuiMouseCursor_COUNT
+}ImGuiMouseCursor_;
+typedef enum {
+    ImGuiCond_None = 0,
+    ImGuiCond_Always = 1 << 0,
+    ImGuiCond_Once = 1 << 1,
+    ImGuiCond_FirstUseEver = 1 << 2,
+    ImGuiCond_Appearing = 1 << 3
+}ImGuiCond_;
+struct ImGuiStyle
+{
+    float Alpha;
+    float DisabledAlpha;
+    ImVec2 WindowPadding;
+    float WindowRounding;
+    float WindowBorderSize;
+    ImVec2 WindowMinSize;
+    ImVec2 WindowTitleAlign;
+    ImGuiDir WindowMenuButtonPosition;
+    float ChildRounding;
+    float ChildBorderSize;
+    float PopupRounding;
+    float PopupBorderSize;
+    ImVec2 FramePadding;
+    float FrameRounding;
+    float FrameBorderSize;
+    ImVec2 ItemSpacing;
+    ImVec2 ItemInnerSpacing;
+    ImVec2 CellPadding;
+    ImVec2 TouchExtraPadding;
+    float IndentSpacing;
+    float ColumnsMinSpacing;
+    float ScrollbarSize;
+    float ScrollbarRounding;
+    float GrabMinSize;
+    float GrabRounding;
+    float LogSliderDeadzone;
+    float TabRounding;
+    float TabBorderSize;
+    float TabMinWidthForCloseButton;
+    ImGuiDir ColorButtonPosition;
+    ImVec2 ButtonTextAlign;
+    ImVec2 SelectableTextAlign;
+    ImVec2 DisplayWindowPadding;
+    ImVec2 DisplaySafeAreaPadding;
+    float MouseCursorScale;
+    _Bool AntiAliasedLines;
+    _Bool AntiAliasedLinesUseTex;
+    _Bool AntiAliasedFill;
+    float CurveTessellationTol;
+    float CircleTessellationMaxError;
+    ImVec4 Colors[ImGuiCol_COUNT];
+};
+struct ImGuiKeyData
+{
+    _Bool Down;
+    float DownDuration;
+    float DownDurationPrev;
+    float AnalogValue;
+};
+typedef struct ImVector_ImWchar {int Size;int Capacity;ImWchar* Data;} ImVector_ImWchar;
+struct ImGuiIO
+{
+    ImGuiConfigFlags ConfigFlags;
+    ImGuiBackendFlags BackendFlags;
+    ImVec2 DisplaySize;
+    float DeltaTime;
+    float IniSavingRate;
+    const char* IniFilename;
+    const char* LogFilename;
+    float MouseDoubleClickTime;
+    float MouseDoubleClickMaxDist;
+    float MouseDragThreshold;
+    float KeyRepeatDelay;
+    float KeyRepeatRate;
+    void* UserData;
+    ImFontAtlas*Fonts;
+    float FontGlobalScale;
+    _Bool FontAllowUserScaling;
+    ImFont* FontDefault;
+    ImVec2 DisplayFramebufferScale;
+    _Bool ConfigDockingNoSplit;
+    _Bool ConfigDockingWithShift;
+    _Bool ConfigDockingAlwaysTabBar;
+    _Bool ConfigDockingTransparentPayload;
+    _Bool ConfigViewportsNoAutoMerge;
+    _Bool ConfigViewportsNoTaskBarIcon;
+    _Bool ConfigViewportsNoDecoration;
+    _Bool ConfigViewportsNoDefaultParent;
+    _Bool MouseDrawCursor;
+    _Bool ConfigMacOSXBehaviors;
+    _Bool ConfigInputTrickleEventQueue;
+    _Bool ConfigInputTextCursorBlink;
+    _Bool ConfigDragClickToInputText;
+    _Bool ConfigWindowsResizeFromEdges;
+    _Bool ConfigWindowsMoveFromTitleBarOnly;
+    float ConfigMemoryCompactTimer;
+    const char* BackendPlatformName;
+    const char* BackendRendererName;
+    void* BackendPlatformUserData;
+    void* BackendRendererUserData;
+    void* BackendLanguageUserData;
+    const char* (*GetClipboardTextFn)(void* user_data);
+    void (*SetClipboardTextFn)(void* user_data, const char* text);
+    void* ClipboardUserData;
+    void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
+    void* _UnusedPadding;
+    _Bool WantCaptureMouse;
+    _Bool WantCaptureKeyboard;
+    _Bool WantTextInput;
+    _Bool WantSetMousePos;
+    _Bool WantSaveIniSettings;
+    _Bool NavActive;
+    _Bool NavVisible;
+    float Framerate;
+    int MetricsRenderVertices;
+    int MetricsRenderIndices;
+    int MetricsRenderWindows;
+    int MetricsActiveWindows;
+    int MetricsActiveAllocations;
+    ImVec2 MouseDelta;
+    int KeyMap[ImGuiKey_COUNT];
+    _Bool KeysDown[512];
+    ImVec2 MousePos;
+    _Bool MouseDown[5];
+    float MouseWheel;
+    float MouseWheelH;
+    ImGuiID MouseHoveredViewport;
+    _Bool KeyCtrl;
+    _Bool KeyShift;
+    _Bool KeyAlt;
+    _Bool KeySuper;
+    float NavInputs[ImGuiNavInput_COUNT];
+    ImGuiKeyModFlags KeyMods;
+    ImGuiKeyModFlags KeyModsPrev;
+    ImGuiKeyData KeysData[ImGuiKey_KeysData_SIZE];
+    _Bool WantCaptureMouseUnlessPopupClose;
+    ImVec2 MousePosPrev;
+    ImVec2 MouseClickedPos[5];
+    double MouseClickedTime[5];
+    _Bool MouseClicked[5];
+    _Bool MouseDoubleClicked[5];
+    ImU16 MouseClickedCount[5];
+    ImU16 MouseClickedLastCount[5];
+    _Bool MouseReleased[5];
+    _Bool MouseDownOwned[5];
+    _Bool MouseDownOwnedUnlessPopupClose[5];
+    float MouseDownDuration[5];
+    float MouseDownDurationPrev[5];
+    ImVec2 MouseDragMaxDistanceAbs[5];
+    float MouseDragMaxDistanceSqr[5];
+    float NavInputsDownDuration[ImGuiNavInput_COUNT];
+    float NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
+    float PenPressure;
+    _Bool AppFocusLost;
+    ImS8 BackendUsingLegacyKeyArrays;
+    _Bool BackendUsingLegacyNavInputArray;
+    ImWchar16 InputQueueSurrogate;
+    ImVector_ImWchar InputQueueCharacters;
+};
+struct ImGuiInputTextCallbackData
+{
+    ImGuiInputTextFlags EventFlag;
+    ImGuiInputTextFlags Flags;
+    void* UserData;
+    ImWchar EventChar;
+    ImGuiKey EventKey;
+    char* Buf;
+    int BufTextLen;
+    int BufSize;
+    _Bool BufDirty;
+    int CursorPos;
+    int SelectionStart;
+    int SelectionEnd;
+};
+struct ImGuiSizeCallbackData
+{
+    void* UserData;
+    ImVec2 Pos;
+    ImVec2 CurrentSize;
+    ImVec2 DesiredSize;
+};
+struct ImGuiWindowClass
+{
+    ImGuiID ClassId;
+    ImGuiID ParentViewportId;
+    ImGuiViewportFlags ViewportFlagsOverrideSet;
+    ImGuiViewportFlags ViewportFlagsOverrideClear;
+    ImGuiTabItemFlags TabItemFlagsOverrideSet;
+    ImGuiDockNodeFlags DockNodeFlagsOverrideSet;
+    _Bool DockingAlwaysTabBar;
+    _Bool DockingAllowUnclassed;
+};
+struct ImGuiPayload
+{
+    void* Data;
+    int DataSize;
+    ImGuiID SourceId;
+    ImGuiID SourceParentId;
+    int DataFrameCount;
+    char DataType[32 + 1];
+    _Bool Preview;
+    _Bool Delivery;
+};
+struct ImGuiTableColumnSortSpecs
+{
+    ImGuiID ColumnUserID;
+    ImS16 ColumnIndex;
+    ImS16 SortOrder;
+    ImGuiSortDirection SortDirection : 8;
+};
+struct ImGuiTableSortSpecs
+{
+    const ImGuiTableColumnSortSpecs* Specs;
+    int SpecsCount;
+    _Bool SpecsDirty;
+};
+struct ImGuiOnceUponAFrame
+{
+     int RefFrame;
+};
+struct ImGuiTextRange
+{
+        const char* b;
+        const char* e;
+};
+typedef struct ImGuiTextRange ImGuiTextRange;
+typedef struct ImVector_ImGuiTextRange {int Size;int Capacity;ImGuiTextRange* Data;} ImVector_ImGuiTextRange;
+struct ImGuiTextFilter
+{
+    char InputBuf[256];
+    ImVector_ImGuiTextRange Filters;
+    int CountGrep;
+};
+typedef struct ImGuiTextRange ImGuiTextRange;
+typedef struct ImVector_char {int Size;int Capacity;char* Data;} ImVector_char;
+struct ImGuiTextBuffer
+{
+    ImVector_char Buf;
+};
+struct ImGuiStoragePair
+{
+        ImGuiID key;
+        union { int val_i; float val_f; void* val_p; };
+};
+typedef struct ImGuiStoragePair ImGuiStoragePair;
+typedef struct ImVector_ImGuiStoragePair {int Size;int Capacity;ImGuiStoragePair* Data;} ImVector_ImGuiStoragePair;
+struct ImGuiStorage
+{
+    ImVector_ImGuiStoragePair Data;
+};
+typedef struct ImGuiStoragePair ImGuiStoragePair;
+struct ImGuiListClipper
+{
+    int DisplayStart;
+    int DisplayEnd;
+    int ItemsCount;
+    float ItemsHeight;
+    float StartPosY;
+    void* TempData;
+};
+struct ImColor
+{
+    ImVec4 Value;
+};
+typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
+struct ImDrawCmd
+{
+    ImVec4 ClipRect;
+    ImTextureID TextureId;
+    unsigned int VtxOffset;
+    unsigned int IdxOffset;
+    unsigned int ElemCount;
+    ImDrawCallback UserCallback;
+    void* UserCallbackData;
+};
+struct ImDrawVert
+{
+    ImVec2 pos;
+    ImVec2 uv;
+    ImU32 col;
+};
+typedef struct ImDrawCmdHeader ImDrawCmdHeader;
+struct ImDrawCmdHeader
+{
+    ImVec4 ClipRect;
+    ImTextureID TextureId;
+    unsigned int VtxOffset;
+};
+typedef struct ImVector_ImDrawCmd {int Size;int Capacity;ImDrawCmd* Data;} ImVector_ImDrawCmd;
+typedef struct ImVector_ImDrawIdx {int Size;int Capacity;ImDrawIdx* Data;} ImVector_ImDrawIdx;
+struct ImDrawChannel
+{
+    ImVector_ImDrawCmd _CmdBuffer;
+    ImVector_ImDrawIdx _IdxBuffer;
+};
+typedef struct ImVector_ImDrawChannel {int Size;int Capacity;ImDrawChannel* Data;} ImVector_ImDrawChannel;
+struct ImDrawListSplitter
+{
+    int _Current;
+    int _Count;
+    ImVector_ImDrawChannel _Channels;
+};
+typedef enum {
+    ImDrawFlags_None = 0,
+    ImDrawFlags_Closed = 1 << 0,
+    ImDrawFlags_RoundCornersTopLeft = 1 << 4,
+    ImDrawFlags_RoundCornersTopRight = 1 << 5,
+    ImDrawFlags_RoundCornersBottomLeft = 1 << 6,
+    ImDrawFlags_RoundCornersBottomRight = 1 << 7,
+    ImDrawFlags_RoundCornersNone = 1 << 8,
+    ImDrawFlags_RoundCornersTop = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight,
+    ImDrawFlags_RoundCornersBottom = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight,
+    ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersTopLeft,
+    ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundCornersBottomRight | ImDrawFlags_RoundCornersTopRight,
+    ImDrawFlags_RoundCornersAll = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight,
+    ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll,
+    ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone
+}ImDrawFlags_;
+typedef enum {
+    ImDrawListFlags_None = 0,
+    ImDrawListFlags_AntiAliasedLines = 1 << 0,
+    ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1,
+    ImDrawListFlags_AntiAliasedFill = 1 << 2,
+    ImDrawListFlags_AllowVtxOffset = 1 << 3
+}ImDrawListFlags_;
+typedef struct ImVector_ImDrawVert {int Size;int Capacity;ImDrawVert* Data;} ImVector_ImDrawVert;
+typedef struct ImVector_ImVec4 {int Size;int Capacity;ImVec4* Data;} ImVector_ImVec4;
+typedef struct ImVector_ImTextureID {int Size;int Capacity;ImTextureID* Data;} ImVector_ImTextureID;
+typedef struct ImVector_ImVec2 {int Size;int Capacity;ImVec2* Data;} ImVector_ImVec2;
+struct ImDrawList
+{
+    ImVector_ImDrawCmd CmdBuffer;
+    ImVector_ImDrawIdx IdxBuffer;
+    ImVector_ImDrawVert VtxBuffer;
+    ImDrawListFlags Flags;
+    unsigned int _VtxCurrentIdx;
+    const ImDrawListSharedData* _Data;
+    const char* _OwnerName;
+    ImDrawVert* _VtxWritePtr;
+    ImDrawIdx* _IdxWritePtr;
+    ImVector_ImVec4 _ClipRectStack;
+    ImVector_ImTextureID _TextureIdStack;
+    ImVector_ImVec2 _Path;
+    ImDrawCmdHeader _CmdHeader;
+    ImDrawListSplitter _Splitter;
+    float _FringeScale;
+};
+struct ImDrawData
+{
+    _Bool Valid;
+    int CmdListsCount;
+    int TotalIdxCount;
+    int TotalVtxCount;
+    ImDrawList** CmdLists;
+    ImVec2 DisplayPos;
+    ImVec2 DisplaySize;
+    ImVec2 FramebufferScale;
+    ImGuiViewport* OwnerViewport;
+};
+struct ImFontConfig
+{
+    void* FontData;
+    int FontDataSize;
+    _Bool FontDataOwnedByAtlas;
+    int FontNo;
+    float SizePixels;
+    int OversampleH;
+    int OversampleV;
+    _Bool PixelSnapH;
+    ImVec2 GlyphExtraSpacing;
+    ImVec2 GlyphOffset;
+    const ImWchar* GlyphRanges;
+    float GlyphMinAdvanceX;
+    float GlyphMaxAdvanceX;
+    _Bool MergeMode;
+    unsigned int FontBuilderFlags;
+    float RasterizerMultiply;
+    ImWchar EllipsisChar;
+    char Name[40];
+    ImFont* DstFont;
+};
+struct ImFontGlyph
+{
+    unsigned int Colored : 1;
+    unsigned int Visible : 1;
+    unsigned int Codepoint : 30;
+    float AdvanceX;
+    float X0, Y0, X1, Y1;
+    float U0, V0, U1, V1;
+};
+typedef struct ImVector_ImU32 {int Size;int Capacity;ImU32* Data;} ImVector_ImU32;
+struct ImFontGlyphRangesBuilder
+{
+    ImVector_ImU32 UsedChars;
+};
+typedef struct ImFontAtlasCustomRect ImFontAtlasCustomRect;
+struct ImFontAtlasCustomRect
+{
+    unsigned short Width, Height;
+    unsigned short X, Y;
+    unsigned int GlyphID;
+    float GlyphAdvanceX;
+    ImVec2 GlyphOffset;
+    ImFont* Font;
+};
+typedef enum {
+    ImFontAtlasFlags_None = 0,
+    ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0,
+    ImFontAtlasFlags_NoMouseCursors = 1 << 1,
+    ImFontAtlasFlags_NoBakedLines = 1 << 2
+}ImFontAtlasFlags_;
+typedef struct ImVector_ImFontPtr {int Size;int Capacity;ImFont** Data;} ImVector_ImFontPtr;
+typedef struct ImVector_ImFontAtlasCustomRect {int Size;int Capacity;ImFontAtlasCustomRect* Data;} ImVector_ImFontAtlasCustomRect;
+typedef struct ImVector_ImFontConfig {int Size;int Capacity;ImFontConfig* Data;} ImVector_ImFontConfig;
+struct ImFontAtlas
+{
+    ImFontAtlasFlags Flags;
+    ImTextureID TexID;
+    int TexDesiredWidth;
+    int TexGlyphPadding;
+    _Bool Locked;
+    _Bool TexReady;
+    _Bool TexPixelsUseColors;
+    unsigned char* TexPixelsAlpha8;
+    unsigned int* TexPixelsRGBA32;
+    int TexWidth;
+    int TexHeight;
+    ImVec2 TexUvScale;
+    ImVec2 TexUvWhitePixel;
+    ImVector_ImFontPtr Fonts;
+    ImVector_ImFontAtlasCustomRect CustomRects;
+    ImVector_ImFontConfig ConfigData;
+    ImVec4 TexUvLines[(63) + 1];
+    const ImFontBuilderIO* FontBuilderIO;
+    unsigned int FontBuilderFlags;
+    int PackIdMouseCursors;
+    int PackIdLines;
+};
+typedef struct ImVector_float {int Size;int Capacity;float* Data;} ImVector_float;
+typedef struct ImVector_ImFontGlyph {int Size;int Capacity;ImFontGlyph* Data;} ImVector_ImFontGlyph;
+struct ImFont
+{
+    ImVector_float IndexAdvanceX;
+    float FallbackAdvanceX;
+    float FontSize;
+    ImVector_ImWchar IndexLookup;
+    ImVector_ImFontGlyph Glyphs;
+    const ImFontGlyph* FallbackGlyph;
+    ImFontAtlas* ContainerAtlas;
+    const ImFontConfig* ConfigData;
+    short ConfigDataCount;
+    ImWchar FallbackChar;
+    ImWchar EllipsisChar;
+    ImWchar DotChar;
+    _Bool DirtyLookupTables;
+    float Scale;
+    float Ascent, Descent;
+    int MetricsTotalSurface;
+    ImU8 Used4kPagesMap[(0xFFFF +1)/4096/8];
+};
+typedef enum {
+    ImGuiViewportFlags_None = 0,
+    ImGuiViewportFlags_IsPlatformWindow = 1 << 0,
+    ImGuiViewportFlags_IsPlatformMonitor = 1 << 1,
+    ImGuiViewportFlags_OwnedByApp = 1 << 2,
+    ImGuiViewportFlags_NoDecoration = 1 << 3,
+    ImGuiViewportFlags_NoTaskBarIcon = 1 << 4,
+    ImGuiViewportFlags_NoFocusOnAppearing = 1 << 5,
+    ImGuiViewportFlags_NoFocusOnClick = 1 << 6,
+    ImGuiViewportFlags_NoInputs = 1 << 7,
+    ImGuiViewportFlags_NoRendererClear = 1 << 8,
+    ImGuiViewportFlags_TopMost = 1 << 9,
+    ImGuiViewportFlags_Minimized = 1 << 10,
+    ImGuiViewportFlags_NoAutoMerge = 1 << 11,
+    ImGuiViewportFlags_CanHostOtherWindows = 1 << 12
+}ImGuiViewportFlags_;
+struct ImGuiViewport
+{
+    ImGuiID ID;
+    ImGuiViewportFlags Flags;
+    ImVec2 Pos;
+    ImVec2 Size;
+    ImVec2 WorkPos;
+    ImVec2 WorkSize;
+    float DpiScale;
+    ImGuiID ParentViewportId;
+    ImDrawData* DrawData;
+    void* RendererUserData;
+    void* PlatformUserData;
+    void* PlatformHandle;
+    void* PlatformHandleRaw;
+    _Bool PlatformRequestMove;
+    _Bool PlatformRequestResize;
+    _Bool PlatformRequestClose;
+};
+typedef struct ImVector_ImGuiPlatformMonitor {int Size;int Capacity;ImGuiPlatformMonitor* Data;} ImVector_ImGuiPlatformMonitor;
+typedef struct ImVector_ImGuiViewportPtr {int Size;int Capacity;ImGuiViewport** Data;} ImVector_ImGuiViewportPtr;
+struct ImGuiPlatformIO
+{
+    void (*Platform_CreateWindow)(ImGuiViewport* vp);
+    void (*Platform_DestroyWindow)(ImGuiViewport* vp);
+    void (*Platform_ShowWindow)(ImGuiViewport* vp);
+    void (*Platform_SetWindowPos)(ImGuiViewport* vp, ImVec2 pos);
+    ImVec2 (*Platform_GetWindowPos)(ImGuiViewport* vp);
+    void (*Platform_SetWindowSize)(ImGuiViewport* vp, ImVec2 size);
+    ImVec2 (*Platform_GetWindowSize)(ImGuiViewport* vp);
+    void (*Platform_SetWindowFocus)(ImGuiViewport* vp);
+    _Bool (*Platform_GetWindowFocus)(ImGuiViewport* vp);
+    _Bool (*Platform_GetWindowMinimized)(ImGuiViewport* vp);
+    void (*Platform_SetWindowTitle)(ImGuiViewport* vp, const char* str);
+    void (*Platform_SetWindowAlpha)(ImGuiViewport* vp, float alpha);
+    void (*Platform_UpdateWindow)(ImGuiViewport* vp);
+    void (*Platform_RenderWindow)(ImGuiViewport* vp, void* render_arg);
+    void (*Platform_SwapBuffers)(ImGuiViewport* vp, void* render_arg);
+    float (*Platform_GetWindowDpiScale)(ImGuiViewport* vp);
+    void (*Platform_OnChangedViewport)(ImGuiViewport* vp);
+    int (*Platform_CreateVkSurface)(ImGuiViewport* vp, ImU64 vk_inst, const void* vk_allocators, ImU64* out_vk_surface);
+    void (*Renderer_CreateWindow)(ImGuiViewport* vp);
+    void (*Renderer_DestroyWindow)(ImGuiViewport* vp);
+    void (*Renderer_SetWindowSize)(ImGuiViewport* vp, ImVec2 size);
+    void (*Renderer_RenderWindow)(ImGuiViewport* vp, void* render_arg);
+    void (*Renderer_SwapBuffers)(ImGuiViewport* vp, void* render_arg);
+    ImVector_ImGuiPlatformMonitor Monitors;
+    ImVector_ImGuiViewportPtr Viewports;
+};
+struct ImGuiPlatformMonitor
+{
+    ImVec2 MainPos, MainSize;
+    ImVec2 WorkPos, WorkSize;
+    float DpiScale;
+};
+struct ImGuiPlatformImeData
+{
+    _Bool WantVisible;
+    ImVec2 InputPos;
+    float InputLineHeight;
+};
+extern  ImVec2* ImVec2_ImVec2_Nil(void);
+extern  void ImVec2_destroy(ImVec2* self);
+extern  ImVec2* ImVec2_ImVec2_Float(float _x,float _y);
+extern  ImVec4* ImVec4_ImVec4_Nil(void);
+extern  void ImVec4_destroy(ImVec4* self);
+extern  ImVec4* ImVec4_ImVec4_Float(float _x,float _y,float _z,float _w);
+extern  ImGuiContext* igCreateContext(ImFontAtlas* shared_font_atlas);
+extern  void igDestroyContext(ImGuiContext* ctx);
+extern  ImGuiContext* igGetCurrentContext(void);
+extern  void igSetCurrentContext(ImGuiContext* ctx);
+extern  ImGuiIO* igGetIO(void);
+extern  ImGuiStyle* igGetStyle(void);
+extern  void igNewFrame(void);
+extern  void igEndFrame(void);
+extern  void igRender(void);
+extern  ImDrawData* igGetDrawData(void);
+extern  void igShowDemoWindow(_Bool* p_open);
+extern  void igShowMetricsWindow(_Bool* p_open);
+extern  void igShowStackToolWindow(_Bool* p_open);
+extern  void igShowAboutWindow(_Bool* p_open);
+extern  void igShowStyleEditor(ImGuiStyle* ref);
+extern  _Bool igShowStyleSelector(const char* label);
+extern  void igShowFontSelector(const char* label);
+extern  void igShowUserGuide(void);
+extern  const char* igGetVersion(void);
+extern  void igStyleColorsDark(ImGuiStyle* dst);
+extern  void igStyleColorsLight(ImGuiStyle* dst);
+extern  void igStyleColorsClassic(ImGuiStyle* dst);
+extern  _Bool igBegin(const char* name,_Bool* p_open,ImGuiWindowFlags flags);
+extern  void igEnd(void);
+extern  _Bool igBeginChild_Str(const char* str_id,const ImVec2 size,_Bool border,ImGuiWindowFlags flags);
+extern  _Bool igBeginChild_ID(ImGuiID id,const ImVec2 size,_Bool border,ImGuiWindowFlags flags);
+extern  void igEndChild(void);
+extern  _Bool igIsWindowAppearing(void);
+extern  _Bool igIsWindowCollapsed(void);
+extern  _Bool igIsWindowFocused(ImGuiFocusedFlags flags);
+extern  _Bool igIsWindowHovered(ImGuiHoveredFlags flags);
+extern  ImDrawList* igGetWindowDrawList(void);
+extern  float igGetWindowDpiScale(void);
+extern  void igGetWindowPos(ImVec2 *pOut);
+extern  void igGetWindowSize(ImVec2 *pOut);
+extern  float igGetWindowWidth(void);
+extern  float igGetWindowHeight(void);
+extern  ImGuiViewport* igGetWindowViewport(void);
+extern  void igSetNextWindowPos(const ImVec2 pos,ImGuiCond cond,const ImVec2 pivot);
+extern  void igSetNextWindowSize(const ImVec2 size,ImGuiCond cond);
+extern  void igSetNextWindowSizeConstraints(const ImVec2 size_min,const ImVec2 size_max,ImGuiSizeCallback custom_callback,void* custom_callback_data);
+extern  void igSetNextWindowContentSize(const ImVec2 size);
+extern  void igSetNextWindowCollapsed(_Bool collapsed,ImGuiCond cond);
+extern  void igSetNextWindowFocus(void);
+extern  void igSetNextWindowBgAlpha(float alpha);
+extern  void igSetNextWindowViewport(ImGuiID viewport_id);
+extern  void igSetWindowPos_Vec2(const ImVec2 pos,ImGuiCond cond);
+extern  void igSetWindowSize_Vec2(const ImVec2 size,ImGuiCond cond);
+extern  void igSetWindowCollapsed_Bool(_Bool collapsed,ImGuiCond cond);
+extern  void igSetWindowFocus_Nil(void);
+extern  void igSetWindowFontScale(float scale);
+extern  void igSetWindowPos_Str(const char* name,const ImVec2 pos,ImGuiCond cond);
+extern  void igSetWindowSize_Str(const char* name,const ImVec2 size,ImGuiCond cond);
+extern  void igSetWindowCollapsed_Str(const char* name,_Bool collapsed,ImGuiCond cond);
+extern  void igSetWindowFocus_Str(const char* name);
+extern  void igGetContentRegionAvail(ImVec2 *pOut);
+extern  void igGetContentRegionMax(ImVec2 *pOut);
+extern  void igGetWindowContentRegionMin(ImVec2 *pOut);
+extern  void igGetWindowContentRegionMax(ImVec2 *pOut);
+extern  float igGetScrollX(void);
+extern  float igGetScrollY(void);
+extern  void igSetScrollX(float scroll_x);
+extern  void igSetScrollY(float scroll_y);
+extern  float igGetScrollMaxX(void);
+extern  float igGetScrollMaxY(void);
+extern  void igSetScrollHereX(float center_x_ratio);
+extern  void igSetScrollHereY(float center_y_ratio);
+extern  void igSetScrollFromPosX(float local_x,float center_x_ratio);
+extern  void igSetScrollFromPosY(float local_y,float center_y_ratio);
+extern  void igPushFont(ImFont* font);
+extern  void igPopFont(void);
+extern  void igPushStyleColor_U32(ImGuiCol idx,ImU32 col);
+extern  void igPushStyleColor_Vec4(ImGuiCol idx,const ImVec4 col);
+extern  void igPopStyleColor(int count);
+extern  void igPushStyleVar_Float(ImGuiStyleVar idx,float val);
+extern  void igPushStyleVar_Vec2(ImGuiStyleVar idx,const ImVec2 val);
+extern  void igPopStyleVar(int count);
+extern  void igPushAllowKeyboardFocus(_Bool allow_keyboard_focus);
+extern  void igPopAllowKeyboardFocus(void);
+extern  void igPushButtonRepeat(_Bool repeat);
+extern  void igPopButtonRepeat(void);
+extern  void igPushItemWidth(float item_width);
+extern  void igPopItemWidth(void);
+extern  void igSetNextItemWidth(float item_width);
+extern  float igCalcItemWidth(void);
+extern  void igPushTextWrapPos(float wrap_local_pos_x);
+extern  void igPopTextWrapPos(void);
+extern  ImFont* igGetFont(void);
+extern  float igGetFontSize(void);
+extern  void igGetFontTexUvWhitePixel(ImVec2 *pOut);
+extern  ImU32 igGetColorU32_Col(ImGuiCol idx,float alpha_mul);
+extern  ImU32 igGetColorU32_Vec4(const ImVec4 col);
+extern  ImU32 igGetColorU32_U32(ImU32 col);
+extern  const ImVec4* igGetStyleColorVec4(ImGuiCol idx);
+extern  void igSeparator(void);
+extern  void igSameLine(float offset_from_start_x,float spacing);
+extern  void igNewLine(void);
+extern  void igSpacing(void);
+extern  void igDummy(const ImVec2 size);
+extern  void igIndent(float indent_w);
+extern  void igUnindent(float indent_w);
+extern  void igBeginGroup(void);
+extern  void igEndGroup(void);
+extern  void igGetCursorPos(ImVec2 *pOut);
+extern  float igGetCursorPosX(void);
+extern  float igGetCursorPosY(void);
+extern  void igSetCursorPos(const ImVec2 local_pos);
+extern  void igSetCursorPosX(float local_x);
+extern  void igSetCursorPosY(float local_y);
+extern  void igGetCursorStartPos(ImVec2 *pOut);
+extern  void igGetCursorScreenPos(ImVec2 *pOut);
+extern  void igSetCursorScreenPos(const ImVec2 pos);
+extern  void igAlignTextToFramePadding(void);
+extern  float igGetTextLineHeight(void);
+extern  float igGetTextLineHeightWithSpacing(void);
+extern  float igGetFrameHeight(void);
+extern  float igGetFrameHeightWithSpacing(void);
+extern  void igPushID_Str(const char* str_id);
+extern  void igPushID_StrStr(const char* str_id_begin,const char* str_id_end);
+extern  void igPushID_Ptr(const void* ptr_id);
+extern  void igPushID_Int(int int_id);
+extern  void igPopID(void);
+extern  ImGuiID igGetID_Str(const char* str_id);
+extern  ImGuiID igGetID_StrStr(const char* str_id_begin,const char* str_id_end);
+extern  ImGuiID igGetID_Ptr(const void* ptr_id);
+extern  void igTextUnformatted(const char* text,const char* text_end);
+extern  void igText(const char* fmt,...);
+extern  void igTextV(const char* fmt,va_list args);
+extern  void igTextColored(const ImVec4 col,const char* fmt,...);
+extern  void igTextColoredV(const ImVec4 col,const char* fmt,va_list args);
+extern  void igTextDisabled(const char* fmt,...);
+extern  void igTextDisabledV(const char* fmt,va_list args);
+extern  void igTextWrapped(const char* fmt,...);
+extern  void igTextWrappedV(const char* fmt,va_list args);
+extern  void igLabelText(const char* label,const char* fmt,...);
+extern  void igLabelTextV(const char* label,const char* fmt,va_list args);
+extern  void igBulletText(const char* fmt,...);
+extern  void igBulletTextV(const char* fmt,va_list args);
+extern  _Bool igButton(const char* label,const ImVec2 size);
+extern  _Bool igSmallButton(const char* label);
+extern  _Bool igInvisibleButton(const char* str_id,const ImVec2 size,ImGuiButtonFlags flags);
+extern  _Bool igArrowButton(const char* str_id,ImGuiDir dir);
+extern  void igImage(ImTextureID user_texture_id,const ImVec2 size,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 tint_col,const ImVec4 border_col);
+extern  _Bool igImageButton(ImTextureID user_texture_id,const ImVec2 size,const ImVec2 uv0,const ImVec2 uv1,int frame_padding,const ImVec4 bg_col,const ImVec4 tint_col);
+extern  _Bool igCheckbox(const char* label,_Bool* v);
+extern  _Bool igCheckboxFlags_IntPtr(const char* label,int* flags,int flags_value);
+extern  _Bool igCheckboxFlags_UintPtr(const char* label,unsigned int* flags,unsigned int flags_value);
+extern  _Bool igRadioButton_Bool(const char* label,_Bool active);
+extern  _Bool igRadioButton_IntPtr(const char* label,int* v,int v_button);
+extern  void igProgressBar(float fraction,const ImVec2 size_arg,const char* overlay);
+extern  void igBullet(void);
+extern  _Bool igBeginCombo(const char* label,const char* preview_value,ImGuiComboFlags flags);
+extern  void igEndCombo(void);
+extern  _Bool igCombo_Str_arr(const char* label,int* current_item,const char* const items[],int items_count,int popup_max_height_in_items);
+extern  _Bool igCombo_Str(const char* label,int* current_item,const char* items_separated_by_zeros,int popup_max_height_in_items);
+extern  _Bool igCombo_FnBoolPtr(const char* label,int* current_item,_Bool(*items_getter)(void* data,int idx,const char** out_text),void* data,int items_count,int popup_max_height_in_items);
+extern  _Bool igDragFloat(const char* label,float* v,float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragFloat2(const char* label,float v[2],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragFloat3(const char* label,float v[3],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragFloat4(const char* label,float v[4],float v_speed,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragFloatRange2(const char* label,float* v_current_min,float* v_current_max,float v_speed,float v_min,float v_max,const char* format,const char* format_max,ImGuiSliderFlags flags);
+extern  _Bool igDragInt(const char* label,int* v,float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragInt2(const char* label,int v[2],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragInt3(const char* label,int v[3],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragInt4(const char* label,int v[4],float v_speed,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragIntRange2(const char* label,int* v_current_min,int* v_current_max,float v_speed,int v_min,int v_max,const char* format,const char* format_max,ImGuiSliderFlags flags);
+extern  _Bool igDragScalar(const char* label,ImGuiDataType data_type,void* p_data,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igDragScalarN(const char* label,ImGuiDataType data_type,void* p_data,int components,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderFloat(const char* label,float* v,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderFloat2(const char* label,float v[2],float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderFloat3(const char* label,float v[3],float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderFloat4(const char* label,float v[4],float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderAngle(const char* label,float* v_rad,float v_degrees_min,float v_degrees_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderInt(const char* label,int* v,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderInt2(const char* label,int v[2],int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderInt3(const char* label,int v[3],int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderInt4(const char* label,int v[4],int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderScalar(const char* label,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igSliderScalarN(const char* label,ImGuiDataType data_type,void* p_data,int components,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igVSliderFloat(const char* label,const ImVec2 size,float* v,float v_min,float v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igVSliderInt(const char* label,const ImVec2 size,int* v,int v_min,int v_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igVSliderScalar(const char* label,const ImVec2 size,ImGuiDataType data_type,void* p_data,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags);
+extern  _Bool igInputText(const char* label,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data);
+extern  _Bool igInputTextMultiline(const char* label,char* buf,size_t buf_size,const ImVec2 size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data);
+extern  _Bool igInputTextWithHint(const char* label,const char* hint,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data);
+extern  _Bool igInputFloat(const char* label,float* v,float step,float step_fast,const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputFloat2(const char* label,float v[2],const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputFloat3(const char* label,float v[3],const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputFloat4(const char* label,float v[4],const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputInt(const char* label,int* v,int step,int step_fast,ImGuiInputTextFlags flags);
+extern  _Bool igInputInt2(const char* label,int v[2],ImGuiInputTextFlags flags);
+extern  _Bool igInputInt3(const char* label,int v[3],ImGuiInputTextFlags flags);
+extern  _Bool igInputInt4(const char* label,int v[4],ImGuiInputTextFlags flags);
+extern  _Bool igInputDouble(const char* label,double* v,double step,double step_fast,const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputScalar(const char* label,ImGuiDataType data_type,void* p_data,const void* p_step,const void* p_step_fast,const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igInputScalarN(const char* label,ImGuiDataType data_type,void* p_data,int components,const void* p_step,const void* p_step_fast,const char* format,ImGuiInputTextFlags flags);
+extern  _Bool igColorEdit3(const char* label,float col[3],ImGuiColorEditFlags flags);
+extern  _Bool igColorEdit4(const char* label,float col[4],ImGuiColorEditFlags flags);
+extern  _Bool igColorPicker3(const char* label,float col[3],ImGuiColorEditFlags flags);
+extern  _Bool igColorPicker4(const char* label,float col[4],ImGuiColorEditFlags flags,const float* ref_col);
+extern  _Bool igColorButton(const char* desc_id,const ImVec4 col,ImGuiColorEditFlags flags,ImVec2 size);
+extern  void igSetColorEditOptions(ImGuiColorEditFlags flags);
+extern  _Bool igTreeNode_Str(const char* label);
+extern  _Bool igTreeNode_StrStr(const char* str_id,const char* fmt,...);
+extern  _Bool igTreeNode_Ptr(const void* ptr_id,const char* fmt,...);
+extern  _Bool igTreeNodeV_Str(const char* str_id,const char* fmt,va_list args);
+extern  _Bool igTreeNodeV_Ptr(const void* ptr_id,const char* fmt,va_list args);
+extern  _Bool igTreeNodeEx_Str(const char* label,ImGuiTreeNodeFlags flags);
+extern  _Bool igTreeNodeEx_StrStr(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,...);
+extern  _Bool igTreeNodeEx_Ptr(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,...);
+extern  _Bool igTreeNodeExV_Str(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args);
+extern  _Bool igTreeNodeExV_Ptr(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args);
+extern  void igTreePush_Str(const char* str_id);
+extern  void igTreePush_Ptr(const void* ptr_id);
+extern  void igTreePop(void);
+extern  float igGetTreeNodeToLabelSpacing(void);
+extern  _Bool igCollapsingHeader_TreeNodeFlags(const char* label,ImGuiTreeNodeFlags flags);
+extern  _Bool igCollapsingHeader_BoolPtr(const char* label,_Bool* p_visible,ImGuiTreeNodeFlags flags);
+extern  void igSetNextItemOpen(_Bool is_open,ImGuiCond cond);
+extern  _Bool igSelectable_Bool(const char* label,_Bool selected,ImGuiSelectableFlags flags,const ImVec2 size);
+extern  _Bool igSelectable_BoolPtr(const char* label,_Bool* p_selected,ImGuiSelectableFlags flags,const ImVec2 size);
+extern  _Bool igBeginListBox(const char* label,const ImVec2 size);
+extern  void igEndListBox(void);
+extern  _Bool igListBox_Str_arr(const char* label,int* current_item,const char* const items[],int items_count,int height_in_items);
+extern  _Bool igListBox_FnBoolPtr(const char* label,int* current_item,_Bool(*items_getter)(void* data,int idx,const char** out_text),void* data,int items_count,int height_in_items);
+extern  void igPlotLines_FloatPtr(const char* label,const float* values,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size,int stride);
+extern  void igPlotLines_FnFloatPtr(const char* label,float(*values_getter)(void* data,int idx),void* data,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size);
+extern  void igPlotHistogram_FloatPtr(const char* label,const float* values,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size,int stride);
+extern  void igPlotHistogram_FnFloatPtr(const char* label,float(*values_getter)(void* data,int idx),void* data,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size);
+extern  void igValue_Bool(const char* prefix,_Bool b);
+extern  void igValue_Int(const char* prefix,int v);
+extern  void igValue_Uint(const char* prefix,unsigned int v);
+extern  void igValue_Float(const char* prefix,float v,const char* float_format);
+extern  _Bool igBeginMenuBar(void);
+extern  void igEndMenuBar(void);
+extern  _Bool igBeginMainMenuBar(void);
+extern  void igEndMainMenuBar(void);
+extern  _Bool igBeginMenu(const char* label,_Bool enabled);
+extern  void igEndMenu(void);
+extern  _Bool igMenuItem_Bool(const char* label,const char* shortcut,_Bool selected,_Bool enabled);
+extern  _Bool igMenuItem_BoolPtr(const char* label,const char* shortcut,_Bool* p_selected,_Bool enabled);
+extern  void igBeginTooltip(void);
+extern  void igEndTooltip(void);
+extern  void igSetTooltip(const char* fmt,...);
+extern  void igSetTooltipV(const char* fmt,va_list args);
+extern  _Bool igBeginPopup(const char* str_id,ImGuiWindowFlags flags);
+extern  _Bool igBeginPopupModal(const char* name,_Bool* p_open,ImGuiWindowFlags flags);
+extern  void igEndPopup(void);
+extern  void igOpenPopup_Str(const char* str_id,ImGuiPopupFlags popup_flags);
+extern  void igOpenPopup_ID(ImGuiID id,ImGuiPopupFlags popup_flags);
+extern  void igOpenPopupOnItemClick(const char* str_id,ImGuiPopupFlags popup_flags);
+extern  void igCloseCurrentPopup(void);
+extern  _Bool igBeginPopupContextItem(const char* str_id,ImGuiPopupFlags popup_flags);
+extern  _Bool igBeginPopupContextWindow(const char* str_id,ImGuiPopupFlags popup_flags);
+extern  _Bool igBeginPopupContextVoid(const char* str_id,ImGuiPopupFlags popup_flags);
+extern  _Bool igIsPopupOpen(const char* str_id,ImGuiPopupFlags flags);
+extern  _Bool igBeginTable(const char* str_id,int column,ImGuiTableFlags flags,const ImVec2 outer_size,float inner_width);
+extern  void igEndTable(void);
+extern  void igTableNextRow(ImGuiTableRowFlags row_flags,float min_row_height);
+extern  _Bool igTableNextColumn(void);
+extern  _Bool igTableSetColumnIndex(int column_n);
+extern  void igTableSetupColumn(const char* label,ImGuiTableColumnFlags flags,float init_width_or_weight,ImGuiID user_id);
+extern  void igTableSetupScrollFreeze(int cols,int rows);
+extern  void igTableHeadersRow(void);
+extern  void igTableHeader(const char* label);
+extern  ImGuiTableSortSpecs* igTableGetSortSpecs(void);
+extern  int igTableGetColumnCount(void);
+extern  int igTableGetColumnIndex(void);
+extern  int igTableGetRowIndex(void);
+extern  const char* igTableGetColumnName(int column_n);
+extern  ImGuiTableColumnFlags igTableGetColumnFlags(int column_n);
+extern  void igTableSetColumnEnabled(int column_n,_Bool v);
+extern  void igTableSetBgColor(ImGuiTableBgTarget target,ImU32 color,int column_n);
+extern  void igColumns(int count,const char* id,_Bool border);
+extern  void igNextColumn(void);
+extern  int igGetColumnIndex(void);
+extern  float igGetColumnWidth(int column_index);
+extern  void igSetColumnWidth(int column_index,float width);
+extern  float igGetColumnOffset(int column_index);
+extern  void igSetColumnOffset(int column_index,float offset_x);
+extern  int igGetColumnsCount(void);
+extern  _Bool igBeginTabBar(const char* str_id,ImGuiTabBarFlags flags);
+extern  void igEndTabBar(void);
+extern  _Bool igBeginTabItem(const char* label,_Bool* p_open,ImGuiTabItemFlags flags);
+extern  void igEndTabItem(void);
+extern  _Bool igTabItemButton(const char* label,ImGuiTabItemFlags flags);
+extern  void igSetTabItemClosed(const char* tab_or_docked_window_label);
+extern  ImGuiID igDockSpace(ImGuiID id,const ImVec2 size,ImGuiDockNodeFlags flags,const ImGuiWindowClass* window_class);
+extern  ImGuiID igDockSpaceOverViewport(const ImGuiViewport* viewport,ImGuiDockNodeFlags flags,const ImGuiWindowClass* window_class);
+extern  void igSetNextWindowDockID(ImGuiID dock_id,ImGuiCond cond);
+extern  void igSetNextWindowClass(const ImGuiWindowClass* window_class);
+extern  ImGuiID igGetWindowDockID(void);
+extern  _Bool igIsWindowDocked(void);
+extern  void igLogToTTY(int auto_open_depth);
+extern  void igLogToFile(int auto_open_depth,const char* filename);
+extern  void igLogToClipboard(int auto_open_depth);
+extern  void igLogFinish(void);
+extern  void igLogButtons(void);
+extern  void igLogTextV(const char* fmt,va_list args);
+extern  _Bool igBeginDragDropSource(ImGuiDragDropFlags flags);
+extern  _Bool igSetDragDropPayload(const char* type,const void* data,size_t sz,ImGuiCond cond);
+extern  void igEndDragDropSource(void);
+extern  _Bool igBeginDragDropTarget(void);
+extern  const ImGuiPayload* igAcceptDragDropPayload(const char* type,ImGuiDragDropFlags flags);
+extern  void igEndDragDropTarget(void);
+extern  const ImGuiPayload* igGetDragDropPayload(void);
+extern  void igBeginDisabled(_Bool disabled);
+extern  void igEndDisabled(void);
+extern  void igPushClipRect(const ImVec2 clip_rect_min,const ImVec2 clip_rect_max,_Bool intersect_with_current_clip_rect);
+extern  void igPopClipRect(void);
+extern  void igSetItemDefaultFocus(void);
+extern  void igSetKeyboardFocusHere(int offset);
+extern  _Bool igIsItemHovered(ImGuiHoveredFlags flags);
+extern  _Bool igIsItemActive(void);
+extern  _Bool igIsItemFocused(void);
+extern  _Bool igIsItemClicked(ImGuiMouseButton mouse_button);
+extern  _Bool igIsItemVisible(void);
+extern  _Bool igIsItemEdited(void);
+extern  _Bool igIsItemActivated(void);
+extern  _Bool igIsItemDeactivated(void);
+extern  _Bool igIsItemDeactivatedAfterEdit(void);
+extern  _Bool igIsItemToggledOpen(void);
+extern  _Bool igIsAnyItemHovered(void);
+extern  _Bool igIsAnyItemActive(void);
+extern  _Bool igIsAnyItemFocused(void);
+extern  void igGetItemRectMin(ImVec2 *pOut);
+extern  void igGetItemRectMax(ImVec2 *pOut);
+extern  void igGetItemRectSize(ImVec2 *pOut);
+extern  void igSetItemAllowOverlap(void);
+extern  ImGuiViewport* igGetMainViewport(void);
+extern  _Bool igIsRectVisible_Nil(const ImVec2 size);
+extern  _Bool igIsRectVisible_Vec2(const ImVec2 rect_min,const ImVec2 rect_max);
+extern  double igGetTime(void);
+extern  int igGetFrameCount(void);
+extern  ImDrawList* igGetBackgroundDrawList_Nil(void);
+extern  ImDrawList* igGetForegroundDrawList_Nil(void);
+extern  ImDrawList* igGetBackgroundDrawList_ViewportPtr(ImGuiViewport* viewport);
+extern  ImDrawList* igGetForegroundDrawList_ViewportPtr(ImGuiViewport* viewport);
+extern  ImDrawListSharedData* igGetDrawListSharedData(void);
+extern  const char* igGetStyleColorName(ImGuiCol idx);
+extern  void igSetStateStorage(ImGuiStorage* storage);
+extern  ImGuiStorage* igGetStateStorage(void);
+extern  _Bool igBeginChildFrame(ImGuiID id,const ImVec2 size,ImGuiWindowFlags flags);
+extern  void igEndChildFrame(void);
+extern  void igCalcTextSize(ImVec2 *pOut,const char* text,const char* text_end,_Bool hide_text_after_double_hash,float wrap_width);
+extern  void igColorConvertU32ToFloat4(ImVec4 *pOut,ImU32 in);
+extern  ImU32 igColorConvertFloat4ToU32(const ImVec4 in);
+extern  void igColorConvertRGBtoHSV(float r,float g,float b,float* out_h,float* out_s,float* out_v);
+extern  void igColorConvertHSVtoRGB(float h,float s,float v,float* out_r,float* out_g,float* out_b);
+extern  _Bool igIsKeyDown(ImGuiKey key);
+extern  _Bool igIsKeyPressed(ImGuiKey key,_Bool repeat);
+extern  _Bool igIsKeyReleased(ImGuiKey key);
+extern  int igGetKeyPressedAmount(ImGuiKey key,float repeat_delay,float rate);
+extern  const char* igGetKeyName(ImGuiKey key);
+extern  void igCaptureKeyboardFromApp(_Bool want_capture_keyboard_value);
+extern  _Bool igIsMouseDown(ImGuiMouseButton button);
+extern  _Bool igIsMouseClicked(ImGuiMouseButton button,_Bool repeat);
+extern  _Bool igIsMouseReleased(ImGuiMouseButton button);
+extern  _Bool igIsMouseDoubleClicked(ImGuiMouseButton button);
+extern  int igGetMouseClickedCount(ImGuiMouseButton button);
+extern  _Bool igIsMouseHoveringRect(const ImVec2 r_min,const ImVec2 r_max,_Bool clip);
+extern  _Bool igIsMousePosValid(const ImVec2* mouse_pos);
+extern  _Bool igIsAnyMouseDown(void);
+extern  void igGetMousePos(ImVec2 *pOut);
+extern  void igGetMousePosOnOpeningCurrentPopup(ImVec2 *pOut);
+extern  _Bool igIsMouseDragging(ImGuiMouseButton button,float lock_threshold);
+extern  void igGetMouseDragDelta(ImVec2 *pOut,ImGuiMouseButton button,float lock_threshold);
+extern  void igResetMouseDragDelta(ImGuiMouseButton button);
+extern  ImGuiMouseCursor igGetMouseCursor(void);
+extern  void igSetMouseCursor(ImGuiMouseCursor cursor_type);
+extern  void igCaptureMouseFromApp(_Bool want_capture_mouse_value);
+extern  const char* igGetClipboardText(void);
+extern  void igSetClipboardText(const char* text);
+extern  void igLoadIniSettingsFromDisk(const char* ini_filename);
+extern  void igLoadIniSettingsFromMemory(const char* ini_data,size_t ini_size);
+extern  void igSaveIniSettingsToDisk(const char* ini_filename);
+extern  const char* igSaveIniSettingsToMemory(size_t* out_ini_size);
+extern  _Bool igDebugCheckVersionAndDataLayout(const char* version_str,size_t sz_io,size_t sz_style,size_t sz_vec2,size_t sz_vec4,size_t sz_drawvert,size_t sz_drawidx);
+extern  void igSetAllocatorFunctions(ImGuiMemAllocFunc alloc_func,ImGuiMemFreeFunc free_func,void* user_data);
+extern  void igGetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func,ImGuiMemFreeFunc* p_free_func,void** p_user_data);
+extern  void* igMemAlloc(size_t size);
+extern  void igMemFree(void* ptr);
+extern  ImGuiPlatformIO* igGetPlatformIO(void);
+extern  void igUpdatePlatformWindows(void);
+extern  void igRenderPlatformWindowsDefault(void* platform_render_arg,void* renderer_render_arg);
+extern  void igDestroyPlatformWindows(void);
+extern  ImGuiViewport* igFindViewportByID(ImGuiID id);
+extern  ImGuiViewport* igFindViewportByPlatformHandle(void* platform_handle);
+extern  ImGuiStyle* ImGuiStyle_ImGuiStyle(void);
+extern  void ImGuiStyle_destroy(ImGuiStyle* self);
+extern  void ImGuiStyle_ScaleAllSizes(ImGuiStyle* self,float scale_factor);
+extern  void ImGuiIO_AddKeyEvent(ImGuiIO* self,ImGuiKey key,_Bool down);
+extern  void ImGuiIO_AddKeyAnalogEvent(ImGuiIO* self,ImGuiKey key,_Bool down,float v);
+extern  void ImGuiIO_AddMousePosEvent(ImGuiIO* self,float x,float y);
+extern  void ImGuiIO_AddMouseButtonEvent(ImGuiIO* self,int button,_Bool down);
+extern  void ImGuiIO_AddMouseWheelEvent(ImGuiIO* self,float wh_x,float wh_y);
+extern  void ImGuiIO_AddMouseViewportEvent(ImGuiIO* self,ImGuiID id);
+extern  void ImGuiIO_AddFocusEvent(ImGuiIO* self,_Bool focused);
+extern  void ImGuiIO_AddInputCharacter(ImGuiIO* self,unsigned int c);
+extern  void ImGuiIO_AddInputCharacterUTF16(ImGuiIO* self,ImWchar16 c);
+extern  void ImGuiIO_AddInputCharactersUTF8(ImGuiIO* self,const char* str);
+extern  void ImGuiIO_ClearInputCharacters(ImGuiIO* self);
+extern  void ImGuiIO_ClearInputKeys(ImGuiIO* self);
+extern  void ImGuiIO_SetKeyEventNativeData(ImGuiIO* self,ImGuiKey key,int native_keycode,int native_scancode,int native_legacy_index);
+extern  ImGuiIO* ImGuiIO_ImGuiIO(void);
+extern  void ImGuiIO_destroy(ImGuiIO* self);
+extern  ImGuiInputTextCallbackData* ImGuiInputTextCallbackData_ImGuiInputTextCallbackData(void);
+extern  void ImGuiInputTextCallbackData_destroy(ImGuiInputTextCallbackData* self);
+extern  void ImGuiInputTextCallbackData_DeleteChars(ImGuiInputTextCallbackData* self,int pos,int bytes_count);
+extern  void ImGuiInputTextCallbackData_InsertChars(ImGuiInputTextCallbackData* self,int pos,const char* text,const char* text_end);
+extern  void ImGuiInputTextCallbackData_SelectAll(ImGuiInputTextCallbackData* self);
+extern  void ImGuiInputTextCallbackData_ClearSelection(ImGuiInputTextCallbackData* self);
+extern  _Bool ImGuiInputTextCallbackData_HasSelection(ImGuiInputTextCallbackData* self);
+extern  ImGuiWindowClass* ImGuiWindowClass_ImGuiWindowClass(void);
+extern  void ImGuiWindowClass_destroy(ImGuiWindowClass* self);
+extern  ImGuiPayload* ImGuiPayload_ImGuiPayload(void);
+extern  void ImGuiPayload_destroy(ImGuiPayload* self);
+extern  void ImGuiPayload_Clear(ImGuiPayload* self);
+extern  _Bool ImGuiPayload_IsDataType(ImGuiPayload* self,const char* type);
+extern  _Bool ImGuiPayload_IsPreview(ImGuiPayload* self);
+extern  _Bool ImGuiPayload_IsDelivery(ImGuiPayload* self);
+extern  ImGuiTableColumnSortSpecs* ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs(void);
+extern  void ImGuiTableColumnSortSpecs_destroy(ImGuiTableColumnSortSpecs* self);
+extern  ImGuiTableSortSpecs* ImGuiTableSortSpecs_ImGuiTableSortSpecs(void);
+extern  void ImGuiTableSortSpecs_destroy(ImGuiTableSortSpecs* self);
+extern  ImGuiOnceUponAFrame* ImGuiOnceUponAFrame_ImGuiOnceUponAFrame(void);
+extern  void ImGuiOnceUponAFrame_destroy(ImGuiOnceUponAFrame* self);
+extern  ImGuiTextFilter* ImGuiTextFilter_ImGuiTextFilter(const char* default_filter);
+extern  void ImGuiTextFilter_destroy(ImGuiTextFilter* self);
+extern  _Bool ImGuiTextFilter_Draw(ImGuiTextFilter* self,const char* label,float width);
+extern  _Bool ImGuiTextFilter_PassFilter(ImGuiTextFilter* self,const char* text,const char* text_end);
+extern  void ImGuiTextFilter_Build(ImGuiTextFilter* self);
+extern  void ImGuiTextFilter_Clear(ImGuiTextFilter* self);
+extern  _Bool ImGuiTextFilter_IsActive(ImGuiTextFilter* self);
+extern  ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Nil(void);
+extern  void ImGuiTextRange_destroy(ImGuiTextRange* self);
+extern  ImGuiTextRange* ImGuiTextRange_ImGuiTextRange_Str(const char* _b,const char* _e);
+extern  _Bool ImGuiTextRange_empty(ImGuiTextRange* self);
+extern  void ImGuiTextRange_split(ImGuiTextRange* self,char separator,ImVector_ImGuiTextRange* out);
+extern  ImGuiTextBuffer* ImGuiTextBuffer_ImGuiTextBuffer(void);
+extern  void ImGuiTextBuffer_destroy(ImGuiTextBuffer* self);
+extern  const char* ImGuiTextBuffer_begin(ImGuiTextBuffer* self);
+extern  const char* ImGuiTextBuffer_end(ImGuiTextBuffer* self);
+extern  int ImGuiTextBuffer_size(ImGuiTextBuffer* self);
+extern  _Bool ImGuiTextBuffer_empty(ImGuiTextBuffer* self);
+extern  void ImGuiTextBuffer_clear(ImGuiTextBuffer* self);
+extern  void ImGuiTextBuffer_reserve(ImGuiTextBuffer* self,int capacity);
+extern  const char* ImGuiTextBuffer_c_str(ImGuiTextBuffer* self);
+extern  void ImGuiTextBuffer_append(ImGuiTextBuffer* self,const char* str,const char* str_end);
+extern  void ImGuiTextBuffer_appendfv(ImGuiTextBuffer* self,const char* fmt,va_list args);
+extern  ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Int(ImGuiID _key,int _val_i);
+extern  void ImGuiStoragePair_destroy(ImGuiStoragePair* self);
+extern  ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Float(ImGuiID _key,float _val_f);
+extern  ImGuiStoragePair* ImGuiStoragePair_ImGuiStoragePair_Ptr(ImGuiID _key,void* _val_p);
+extern  void ImGuiStorage_Clear(ImGuiStorage* self);
+extern  int ImGuiStorage_GetInt(ImGuiStorage* self,ImGuiID key,int default_val);
+extern  void ImGuiStorage_SetInt(ImGuiStorage* self,ImGuiID key,int val);
+extern  _Bool ImGuiStorage_GetBool(ImGuiStorage* self,ImGuiID key,_Bool default_val);
+extern  void ImGuiStorage_SetBool(ImGuiStorage* self,ImGuiID key,_Bool val);
+extern  float ImGuiStorage_GetFloat(ImGuiStorage* self,ImGuiID key,float default_val);
+extern  void ImGuiStorage_SetFloat(ImGuiStorage* self,ImGuiID key,float val);
+extern  void* ImGuiStorage_GetVoidPtr(ImGuiStorage* self,ImGuiID key);
+extern  void ImGuiStorage_SetVoidPtr(ImGuiStorage* self,ImGuiID key,void* val);
+extern  int* ImGuiStorage_GetIntRef(ImGuiStorage* self,ImGuiID key,int default_val);
+extern  _Bool* ImGuiStorage_GetBoolRef(ImGuiStorage* self,ImGuiID key,_Bool default_val);
+extern  float* ImGuiStorage_GetFloatRef(ImGuiStorage* self,ImGuiID key,float default_val);
+extern  void** ImGuiStorage_GetVoidPtrRef(ImGuiStorage* self,ImGuiID key,void* default_val);
+extern  void ImGuiStorage_SetAllInt(ImGuiStorage* self,int val);
+extern  void ImGuiStorage_BuildSortByKey(ImGuiStorage* self);
+extern  ImGuiListClipper* ImGuiListClipper_ImGuiListClipper(void);
+extern  void ImGuiListClipper_destroy(ImGuiListClipper* self);
+extern  void ImGuiListClipper_Begin(ImGuiListClipper* self,int items_count,float items_height);
+extern  void ImGuiListClipper_End(ImGuiListClipper* self);
+extern  _Bool ImGuiListClipper_Step(ImGuiListClipper* self);
+extern  void ImGuiListClipper_ForceDisplayRangeByIndices(ImGuiListClipper* self,int item_min,int item_max);
+extern  ImColor* ImColor_ImColor_Nil(void);
+extern  void ImColor_destroy(ImColor* self);
+extern  ImColor* ImColor_ImColor_Int(int r,int g,int b,int a);
+extern  ImColor* ImColor_ImColor_U32(ImU32 rgba);
+extern  ImColor* ImColor_ImColor_Float(float r,float g,float b,float a);
+extern  ImColor* ImColor_ImColor_Vec4(const ImVec4 col);
+extern  void ImColor_SetHSV(ImColor* self,float h,float s,float v,float a);
+extern  void ImColor_HSV(ImColor *pOut,float h,float s,float v,float a);
+extern  ImDrawCmd* ImDrawCmd_ImDrawCmd(void);
+extern  void ImDrawCmd_destroy(ImDrawCmd* self);
+extern  ImTextureID ImDrawCmd_GetTexID(ImDrawCmd* self);
+extern  ImDrawListSplitter* ImDrawListSplitter_ImDrawListSplitter(void);
+extern  void ImDrawListSplitter_destroy(ImDrawListSplitter* self);
+extern  void ImDrawListSplitter_Clear(ImDrawListSplitter* self);
+extern  void ImDrawListSplitter_ClearFreeMemory(ImDrawListSplitter* self);
+extern  void ImDrawListSplitter_Split(ImDrawListSplitter* self,ImDrawList* draw_list,int count);
+extern  void ImDrawListSplitter_Merge(ImDrawListSplitter* self,ImDrawList* draw_list);
+extern  void ImDrawListSplitter_SetCurrentChannel(ImDrawListSplitter* self,ImDrawList* draw_list,int channel_idx);
+extern  ImDrawList* ImDrawList_ImDrawList(const ImDrawListSharedData* shared_data);
+extern  void ImDrawList_destroy(ImDrawList* self);
+extern  void ImDrawList_PushClipRect(ImDrawList* self,ImVec2 clip_rect_min,ImVec2 clip_rect_max,_Bool intersect_with_current_clip_rect);
+extern  void ImDrawList_PushClipRectFullScreen(ImDrawList* self);
+extern  void ImDrawList_PopClipRect(ImDrawList* self);
+extern  void ImDrawList_PushTextureID(ImDrawList* self,ImTextureID texture_id);
+extern  void ImDrawList_PopTextureID(ImDrawList* self);
+extern  void ImDrawList_GetClipRectMin(ImVec2 *pOut,ImDrawList* self);
+extern  void ImDrawList_GetClipRectMax(ImVec2 *pOut,ImDrawList* self);
+extern  void ImDrawList_AddLine(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,ImU32 col,float thickness);
+extern  void ImDrawList_AddRect(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col,float rounding,ImDrawFlags flags,float thickness);
+extern  void ImDrawList_AddRectFilled(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col,float rounding,ImDrawFlags flags);
+extern  void ImDrawList_AddRectFilledMultiColor(ImDrawList* self,const ImVec2 p_min,const ImVec2 p_max,ImU32 col_upr_left,ImU32 col_upr_right,ImU32 col_bot_right,ImU32 col_bot_left);
+extern  void ImDrawList_AddQuad(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col,float thickness);
+extern  void ImDrawList_AddQuadFilled(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col);
+extern  void ImDrawList_AddTriangle(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col,float thickness);
+extern  void ImDrawList_AddTriangleFilled(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col);
+extern  void ImDrawList_AddCircle(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments,float thickness);
+extern  void ImDrawList_AddCircleFilled(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments);
+extern  void ImDrawList_AddNgon(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments,float thickness);
+extern  void ImDrawList_AddNgonFilled(ImDrawList* self,const ImVec2 center,float radius,ImU32 col,int num_segments);
+extern  void ImDrawList_AddText_Vec2(ImDrawList* self,const ImVec2 pos,ImU32 col,const char* text_begin,const char* text_end);
+extern  void ImDrawList_AddText_FontPtr(ImDrawList* self,const ImFont* font,float font_size,const ImVec2 pos,ImU32 col,const char* text_begin,const char* text_end,float wrap_width,const ImVec4* cpu_fine_clip_rect);
+extern  void ImDrawList_AddPolyline(ImDrawList* self,const ImVec2* points,int num_points,ImU32 col,ImDrawFlags flags,float thickness);
+extern  void ImDrawList_AddConvexPolyFilled(ImDrawList* self,const ImVec2* points,int num_points,ImU32 col);
+extern  void ImDrawList_AddBezierCubic(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,ImU32 col,float thickness,int num_segments);
+extern  void ImDrawList_AddBezierQuadratic(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,ImU32 col,float thickness,int num_segments);
+extern  void ImDrawList_AddImage(ImDrawList* self,ImTextureID user_texture_id,const ImVec2 p_min,const ImVec2 p_max,const ImVec2 uv_min,const ImVec2 uv_max,ImU32 col);
+extern  void ImDrawList_AddImageQuad(ImDrawList* self,ImTextureID user_texture_id,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,const ImVec2 uv1,const ImVec2 uv2,const ImVec2 uv3,const ImVec2 uv4,ImU32 col);
+extern  void ImDrawList_AddImageRounded(ImDrawList* self,ImTextureID user_texture_id,const ImVec2 p_min,const ImVec2 p_max,const ImVec2 uv_min,const ImVec2 uv_max,ImU32 col,float rounding,ImDrawFlags flags);
+extern  void ImDrawList_PathClear(ImDrawList* self);
+extern  void ImDrawList_PathLineTo(ImDrawList* self,const ImVec2 pos);
+extern  void ImDrawList_PathLineToMergeDuplicate(ImDrawList* self,const ImVec2 pos);
+extern  void ImDrawList_PathFillConvex(ImDrawList* self,ImU32 col);
+extern  void ImDrawList_PathStroke(ImDrawList* self,ImU32 col,ImDrawFlags flags,float thickness);
+extern  void ImDrawList_PathArcTo(ImDrawList* self,const ImVec2 center,float radius,float a_min,float a_max,int num_segments);
+extern  void ImDrawList_PathArcToFast(ImDrawList* self,const ImVec2 center,float radius,int a_min_of_12,int a_max_of_12);
+extern  void ImDrawList_PathBezierCubicCurveTo(ImDrawList* self,const ImVec2 p2,const ImVec2 p3,const ImVec2 p4,int num_segments);
+extern  void ImDrawList_PathBezierQuadraticCurveTo(ImDrawList* self,const ImVec2 p2,const ImVec2 p3,int num_segments);
+extern  void ImDrawList_PathRect(ImDrawList* self,const ImVec2 rect_min,const ImVec2 rect_max,float rounding,ImDrawFlags flags);
+extern  void ImDrawList_AddCallback(ImDrawList* self,ImDrawCallback callback,void* callback_data);
+extern  void ImDrawList_AddDrawCmd(ImDrawList* self);
+extern  ImDrawList* ImDrawList_CloneOutput(ImDrawList* self);
+extern  void ImDrawList_ChannelsSplit(ImDrawList* self,int count);
+extern  void ImDrawList_ChannelsMerge(ImDrawList* self);
+extern  void ImDrawList_ChannelsSetCurrent(ImDrawList* self,int n);
+extern  void ImDrawList_PrimReserve(ImDrawList* self,int idx_count,int vtx_count);
+extern  void ImDrawList_PrimUnreserve(ImDrawList* self,int idx_count,int vtx_count);
+extern  void ImDrawList_PrimRect(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col);
+extern  void ImDrawList_PrimRectUV(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 uv_a,const ImVec2 uv_b,ImU32 col);
+extern  void ImDrawList_PrimQuadUV(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 d,const ImVec2 uv_a,const ImVec2 uv_b,const ImVec2 uv_c,const ImVec2 uv_d,ImU32 col);
+extern  void ImDrawList_PrimWriteVtx(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col);
+extern  void ImDrawList_PrimWriteIdx(ImDrawList* self,ImDrawIdx idx);
+extern  void ImDrawList_PrimVtx(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col);
+extern  void ImDrawList__ResetForNewFrame(ImDrawList* self);
+extern  void ImDrawList__ClearFreeMemory(ImDrawList* self);
+extern  void ImDrawList__PopUnusedDrawCmd(ImDrawList* self);
+extern  void ImDrawList__TryMergeDrawCmds(ImDrawList* self);
+extern  void ImDrawList__OnChangedClipRect(ImDrawList* self);
+extern  void ImDrawList__OnChangedTextureID(ImDrawList* self);
+extern  void ImDrawList__OnChangedVtxOffset(ImDrawList* self);
+extern  int ImDrawList__CalcCircleAutoSegmentCount(ImDrawList* self,float radius);
+extern  void ImDrawList__PathArcToFastEx(ImDrawList* self,const ImVec2 center,float radius,int a_min_sample,int a_max_sample,int a_step);
+extern  void ImDrawList__PathArcToN(ImDrawList* self,const ImVec2 center,float radius,float a_min,float a_max,int num_segments);
+extern  ImDrawData* ImDrawData_ImDrawData(void);
+extern  void ImDrawData_destroy(ImDrawData* self);
+extern  void ImDrawData_Clear(ImDrawData* self);
+extern  void ImDrawData_DeIndexAllBuffers(ImDrawData* self);
+extern  void ImDrawData_ScaleClipRects(ImDrawData* self,const ImVec2 fb_scale);
+extern  ImFontConfig* ImFontConfig_ImFontConfig(void);
+extern  void ImFontConfig_destroy(ImFontConfig* self);
+extern  ImFontGlyphRangesBuilder* ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder(void);
+extern  void ImFontGlyphRangesBuilder_destroy(ImFontGlyphRangesBuilder* self);
+extern  void ImFontGlyphRangesBuilder_Clear(ImFontGlyphRangesBuilder* self);
+extern  _Bool ImFontGlyphRangesBuilder_GetBit(ImFontGlyphRangesBuilder* self,size_t n);
+extern  void ImFontGlyphRangesBuilder_SetBit(ImFontGlyphRangesBuilder* self,size_t n);
+extern  void ImFontGlyphRangesBuilder_AddChar(ImFontGlyphRangesBuilder* self,ImWchar c);
+extern  void ImFontGlyphRangesBuilder_AddText(ImFontGlyphRangesBuilder* self,const char* text,const char* text_end);
+extern  void ImFontGlyphRangesBuilder_AddRanges(ImFontGlyphRangesBuilder* self,const ImWchar* ranges);
+extern  void ImFontGlyphRangesBuilder_BuildRanges(ImFontGlyphRangesBuilder* self,ImVector_ImWchar* out_ranges);
+extern  ImFontAtlasCustomRect* ImFontAtlasCustomRect_ImFontAtlasCustomRect(void);
+extern  void ImFontAtlasCustomRect_destroy(ImFontAtlasCustomRect* self);
+extern  _Bool ImFontAtlasCustomRect_IsPacked(ImFontAtlasCustomRect* self);
+extern  ImFontAtlas* ImFontAtlas_ImFontAtlas(void);
+extern  void ImFontAtlas_destroy(ImFontAtlas* self);
+extern  ImFont* ImFontAtlas_AddFont(ImFontAtlas* self,const ImFontConfig* font_cfg);
+extern  ImFont* ImFontAtlas_AddFontDefault(ImFontAtlas* self,const ImFontConfig* font_cfg);
+extern  ImFont* ImFontAtlas_AddFontFromFileTTF(ImFontAtlas* self,const char* filename,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges);
+extern  ImFont* ImFontAtlas_AddFontFromMemoryTTF(ImFontAtlas* self,void* font_data,int font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges);
+extern  ImFont* ImFontAtlas_AddFontFromMemoryCompressedTTF(ImFontAtlas* self,const void* compressed_font_data,int compressed_font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges);
+extern  ImFont* ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(ImFontAtlas* self,const char* compressed_font_data_base85,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges);
+extern  void ImFontAtlas_ClearInputData(ImFontAtlas* self);
+extern  void ImFontAtlas_ClearTexData(ImFontAtlas* self);
+extern  void ImFontAtlas_ClearFonts(ImFontAtlas* self);
+extern  void ImFontAtlas_Clear(ImFontAtlas* self);
+extern  _Bool ImFontAtlas_Build(ImFontAtlas* self);
+extern  void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel);
+extern  void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel);
+extern  _Bool ImFontAtlas_IsBuilt(ImFontAtlas* self);
+extern  void ImFontAtlas_SetTexID(ImFontAtlas* self,ImTextureID id);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesDefault(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesKorean(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesJapanese(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesChineseFull(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesCyrillic(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesThai(ImFontAtlas* self);
+extern  const ImWchar* ImFontAtlas_GetGlyphRangesVietnamese(ImFontAtlas* self);
+extern  int ImFontAtlas_AddCustomRectRegular(ImFontAtlas* self,int width,int height);
+extern  int ImFontAtlas_AddCustomRectFontGlyph(ImFontAtlas* self,ImFont* font,ImWchar id,int width,int height,float advance_x,const ImVec2 offset);
+extern  ImFontAtlasCustomRect* ImFontAtlas_GetCustomRectByIndex(ImFontAtlas* self,int index);
+extern  void ImFontAtlas_CalcCustomRectUV(ImFontAtlas* self,const ImFontAtlasCustomRect* rect,ImVec2* out_uv_min,ImVec2* out_uv_max);
+extern  _Bool ImFontAtlas_GetMouseCursorTexData(ImFontAtlas* self,ImGuiMouseCursor cursor,ImVec2* out_offset,ImVec2* out_size,ImVec2 out_uv_border[2],ImVec2 out_uv_fill[2]);
+extern  ImFont* ImFont_ImFont(void);
+extern  void ImFont_destroy(ImFont* self);
+extern  const ImFontGlyph* ImFont_FindGlyph(ImFont* self,ImWchar c);
+extern  const ImFontGlyph* ImFont_FindGlyphNoFallback(ImFont* self,ImWchar c);
+extern  float ImFont_GetCharAdvance(ImFont* self,ImWchar c);
+extern  _Bool ImFont_IsLoaded(ImFont* self);
+extern  const char* ImFont_GetDebugName(ImFont* self);
+extern  void ImFont_CalcTextSizeA(ImVec2 *pOut,ImFont* self,float size,float max_width,float wrap_width,const char* text_begin,const char* text_end,const char** remaining);
+extern  const char* ImFont_CalcWordWrapPositionA(ImFont* self,float scale,const char* text,const char* text_end,float wrap_width);
+extern  void ImFont_RenderChar(ImFont* self,ImDrawList* draw_list,float size,ImVec2 pos,ImU32 col,ImWchar c);
+extern  void ImFont_RenderText(ImFont* self,ImDrawList* draw_list,float size,ImVec2 pos,ImU32 col,const ImVec4 clip_rect,const char* text_begin,const char* text_end,float wrap_width,_Bool cpu_fine_clip);
+extern  void ImFont_BuildLookupTable(ImFont* self);
+extern  void ImFont_ClearOutputData(ImFont* self);
+extern  void ImFont_GrowIndex(ImFont* self,int new_size);
+extern  void ImFont_AddGlyph(ImFont* self,const ImFontConfig* src_cfg,ImWchar c,float x0,float y0,float x1,float y1,float u0,float v0,float u1,float v1,float advance_x);
+extern  void ImFont_AddRemapChar(ImFont* self,ImWchar dst,ImWchar src,_Bool overwrite_dst);
+extern  void ImFont_SetGlyphVisible(ImFont* self,ImWchar c,_Bool visible);
+extern  _Bool ImFont_IsGlyphRangeUnused(ImFont* self,unsigned int c_begin,unsigned int c_last);
+extern  ImGuiViewport* ImGuiViewport_ImGuiViewport(void);
+extern  void ImGuiViewport_destroy(ImGuiViewport* self);
+extern  void ImGuiViewport_GetCenter(ImVec2 *pOut,ImGuiViewport* self);
+extern  void ImGuiViewport_GetWorkCenter(ImVec2 *pOut,ImGuiViewport* self);
+extern  ImGuiPlatformIO* ImGuiPlatformIO_ImGuiPlatformIO(void);
+extern  void ImGuiPlatformIO_destroy(ImGuiPlatformIO* self);
+extern  ImGuiPlatformMonitor* ImGuiPlatformMonitor_ImGuiPlatformMonitor(void);
+extern  void ImGuiPlatformMonitor_destroy(ImGuiPlatformMonitor* self);
+extern  ImGuiPlatformImeData* ImGuiPlatformImeData_ImGuiPlatformImeData(void);
+extern  void ImGuiPlatformImeData_destroy(ImGuiPlatformImeData* self);
+extern  int igGetKeyIndex(ImGuiKey key);
+extern  void igLogText(const char *fmt, ...);
+extern  void ImGuiTextBuffer_appendf(struct ImGuiTextBuffer *buffer, const char *fmt, ...);
+extern  float igGET_FLT_MAX();
+extern  float igGET_FLT_MIN();
+extern  ImVector_ImWchar* ImVector_ImWchar_create();
+extern  void ImVector_ImWchar_destroy(ImVector_ImWchar* self);
+extern  void ImVector_ImWchar_Init(ImVector_ImWchar* p);
+extern  void ImVector_ImWchar_UnInit(ImVector_ImWchar* p);
+
+]]

+ 611 - 0
cimgui/enums.lua

@@ -0,0 +1,611 @@
+local path = (...):gsub("[^%.]*$", "")
+local M = require(path .. "master")
+
+M.ImDrawFlags_None = 0
+M.ImDrawFlags_Closed = 1
+M.ImDrawFlags_RoundCornersTopLeft = 16
+M.ImDrawFlags_RoundCornersTopRight = 32
+M.ImDrawFlags_RoundCornersBottomLeft = 64
+M.ImDrawFlags_RoundCornersBottomRight = 128
+M.ImDrawFlags_RoundCornersNone = 256
+M.ImDrawFlags_RoundCornersTop = 48
+M.ImDrawFlags_RoundCornersBottom = 192
+M.ImDrawFlags_RoundCornersLeft = 80
+M.ImDrawFlags_RoundCornersRight = 160
+M.ImDrawFlags_RoundCornersAll = 240
+M.ImDrawFlags_RoundCornersDefault_ = 240
+M.ImDrawFlags_RoundCornersMask_ = 496
+M.ImDrawListFlags_None = 0
+M.ImDrawListFlags_AntiAliasedLines = 1
+M.ImDrawListFlags_AntiAliasedLinesUseTex = 2
+M.ImDrawListFlags_AntiAliasedFill = 4
+M.ImDrawListFlags_AllowVtxOffset = 8
+M.ImFontAtlasFlags_None = 0
+M.ImFontAtlasFlags_NoPowerOfTwoHeight = 1
+M.ImFontAtlasFlags_NoMouseCursors = 2
+M.ImFontAtlasFlags_NoBakedLines = 4
+M.ImGuiBackendFlags_None = 0
+M.ImGuiBackendFlags_HasGamepad = 1
+M.ImGuiBackendFlags_HasMouseCursors = 2
+M.ImGuiBackendFlags_HasSetMousePos = 4
+M.ImGuiBackendFlags_RendererHasVtxOffset = 8
+M.ImGuiBackendFlags_PlatformHasViewports = 1024
+M.ImGuiBackendFlags_HasMouseHoveredViewport = 2048
+M.ImGuiBackendFlags_RendererHasViewports = 4096
+M.ImGuiButtonFlags_None = 0
+M.ImGuiButtonFlags_MouseButtonLeft = 1
+M.ImGuiButtonFlags_MouseButtonRight = 2
+M.ImGuiButtonFlags_MouseButtonMiddle = 4
+M.ImGuiButtonFlags_MouseButtonMask_ = 7
+M.ImGuiButtonFlags_MouseButtonDefault_ = 1
+M.ImGuiCol_Text = 0
+M.ImGuiCol_TextDisabled = 1
+M.ImGuiCol_WindowBg = 2
+M.ImGuiCol_ChildBg = 3
+M.ImGuiCol_PopupBg = 4
+M.ImGuiCol_Border = 5
+M.ImGuiCol_BorderShadow = 6
+M.ImGuiCol_FrameBg = 7
+M.ImGuiCol_FrameBgHovered = 8
+M.ImGuiCol_FrameBgActive = 9
+M.ImGuiCol_TitleBg = 10
+M.ImGuiCol_TitleBgActive = 11
+M.ImGuiCol_TitleBgCollapsed = 12
+M.ImGuiCol_MenuBarBg = 13
+M.ImGuiCol_ScrollbarBg = 14
+M.ImGuiCol_ScrollbarGrab = 15
+M.ImGuiCol_ScrollbarGrabHovered = 16
+M.ImGuiCol_ScrollbarGrabActive = 17
+M.ImGuiCol_CheckMark = 18
+M.ImGuiCol_SliderGrab = 19
+M.ImGuiCol_SliderGrabActive = 20
+M.ImGuiCol_Button = 21
+M.ImGuiCol_ButtonHovered = 22
+M.ImGuiCol_ButtonActive = 23
+M.ImGuiCol_Header = 24
+M.ImGuiCol_HeaderHovered = 25
+M.ImGuiCol_HeaderActive = 26
+M.ImGuiCol_Separator = 27
+M.ImGuiCol_SeparatorHovered = 28
+M.ImGuiCol_SeparatorActive = 29
+M.ImGuiCol_ResizeGrip = 30
+M.ImGuiCol_ResizeGripHovered = 31
+M.ImGuiCol_ResizeGripActive = 32
+M.ImGuiCol_Tab = 33
+M.ImGuiCol_TabHovered = 34
+M.ImGuiCol_TabActive = 35
+M.ImGuiCol_TabUnfocused = 36
+M.ImGuiCol_TabUnfocusedActive = 37
+M.ImGuiCol_DockingPreview = 38
+M.ImGuiCol_DockingEmptyBg = 39
+M.ImGuiCol_PlotLines = 40
+M.ImGuiCol_PlotLinesHovered = 41
+M.ImGuiCol_PlotHistogram = 42
+M.ImGuiCol_PlotHistogramHovered = 43
+M.ImGuiCol_TableHeaderBg = 44
+M.ImGuiCol_TableBorderStrong = 45
+M.ImGuiCol_TableBorderLight = 46
+M.ImGuiCol_TableRowBg = 47
+M.ImGuiCol_TableRowBgAlt = 48
+M.ImGuiCol_TextSelectedBg = 49
+M.ImGuiCol_DragDropTarget = 50
+M.ImGuiCol_NavHighlight = 51
+M.ImGuiCol_NavWindowingHighlight = 52
+M.ImGuiCol_NavWindowingDimBg = 53
+M.ImGuiCol_ModalWindowDimBg = 54
+M.ImGuiCol_COUNT = 55
+M.ImGuiColorEditFlags_None = 0
+M.ImGuiColorEditFlags_NoAlpha = 2
+M.ImGuiColorEditFlags_NoPicker = 4
+M.ImGuiColorEditFlags_NoOptions = 8
+M.ImGuiColorEditFlags_NoSmallPreview = 16
+M.ImGuiColorEditFlags_NoInputs = 32
+M.ImGuiColorEditFlags_NoTooltip = 64
+M.ImGuiColorEditFlags_NoLabel = 128
+M.ImGuiColorEditFlags_NoSidePreview = 256
+M.ImGuiColorEditFlags_NoDragDrop = 512
+M.ImGuiColorEditFlags_NoBorder = 1024
+M.ImGuiColorEditFlags_AlphaBar = 65536
+M.ImGuiColorEditFlags_AlphaPreview = 131072
+M.ImGuiColorEditFlags_AlphaPreviewHalf = 262144
+M.ImGuiColorEditFlags_HDR = 524288
+M.ImGuiColorEditFlags_DisplayRGB = 1048576
+M.ImGuiColorEditFlags_DisplayHSV = 2097152
+M.ImGuiColorEditFlags_DisplayHex = 4194304
+M.ImGuiColorEditFlags_Uint8 = 8388608
+M.ImGuiColorEditFlags_Float = 16777216
+M.ImGuiColorEditFlags_PickerHueBar = 33554432
+M.ImGuiColorEditFlags_PickerHueWheel = 67108864
+M.ImGuiColorEditFlags_InputRGB = 134217728
+M.ImGuiColorEditFlags_InputHSV = 268435456
+M.ImGuiColorEditFlags_DefaultOptions_ = 177209344
+M.ImGuiColorEditFlags_DisplayMask_ = 7340032
+M.ImGuiColorEditFlags_DataTypeMask_ = 25165824
+M.ImGuiColorEditFlags_PickerMask_ = 100663296
+M.ImGuiColorEditFlags_InputMask_ = 402653184
+M.ImGuiComboFlags_None = 0
+M.ImGuiComboFlags_PopupAlignLeft = 1
+M.ImGuiComboFlags_HeightSmall = 2
+M.ImGuiComboFlags_HeightRegular = 4
+M.ImGuiComboFlags_HeightLarge = 8
+M.ImGuiComboFlags_HeightLargest = 16
+M.ImGuiComboFlags_NoArrowButton = 32
+M.ImGuiComboFlags_NoPreview = 64
+M.ImGuiComboFlags_HeightMask_ = 30
+M.ImGuiCond_None = 0
+M.ImGuiCond_Always = 1
+M.ImGuiCond_Once = 2
+M.ImGuiCond_FirstUseEver = 4
+M.ImGuiCond_Appearing = 8
+M.ImGuiConfigFlags_None = 0
+M.ImGuiConfigFlags_NavEnableKeyboard = 1
+M.ImGuiConfigFlags_NavEnableGamepad = 2
+M.ImGuiConfigFlags_NavEnableSetMousePos = 4
+M.ImGuiConfigFlags_NavNoCaptureKeyboard = 8
+M.ImGuiConfigFlags_NoMouse = 16
+M.ImGuiConfigFlags_NoMouseCursorChange = 32
+M.ImGuiConfigFlags_DockingEnable = 64
+M.ImGuiConfigFlags_ViewportsEnable = 1024
+M.ImGuiConfigFlags_DpiEnableScaleViewports = 16384
+M.ImGuiConfigFlags_DpiEnableScaleFonts = 32768
+M.ImGuiConfigFlags_IsSRGB = 1048576
+M.ImGuiConfigFlags_IsTouchScreen = 2097152
+M.ImGuiDataType_S8 = 0
+M.ImGuiDataType_U8 = 1
+M.ImGuiDataType_S16 = 2
+M.ImGuiDataType_U16 = 3
+M.ImGuiDataType_S32 = 4
+M.ImGuiDataType_U32 = 5
+M.ImGuiDataType_S64 = 6
+M.ImGuiDataType_U64 = 7
+M.ImGuiDataType_Float = 8
+M.ImGuiDataType_Double = 9
+M.ImGuiDataType_COUNT = 10
+M.ImGuiDir_None = -1
+M.ImGuiDir_Left = 0
+M.ImGuiDir_Right = 1
+M.ImGuiDir_Up = 2
+M.ImGuiDir_Down = 3
+M.ImGuiDir_COUNT = 4
+M.ImGuiDockNodeFlags_None = 0
+M.ImGuiDockNodeFlags_KeepAliveOnly = 1
+M.ImGuiDockNodeFlags_NoDockingInCentralNode = 4
+M.ImGuiDockNodeFlags_PassthruCentralNode = 8
+M.ImGuiDockNodeFlags_NoSplit = 16
+M.ImGuiDockNodeFlags_NoResize = 32
+M.ImGuiDockNodeFlags_AutoHideTabBar = 64
+M.ImGuiDragDropFlags_None = 0
+M.ImGuiDragDropFlags_SourceNoPreviewTooltip = 1
+M.ImGuiDragDropFlags_SourceNoDisableHover = 2
+M.ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 4
+M.ImGuiDragDropFlags_SourceAllowNullID = 8
+M.ImGuiDragDropFlags_SourceExtern = 16
+M.ImGuiDragDropFlags_SourceAutoExpirePayload = 32
+M.ImGuiDragDropFlags_AcceptBeforeDelivery = 1024
+M.ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 2048
+M.ImGuiDragDropFlags_AcceptNoPreviewTooltip = 4096
+M.ImGuiDragDropFlags_AcceptPeekOnly = 3072
+M.ImGuiFocusedFlags_None = 0
+M.ImGuiFocusedFlags_ChildWindows = 1
+M.ImGuiFocusedFlags_RootWindow = 2
+M.ImGuiFocusedFlags_AnyWindow = 4
+M.ImGuiFocusedFlags_NoPopupHierarchy = 8
+M.ImGuiFocusedFlags_DockHierarchy = 16
+M.ImGuiFocusedFlags_RootAndChildWindows = 3
+M.ImGuiHoveredFlags_None = 0
+M.ImGuiHoveredFlags_ChildWindows = 1
+M.ImGuiHoveredFlags_RootWindow = 2
+M.ImGuiHoveredFlags_AnyWindow = 4
+M.ImGuiHoveredFlags_NoPopupHierarchy = 8
+M.ImGuiHoveredFlags_DockHierarchy = 16
+M.ImGuiHoveredFlags_AllowWhenBlockedByPopup = 32
+M.ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 128
+M.ImGuiHoveredFlags_AllowWhenOverlapped = 256
+M.ImGuiHoveredFlags_AllowWhenDisabled = 512
+M.ImGuiHoveredFlags_RectOnly = 416
+M.ImGuiHoveredFlags_RootAndChildWindows = 3
+M.ImGuiInputTextFlags_None = 0
+M.ImGuiInputTextFlags_CharsDecimal = 1
+M.ImGuiInputTextFlags_CharsHexadecimal = 2
+M.ImGuiInputTextFlags_CharsUppercase = 4
+M.ImGuiInputTextFlags_CharsNoBlank = 8
+M.ImGuiInputTextFlags_AutoSelectAll = 16
+M.ImGuiInputTextFlags_EnterReturnsTrue = 32
+M.ImGuiInputTextFlags_CallbackCompletion = 64
+M.ImGuiInputTextFlags_CallbackHistory = 128
+M.ImGuiInputTextFlags_CallbackAlways = 256
+M.ImGuiInputTextFlags_CallbackCharFilter = 512
+M.ImGuiInputTextFlags_AllowTabInput = 1024
+M.ImGuiInputTextFlags_CtrlEnterForNewLine = 2048
+M.ImGuiInputTextFlags_NoHorizontalScroll = 4096
+M.ImGuiInputTextFlags_AlwaysOverwrite = 8192
+M.ImGuiInputTextFlags_ReadOnly = 16384
+M.ImGuiInputTextFlags_Password = 32768
+M.ImGuiInputTextFlags_NoUndoRedo = 65536
+M.ImGuiInputTextFlags_CharsScientific = 131072
+M.ImGuiInputTextFlags_CallbackResize = 262144
+M.ImGuiInputTextFlags_CallbackEdit = 524288
+M.ImGuiKeyModFlags_None = 0
+M.ImGuiKeyModFlags_Ctrl = 1
+M.ImGuiKeyModFlags_Shift = 2
+M.ImGuiKeyModFlags_Alt = 4
+M.ImGuiKeyModFlags_Super = 8
+M.ImGuiKey_None = 0
+M.ImGuiKey_Tab = 512
+M.ImGuiKey_LeftArrow = 513
+M.ImGuiKey_RightArrow = 514
+M.ImGuiKey_UpArrow = 515
+M.ImGuiKey_DownArrow = 516
+M.ImGuiKey_PageUp = 517
+M.ImGuiKey_PageDown = 518
+M.ImGuiKey_Home = 519
+M.ImGuiKey_End = 520
+M.ImGuiKey_Insert = 521
+M.ImGuiKey_Delete = 522
+M.ImGuiKey_Backspace = 523
+M.ImGuiKey_Space = 524
+M.ImGuiKey_Enter = 525
+M.ImGuiKey_Escape = 526
+M.ImGuiKey_LeftCtrl = 527
+M.ImGuiKey_LeftShift = 528
+M.ImGuiKey_LeftAlt = 529
+M.ImGuiKey_LeftSuper = 530
+M.ImGuiKey_RightCtrl = 531
+M.ImGuiKey_RightShift = 532
+M.ImGuiKey_RightAlt = 533
+M.ImGuiKey_RightSuper = 534
+M.ImGuiKey_Menu = 535
+M.ImGuiKey_0 = 536
+M.ImGuiKey_1 = 537
+M.ImGuiKey_2 = 538
+M.ImGuiKey_3 = 539
+M.ImGuiKey_4 = 540
+M.ImGuiKey_5 = 541
+M.ImGuiKey_6 = 542
+M.ImGuiKey_7 = 543
+M.ImGuiKey_8 = 544
+M.ImGuiKey_9 = 545
+M.ImGuiKey_A = 546
+M.ImGuiKey_B = 547
+M.ImGuiKey_C = 548
+M.ImGuiKey_D = 549
+M.ImGuiKey_E = 550
+M.ImGuiKey_F = 551
+M.ImGuiKey_G = 552
+M.ImGuiKey_H = 553
+M.ImGuiKey_I = 554
+M.ImGuiKey_J = 555
+M.ImGuiKey_K = 556
+M.ImGuiKey_L = 557
+M.ImGuiKey_M = 558
+M.ImGuiKey_N = 559
+M.ImGuiKey_O = 560
+M.ImGuiKey_P = 561
+M.ImGuiKey_Q = 562
+M.ImGuiKey_R = 563
+M.ImGuiKey_S = 564
+M.ImGuiKey_T = 565
+M.ImGuiKey_U = 566
+M.ImGuiKey_V = 567
+M.ImGuiKey_W = 568
+M.ImGuiKey_X = 569
+M.ImGuiKey_Y = 570
+M.ImGuiKey_Z = 571
+M.ImGuiKey_F1 = 572
+M.ImGuiKey_F2 = 573
+M.ImGuiKey_F3 = 574
+M.ImGuiKey_F4 = 575
+M.ImGuiKey_F5 = 576
+M.ImGuiKey_F6 = 577
+M.ImGuiKey_F7 = 578
+M.ImGuiKey_F8 = 579
+M.ImGuiKey_F9 = 580
+M.ImGuiKey_F10 = 581
+M.ImGuiKey_F11 = 582
+M.ImGuiKey_F12 = 583
+M.ImGuiKey_Apostrophe = 584
+M.ImGuiKey_Comma = 585
+M.ImGuiKey_Minus = 586
+M.ImGuiKey_Period = 587
+M.ImGuiKey_Slash = 588
+M.ImGuiKey_Semicolon = 589
+M.ImGuiKey_Equal = 590
+M.ImGuiKey_LeftBracket = 591
+M.ImGuiKey_Backslash = 592
+M.ImGuiKey_RightBracket = 593
+M.ImGuiKey_GraveAccent = 594
+M.ImGuiKey_CapsLock = 595
+M.ImGuiKey_ScrollLock = 596
+M.ImGuiKey_NumLock = 597
+M.ImGuiKey_PrintScreen = 598
+M.ImGuiKey_Pause = 599
+M.ImGuiKey_Keypad0 = 600
+M.ImGuiKey_Keypad1 = 601
+M.ImGuiKey_Keypad2 = 602
+M.ImGuiKey_Keypad3 = 603
+M.ImGuiKey_Keypad4 = 604
+M.ImGuiKey_Keypad5 = 605
+M.ImGuiKey_Keypad6 = 606
+M.ImGuiKey_Keypad7 = 607
+M.ImGuiKey_Keypad8 = 608
+M.ImGuiKey_Keypad9 = 609
+M.ImGuiKey_KeypadDecimal = 610
+M.ImGuiKey_KeypadDivide = 611
+M.ImGuiKey_KeypadMultiply = 612
+M.ImGuiKey_KeypadSubtract = 613
+M.ImGuiKey_KeypadAdd = 614
+M.ImGuiKey_KeypadEnter = 615
+M.ImGuiKey_KeypadEqual = 616
+M.ImGuiKey_GamepadStart = 617
+M.ImGuiKey_GamepadBack = 618
+M.ImGuiKey_GamepadFaceUp = 619
+M.ImGuiKey_GamepadFaceDown = 620
+M.ImGuiKey_GamepadFaceLeft = 621
+M.ImGuiKey_GamepadFaceRight = 622
+M.ImGuiKey_GamepadDpadUp = 623
+M.ImGuiKey_GamepadDpadDown = 624
+M.ImGuiKey_GamepadDpadLeft = 625
+M.ImGuiKey_GamepadDpadRight = 626
+M.ImGuiKey_GamepadL1 = 627
+M.ImGuiKey_GamepadR1 = 628
+M.ImGuiKey_GamepadL2 = 629
+M.ImGuiKey_GamepadR2 = 630
+M.ImGuiKey_GamepadL3 = 631
+M.ImGuiKey_GamepadR3 = 632
+M.ImGuiKey_GamepadLStickUp = 633
+M.ImGuiKey_GamepadLStickDown = 634
+M.ImGuiKey_GamepadLStickLeft = 635
+M.ImGuiKey_GamepadLStickRight = 636
+M.ImGuiKey_GamepadRStickUp = 637
+M.ImGuiKey_GamepadRStickDown = 638
+M.ImGuiKey_GamepadRStickLeft = 639
+M.ImGuiKey_GamepadRStickRight = 640
+M.ImGuiKey_ModCtrl = 641
+M.ImGuiKey_ModShift = 642
+M.ImGuiKey_ModAlt = 643
+M.ImGuiKey_ModSuper = 644
+M.ImGuiKey_COUNT = 645
+M.ImGuiKey_NamedKey_BEGIN = 512
+M.ImGuiKey_NamedKey_END = 645
+M.ImGuiKey_NamedKey_COUNT = 133
+M.ImGuiKey_KeysData_SIZE = 645
+M.ImGuiKey_KeysData_OFFSET = 0
+M.ImGuiMouseButton_Left = 0
+M.ImGuiMouseButton_Right = 1
+M.ImGuiMouseButton_Middle = 2
+M.ImGuiMouseButton_COUNT = 5
+M.ImGuiMouseCursor_None = -1
+M.ImGuiMouseCursor_Arrow = 0
+M.ImGuiMouseCursor_TextInput = 1
+M.ImGuiMouseCursor_ResizeAll = 2
+M.ImGuiMouseCursor_ResizeNS = 3
+M.ImGuiMouseCursor_ResizeEW = 4
+M.ImGuiMouseCursor_ResizeNESW = 5
+M.ImGuiMouseCursor_ResizeNWSE = 6
+M.ImGuiMouseCursor_Hand = 7
+M.ImGuiMouseCursor_NotAllowed = 8
+M.ImGuiMouseCursor_COUNT = 9
+M.ImGuiNavInput_Activate = 0
+M.ImGuiNavInput_Cancel = 1
+M.ImGuiNavInput_Input = 2
+M.ImGuiNavInput_Menu = 3
+M.ImGuiNavInput_DpadLeft = 4
+M.ImGuiNavInput_DpadRight = 5
+M.ImGuiNavInput_DpadUp = 6
+M.ImGuiNavInput_DpadDown = 7
+M.ImGuiNavInput_LStickLeft = 8
+M.ImGuiNavInput_LStickRight = 9
+M.ImGuiNavInput_LStickUp = 10
+M.ImGuiNavInput_LStickDown = 11
+M.ImGuiNavInput_FocusPrev = 12
+M.ImGuiNavInput_FocusNext = 13
+M.ImGuiNavInput_TweakSlow = 14
+M.ImGuiNavInput_TweakFast = 15
+M.ImGuiNavInput_KeyLeft_ = 16
+M.ImGuiNavInput_KeyRight_ = 17
+M.ImGuiNavInput_KeyUp_ = 18
+M.ImGuiNavInput_KeyDown_ = 19
+M.ImGuiNavInput_COUNT = 20
+M.ImGuiPopupFlags_None = 0
+M.ImGuiPopupFlags_MouseButtonLeft = 0
+M.ImGuiPopupFlags_MouseButtonRight = 1
+M.ImGuiPopupFlags_MouseButtonMiddle = 2
+M.ImGuiPopupFlags_MouseButtonMask_ = 31
+M.ImGuiPopupFlags_MouseButtonDefault_ = 1
+M.ImGuiPopupFlags_NoOpenOverExistingPopup = 32
+M.ImGuiPopupFlags_NoOpenOverItems = 64
+M.ImGuiPopupFlags_AnyPopupId = 128
+M.ImGuiPopupFlags_AnyPopupLevel = 256
+M.ImGuiPopupFlags_AnyPopup = 384
+M.ImGuiSelectableFlags_None = 0
+M.ImGuiSelectableFlags_DontClosePopups = 1
+M.ImGuiSelectableFlags_SpanAllColumns = 2
+M.ImGuiSelectableFlags_AllowDoubleClick = 4
+M.ImGuiSelectableFlags_Disabled = 8
+M.ImGuiSelectableFlags_AllowItemOverlap = 16
+M.ImGuiSliderFlags_None = 0
+M.ImGuiSliderFlags_AlwaysClamp = 16
+M.ImGuiSliderFlags_Logarithmic = 32
+M.ImGuiSliderFlags_NoRoundToFormat = 64
+M.ImGuiSliderFlags_NoInput = 128
+M.ImGuiSliderFlags_InvalidMask_ = 1879048207
+M.ImGuiSortDirection_None = 0
+M.ImGuiSortDirection_Ascending = 1
+M.ImGuiSortDirection_Descending = 2
+M.ImGuiStyleVar_Alpha = 0
+M.ImGuiStyleVar_DisabledAlpha = 1
+M.ImGuiStyleVar_WindowPadding = 2
+M.ImGuiStyleVar_WindowRounding = 3
+M.ImGuiStyleVar_WindowBorderSize = 4
+M.ImGuiStyleVar_WindowMinSize = 5
+M.ImGuiStyleVar_WindowTitleAlign = 6
+M.ImGuiStyleVar_ChildRounding = 7
+M.ImGuiStyleVar_ChildBorderSize = 8
+M.ImGuiStyleVar_PopupRounding = 9
+M.ImGuiStyleVar_PopupBorderSize = 10
+M.ImGuiStyleVar_FramePadding = 11
+M.ImGuiStyleVar_FrameRounding = 12
+M.ImGuiStyleVar_FrameBorderSize = 13
+M.ImGuiStyleVar_ItemSpacing = 14
+M.ImGuiStyleVar_ItemInnerSpacing = 15
+M.ImGuiStyleVar_IndentSpacing = 16
+M.ImGuiStyleVar_CellPadding = 17
+M.ImGuiStyleVar_ScrollbarSize = 18
+M.ImGuiStyleVar_ScrollbarRounding = 19
+M.ImGuiStyleVar_GrabMinSize = 20
+M.ImGuiStyleVar_GrabRounding = 21
+M.ImGuiStyleVar_TabRounding = 22
+M.ImGuiStyleVar_ButtonTextAlign = 23
+M.ImGuiStyleVar_SelectableTextAlign = 24
+M.ImGuiStyleVar_COUNT = 25
+M.ImGuiTabBarFlags_None = 0
+M.ImGuiTabBarFlags_Reorderable = 1
+M.ImGuiTabBarFlags_AutoSelectNewTabs = 2
+M.ImGuiTabBarFlags_TabListPopupButton = 4
+M.ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 8
+M.ImGuiTabBarFlags_NoTabListScrollingButtons = 16
+M.ImGuiTabBarFlags_NoTooltip = 32
+M.ImGuiTabBarFlags_FittingPolicyResizeDown = 64
+M.ImGuiTabBarFlags_FittingPolicyScroll = 128
+M.ImGuiTabBarFlags_FittingPolicyMask_ = 192
+M.ImGuiTabBarFlags_FittingPolicyDefault_ = 64
+M.ImGuiTabItemFlags_None = 0
+M.ImGuiTabItemFlags_UnsavedDocument = 1
+M.ImGuiTabItemFlags_SetSelected = 2
+M.ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 4
+M.ImGuiTabItemFlags_NoPushId = 8
+M.ImGuiTabItemFlags_NoTooltip = 16
+M.ImGuiTabItemFlags_NoReorder = 32
+M.ImGuiTabItemFlags_Leading = 64
+M.ImGuiTabItemFlags_Trailing = 128
+M.ImGuiTableBgTarget_None = 0
+M.ImGuiTableBgTarget_RowBg0 = 1
+M.ImGuiTableBgTarget_RowBg1 = 2
+M.ImGuiTableBgTarget_CellBg = 3
+M.ImGuiTableColumnFlags_None = 0
+M.ImGuiTableColumnFlags_Disabled = 1
+M.ImGuiTableColumnFlags_DefaultHide = 2
+M.ImGuiTableColumnFlags_DefaultSort = 4
+M.ImGuiTableColumnFlags_WidthStretch = 8
+M.ImGuiTableColumnFlags_WidthFixed = 16
+M.ImGuiTableColumnFlags_NoResize = 32
+M.ImGuiTableColumnFlags_NoReorder = 64
+M.ImGuiTableColumnFlags_NoHide = 128
+M.ImGuiTableColumnFlags_NoClip = 256
+M.ImGuiTableColumnFlags_NoSort = 512
+M.ImGuiTableColumnFlags_NoSortAscending = 1024
+M.ImGuiTableColumnFlags_NoSortDescending = 2048
+M.ImGuiTableColumnFlags_NoHeaderLabel = 4096
+M.ImGuiTableColumnFlags_NoHeaderWidth = 8192
+M.ImGuiTableColumnFlags_PreferSortAscending = 16384
+M.ImGuiTableColumnFlags_PreferSortDescending = 32768
+M.ImGuiTableColumnFlags_IndentEnable = 65536
+M.ImGuiTableColumnFlags_IndentDisable = 131072
+M.ImGuiTableColumnFlags_IsEnabled = 16777216
+M.ImGuiTableColumnFlags_IsVisible = 33554432
+M.ImGuiTableColumnFlags_IsSorted = 67108864
+M.ImGuiTableColumnFlags_IsHovered = 134217728
+M.ImGuiTableColumnFlags_WidthMask_ = 24
+M.ImGuiTableColumnFlags_IndentMask_ = 196608
+M.ImGuiTableColumnFlags_StatusMask_ = 251658240
+M.ImGuiTableColumnFlags_NoDirectResize_ = 1073741824
+M.ImGuiTableFlags_None = 0
+M.ImGuiTableFlags_Resizable = 1
+M.ImGuiTableFlags_Reorderable = 2
+M.ImGuiTableFlags_Hideable = 4
+M.ImGuiTableFlags_Sortable = 8
+M.ImGuiTableFlags_NoSavedSettings = 16
+M.ImGuiTableFlags_ContextMenuInBody = 32
+M.ImGuiTableFlags_RowBg = 64
+M.ImGuiTableFlags_BordersInnerH = 128
+M.ImGuiTableFlags_BordersOuterH = 256
+M.ImGuiTableFlags_BordersInnerV = 512
+M.ImGuiTableFlags_BordersOuterV = 1024
+M.ImGuiTableFlags_BordersH = 384
+M.ImGuiTableFlags_BordersV = 1536
+M.ImGuiTableFlags_BordersInner = 640
+M.ImGuiTableFlags_BordersOuter = 1280
+M.ImGuiTableFlags_Borders = 1920
+M.ImGuiTableFlags_NoBordersInBody = 2048
+M.ImGuiTableFlags_NoBordersInBodyUntilResize = 4096
+M.ImGuiTableFlags_SizingFixedFit = 8192
+M.ImGuiTableFlags_SizingFixedSame = 16384
+M.ImGuiTableFlags_SizingStretchProp = 24576
+M.ImGuiTableFlags_SizingStretchSame = 32768
+M.ImGuiTableFlags_NoHostExtendX = 65536
+M.ImGuiTableFlags_NoHostExtendY = 131072
+M.ImGuiTableFlags_NoKeepColumnsVisible = 262144
+M.ImGuiTableFlags_PreciseWidths = 524288
+M.ImGuiTableFlags_NoClip = 1048576
+M.ImGuiTableFlags_PadOuterX = 2097152
+M.ImGuiTableFlags_NoPadOuterX = 4194304
+M.ImGuiTableFlags_NoPadInnerX = 8388608
+M.ImGuiTableFlags_ScrollX = 16777216
+M.ImGuiTableFlags_ScrollY = 33554432
+M.ImGuiTableFlags_SortMulti = 67108864
+M.ImGuiTableFlags_SortTristate = 134217728
+M.ImGuiTableFlags_SizingMask_ = 57344
+M.ImGuiTableRowFlags_None = 0
+M.ImGuiTableRowFlags_Headers = 1
+M.ImGuiTreeNodeFlags_None = 0
+M.ImGuiTreeNodeFlags_Selected = 1
+M.ImGuiTreeNodeFlags_Framed = 2
+M.ImGuiTreeNodeFlags_AllowItemOverlap = 4
+M.ImGuiTreeNodeFlags_NoTreePushOnOpen = 8
+M.ImGuiTreeNodeFlags_NoAutoOpenOnLog = 16
+M.ImGuiTreeNodeFlags_DefaultOpen = 32
+M.ImGuiTreeNodeFlags_OpenOnDoubleClick = 64
+M.ImGuiTreeNodeFlags_OpenOnArrow = 128
+M.ImGuiTreeNodeFlags_Leaf = 256
+M.ImGuiTreeNodeFlags_Bullet = 512
+M.ImGuiTreeNodeFlags_FramePadding = 1024
+M.ImGuiTreeNodeFlags_SpanAvailWidth = 2048
+M.ImGuiTreeNodeFlags_SpanFullWidth = 4096
+M.ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 8192
+M.ImGuiTreeNodeFlags_CollapsingHeader = 26
+M.ImGuiViewportFlags_None = 0
+M.ImGuiViewportFlags_IsPlatformWindow = 1
+M.ImGuiViewportFlags_IsPlatformMonitor = 2
+M.ImGuiViewportFlags_OwnedByApp = 4
+M.ImGuiViewportFlags_NoDecoration = 8
+M.ImGuiViewportFlags_NoTaskBarIcon = 16
+M.ImGuiViewportFlags_NoFocusOnAppearing = 32
+M.ImGuiViewportFlags_NoFocusOnClick = 64
+M.ImGuiViewportFlags_NoInputs = 128
+M.ImGuiViewportFlags_NoRendererClear = 256
+M.ImGuiViewportFlags_TopMost = 512
+M.ImGuiViewportFlags_Minimized = 1024
+M.ImGuiViewportFlags_NoAutoMerge = 2048
+M.ImGuiViewportFlags_CanHostOtherWindows = 4096
+M.ImGuiWindowFlags_None = 0
+M.ImGuiWindowFlags_NoTitleBar = 1
+M.ImGuiWindowFlags_NoResize = 2
+M.ImGuiWindowFlags_NoMove = 4
+M.ImGuiWindowFlags_NoScrollbar = 8
+M.ImGuiWindowFlags_NoScrollWithMouse = 16
+M.ImGuiWindowFlags_NoCollapse = 32
+M.ImGuiWindowFlags_AlwaysAutoResize = 64
+M.ImGuiWindowFlags_NoBackground = 128
+M.ImGuiWindowFlags_NoSavedSettings = 256
+M.ImGuiWindowFlags_NoMouseInputs = 512
+M.ImGuiWindowFlags_MenuBar = 1024
+M.ImGuiWindowFlags_HorizontalScrollbar = 2048
+M.ImGuiWindowFlags_NoFocusOnAppearing = 4096
+M.ImGuiWindowFlags_NoBringToFrontOnFocus = 8192
+M.ImGuiWindowFlags_AlwaysVerticalScrollbar = 16384
+M.ImGuiWindowFlags_AlwaysHorizontalScrollbar = 32768
+M.ImGuiWindowFlags_AlwaysUseWindowPadding = 65536
+M.ImGuiWindowFlags_NoNavInputs = 262144
+M.ImGuiWindowFlags_NoNavFocus = 524288
+M.ImGuiWindowFlags_UnsavedDocument = 1048576
+M.ImGuiWindowFlags_NoDocking = 2097152
+M.ImGuiWindowFlags_NoNav = 786432
+M.ImGuiWindowFlags_NoDecoration = 43
+M.ImGuiWindowFlags_NoInputs = 786944
+M.ImGuiWindowFlags_NavFlattened = 8388608
+M.ImGuiWindowFlags_ChildWindow = 16777216
+M.ImGuiWindowFlags_Tooltip = 33554432
+M.ImGuiWindowFlags_Popup = 67108864
+M.ImGuiWindowFlags_Modal = 134217728
+M.ImGuiWindowFlags_ChildMenu = 268435456
+M.ImGuiWindowFlags_DockNodeHost = 536870912

+ 0 - 0
cimgui/ignored_defaults.txt


+ 14 - 0
cimgui/init.lua

@@ -0,0 +1,14 @@
+local path = (...):gsub(".init$", "") .. "."
+
+require(path .. "cdef")
+
+local M = require(path .. "master")
+local ffi = require("ffi")
+local library_path = assert(package.searchpath("cimgui", package.cpath))
+M.C = ffi.load(library_path)
+
+require(path .. "enums")
+require(path .. "wrap")
+require(path .. "love")
+
+return M

+ 435 - 0
cimgui/love.lua

@@ -0,0 +1,435 @@
+-- RenderDrawLists is based on love-imgui (https://github.com/slages/love-imgui) Copyright (c) 2016 slages, licensed under the MIT license
+
+local path = (...):gsub("[^%.]*$", "")
+local M = require(path .. "master")
+local ffi = require("ffi")
+local bit = require("bit")
+
+local C = M.C
+
+local L = {}
+M.love = L
+
+
+local vertexformat = {
+    {"VertexPosition", "float", 2},
+    {"VertexTexCoord", "float", 2},
+    {"VertexColor", "byte", 4}
+}
+
+local lovekeymap = {
+    ["return"] = C.ImGuiKey_Enter,
+    ["escape"] = C.ImGuiKey_Escape,
+    ["backspace"] = C.ImGuiKey_Backspace,
+    ["tab"] = C.ImGuiKey_Tab,
+    ["space"] = C.ImGuiKey_Space,
+    [","] = C.ImGuiKey_Comma,
+    ["-"] = C.ImGuiKey_Minus,
+    ["."] = C.ImGuiKey_Period,
+    ["/"] = C.ImGuiKey_Slash,
+
+    ["0"] = C.ImGuiKey_0,
+    ["1"] = C.ImGuiKey_1,
+    ["2"] = C.ImGuiKey_2,
+    ["3"] = C.ImGuiKey_3,
+    ["4"] = C.ImGuiKey_4,
+    ["5"] = C.ImGuiKey_5,
+    ["6"] = C.ImGuiKey_6,
+    ["7"] = C.ImGuiKey_7,
+    ["8"] = C.ImGuiKey_8,
+    ["9"] = C.ImGuiKey_9,
+
+    [";"] = C.ImGuiKey_Semicolon,
+    ["="] = C.ImGuiKey_Equal,
+
+    ["["] = C.ImGuiKey_LeftBracket,
+    ["\\"] = C.ImGuiKey_Backslash,
+    ["]"] = C.ImGuiKey_RightBracket,
+    ["`"] = C.ImGuiKey_GraveAccent,
+
+    ["a"] = C.ImGuiKey_A,
+    ["b"] = C.ImGuiKey_B,
+    ["c"] = C.ImGuiKey_C,
+    ["d"] = C.ImGuiKey_D,
+    ["e"] = C.ImGuiKey_E,
+    ["f"] = C.ImGuiKey_F,
+    ["g"] = C.ImGuiKey_G,
+    ["h"] = C.ImGuiKey_H,
+    ["i"] = C.ImGuiKey_I,
+    ["j"] = C.ImGuiKey_J,
+    ["k"] = C.ImGuiKey_K,
+    ["l"] = C.ImGuiKey_L,
+    ["m"] = C.ImGuiKey_M,
+    ["n"] = C.ImGuiKey_N,
+    ["o"] = C.ImGuiKey_O,
+    ["p"] = C.ImGuiKey_P,
+    ["q"] = C.ImGuiKey_Q,
+    ["r"] = C.ImGuiKey_R,
+    ["s"] = C.ImGuiKey_S,
+    ["t"] = C.ImGuiKey_T,
+    ["u"] = C.ImGuiKey_U,
+    ["v"] = C.ImGuiKey_V,
+    ["w"] = C.ImGuiKey_W,
+    ["x"] = C.ImGuiKey_X,
+    ["y"] = C.ImGuiKey_Y,
+    ["z"] = C.ImGuiKey_Z,
+
+    ["capslock"] = C.ImGuiKey_CapsLock,
+
+    ["f1"] = C.ImGuiKey_F1,
+    ["f2"] = C.ImGuiKey_F2,
+    ["f3"] = C.ImGuiKey_F3,
+    ["f4"] = C.ImGuiKey_F4,
+    ["f5"] = C.ImGuiKey_F5,
+    ["f6"] = C.ImGuiKey_F6,
+    ["f7"] = C.ImGuiKey_F7,
+    ["f8"] = C.ImGuiKey_F8,
+    ["f9"] = C.ImGuiKey_F9,
+    ["f10"] = C.ImGuiKey_F10,
+    ["f11"] = C.ImGuiKey_F11,
+    ["f12"] = C.ImGuiKey_F12,
+
+    ["printscreen"] = C.ImGuiKey_PrintScreen,
+    ["scrolllock"] = C.ImGuiKey_ScrollLock,
+    ["pause"] = C.ImGuiKey_Pause,
+    ["insert"] = C.ImGuiKey_Insert,
+    ["home"] = C.ImGuiKey_Home,
+    ["pageup"] = C.ImGuiKey_PageUp,
+    ["delete"] = C.ImGuiKey_Delete,
+    ["end"] = C.ImGuiKey_End,
+    ["pagedown"] = C.ImGuiKey_PageDown,
+    ["right"] = C.ImGuiKey_RightArrow,
+    ["left"] = C.ImGuiKey_LeftArrow,
+    ["down"] = C.ImGuiKey_DownArrow,
+    ["up"] = C.ImGuiKey_UpArrow,
+
+    ["numlock"] = C.ImGuiKey_NumLock,
+    ["kp/"] = C.ImGuiKey_KeypadDivide,
+    ["kp*"] = C.ImGuiKey_KeypadMultiply,
+    ["kp-"] = C.ImGuiKey_KeypadSubtract,
+    ["kp+"] = C.ImGuiKey_KeypadAdd,
+    ["kpenter"] = C.ImGuiKey_KeypadEnter,
+    ["kp0"] = C.ImGuiKey_Keypad0,
+    ["kp1"] = C.ImGuiKey_Keypad1,
+    ["kp2"] = C.ImGuiKey_Keypad2,
+    ["kp3"] = C.ImGuiKey_Keypad3,
+    ["kp4"] = C.ImGuiKey_Keypad4,
+    ["kp5"] = C.ImGuiKey_Keypad5,
+    ["kp6"] = C.ImGuiKey_Keypad6,
+    ["kp7"] = C.ImGuiKey_Keypad7,
+    ["kp8"] = C.ImGuiKey_Keypad8,
+    ["kp9"] = C.ImGuiKey_Keypad9,
+    ["kp."] = C.ImGuiKey_KeypadDecimal,
+    ["kp="] = C.ImGuiKey_KeypadEqual,
+
+    ["menu"] = C.ImGuiKey_Menu,
+
+    ["lctrl"] = {C.ImGuiKey_LeftCtrl, C.ImGuiKey_ModCtrl},
+    ["lshift"] = {C.ImGuiKey_LeftShift, C.ImGuiKey_ModShift},
+    ["lalt"] = {C.ImGuiKey_LeftAlt, C.ImGuiKey_ModAlt},
+    ["lgui"] = {C.ImGuiKey_LeftSuper, C.ImGuiKey_ModSuper},
+    ["rctrl"] = {C.ImGuiKey_RightCtrl, C.ImGuiKey_ModCtrl},
+    ["rshift"] = {C.ImGuiKey_RightShift, C.ImGuiKey_ModShift},
+    ["ralt"] = {C.ImGuiKey_RightAlt, C.ImGuiKey_ModAlt},
+    ["rgui"] = {C.ImGuiKey_RightSuper, C.ImGuiKey_ModSuper},
+}
+
+local textureObject
+local strings = {}
+
+L._textures = setmetatable({},{__mode="v"})
+
+function L.Init()
+    C.igCreateContext(nil)
+    L.BuildFontAtlas()
+
+    local io = C.igGetIO()
+
+    io.GetClipboardTextFn = function(userdata)
+        return love.system.getClipboardText()
+    end
+    io.SetClipboardTextFn = function(userdata, text)
+        love.system.setClipboardText(ffi.string(text))
+    end
+
+    local dpiscale = love.window.getDPIScale()
+    io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.x = dpiscale, dpiscale
+
+    love.filesystem.createDirectory("/")
+    strings.ini_filename = love.filesystem.getSaveDirectory() .. "/imgui.ini"
+    io.IniFilename = strings.ini_filename
+
+    strings.impl_name = "cimgui-love"
+    io.BackendPlatformName = strings.impl_name
+    io.BackendRendererName = strings.impl_name
+
+    io.BackendFlags = bit.bor(C.ImGuiBackendFlags_HasMouseCursors, C.ImGuiBackendFlags_HasSetMousePos)
+end
+
+function L.BuildFontAtlas()
+    local io = C.igGetIO()
+    local pixels, width, height = ffi.new("unsigned char*[1]"), ffi.new("int[1]"), ffi.new("int[1]")
+    C.ImFontAtlas_GetTexDataAsRGBA32(io.Fonts, pixels, width, height, nil)
+    local imgdata = love.image.newImageData(width[0], height[0], "rgba8", ffi.string(pixels[0], width[0]*height[0]*4))
+    textureObject = love.graphics.newImage(imgdata)
+end
+
+function L.Update(dt)
+    local io = C.igGetIO()
+    io.DisplaySize.x, io.DisplaySize.y = love.graphics.getDimensions()
+    io.DeltaTime = dt
+
+    if io.WantSetMousePos then
+        love.mouse.setPosition(io.MousePos.x, io.MousePos.y)
+    end
+end
+
+local function love_texture_test(t)
+    return t:typeOf("Texture")
+end
+
+local cursors = {
+    [C.ImGuiMouseCursor_Arrow] = love.mouse.getSystemCursor("arrow"),
+    [C.ImGuiMouseCursor_TextInput] = love.mouse.getSystemCursor("ibeam"),
+    [C.ImGuiMouseCursor_ResizeAll] = love.mouse.getSystemCursor("sizeall"),
+    [C.ImGuiMouseCursor_ResizeNS] = love.mouse.getSystemCursor("sizens"),
+    [C.ImGuiMouseCursor_ResizeEW] = love.mouse.getSystemCursor("sizewe"),
+    [C.ImGuiMouseCursor_ResizeNESW] = love.mouse.getSystemCursor("sizenesw"),
+    [C.ImGuiMouseCursor_ResizeNWSE] = love.mouse.getSystemCursor("sizenwse"),
+    [C.ImGuiMouseCursor_Hand] = love.mouse.getSystemCursor("hand"),
+    [C.ImGuiMouseCursor_NotAllowed] = love.mouse.getSystemCursor("no"),
+}
+
+function L.RenderDrawLists()
+    local io = C.igGetIO()
+    local data = C.igGetDrawData()
+
+    -- change mouse cursor
+    if bit.band(io.ConfigFlags, C.ImGuiConfigFlags_NoMouseCursorChange) ~= C.ImGuiConfigFlags_NoMouseCursorChange then
+        local cursor = cursors[C.igGetMouseCursor()]
+        if io.MouseDrawCursor or not cursor then
+            love.mouse.setVisible(false) -- Hide OS mouse cursor if ImGui is drawing it
+        else
+            love.mouse.setVisible(true)
+            love.mouse.setCursor(cursor)
+        end
+    end
+
+    -- Avoid rendering when minimized, scale coordinates for retina displays
+    -- (screen coordinates != framebuffer coordinates)
+    if io.DisplaySize.x == 0 or io.DisplaySize.y == 0 or not love.window.isVisible() then return end
+    C.ImDrawData_ScaleClipRects(data, io.DisplayFramebufferScale)
+
+    for i = 0, data.CmdListsCount - 1 do
+        local cmd_list = data.CmdLists[i]
+        local VtxSize = cmd_list.VtxBuffer.Size*ffi.sizeof("ImDrawVert")
+        local meshdata = love.image.newImageData(VtxSize/4, 1)
+        ffi.copy(meshdata:getFFIPointer(), cmd_list.VtxBuffer.Data, VtxSize)
+        local mesh = love.graphics.newMesh(vertexformat, meshdata, "triangles", "static")
+
+        local IdxBuffer = {}
+        for k = 1, cmd_list.IdxBuffer.Size do
+            IdxBuffer[k] = cmd_list.IdxBuffer.Data[k - 1] + 1
+        end
+        mesh:setVertexMap(IdxBuffer)
+
+        for k = 0, cmd_list.CmdBuffer.Size - 1 do
+            local cmd = cmd_list.CmdBuffer.Data[k]
+            if cmd.ElemCount > 0 then
+                local clipX, clipY = cmd.ClipRect.x, cmd.ClipRect.y
+                local clipW = cmd.ClipRect.z - clipX
+                local clipH = cmd.ClipRect.w - clipY
+
+                love.graphics.setBlendMode("alpha")
+
+                local texture_id = C.ImDrawCmd_GetTexID(cmd)
+                if texture_id ~= nil then
+                    local obj = L._textures[tostring(texture_id)]
+                    local status, value = pcall(love_texture_test, obj)
+                    assert(status and value, "Only LÖVE Texture objects can be passed as ImTextureID arguments.")
+                    if obj:typeOf("Canvas") then
+                        love.graphics.setBlendMode("alpha", "premultiplied")
+                    end
+                    mesh:setTexture(obj)
+                else
+                    mesh:setTexture(textureObject)
+                end
+
+                love.graphics.setScissor(clipX, clipY, clipW, clipH)
+                mesh:setDrawRange(cmd.IdxOffset + 1, cmd.ElemCount)
+                love.graphics.draw(mesh)
+                love.graphics.setBlendMode("alpha")
+            end
+        end
+    end
+    love.graphics.setScissor()
+end
+
+function L.MouseMoved(x, y)
+    if love.window.hasMouseFocus() then
+        C.igGetIO():AddMousePosEvent(x, y)
+    end
+end
+
+local mouse_buttons = {true, true, true}
+
+function L.MousePressed(button)
+    if mouse_buttons[button] then
+        C.igGetIO():AddMouseButtonEvent(button - 1, true)
+    end
+end
+
+function L.MouseReleased(button)
+    if mouse_buttons[button] then
+        C.igGetIO():AddMouseButtonEvent(button - 1, false)
+    end
+end
+
+function L.WheelMoved(x, y)
+    C.igGetIO():AddMouseWheelEvent(x, y)
+end
+
+function L.KeyPressed(key)
+    local io = C.igGetIO()
+    local t = lovekeymap[key]
+    if type(t) == "table" then
+        io:AddKeyEvent(t[1], true)
+        io:AddKeyEvent(t[2], true)
+    else
+        io:AddKeyEvent(t or C.ImGuiKey_None, true)
+    end
+end
+
+function L.KeyReleased(key)
+    local io = C.igGetIO()
+    local t = lovekeymap[key]
+    if type(t) == "table" then
+        io:AddKeyEvent(t[1], false)
+        io:AddKeyEvent(t[2], false)
+    else
+        io:AddKeyEvent(t or C.ImGuiKey_None, false)
+    end
+end
+
+function L.TextInput(text)
+    C.ImGuiIO_AddInputCharactersUTF8(C.igGetIO(), text)
+end
+
+function L.Shutdown()
+    C.igDestroyContext(nil)
+end
+
+function L.JoystickAdded(joystick)
+    if not joystick:isGamepad() then return end
+    local io = C.igGetIO()
+    io.BackendFlags = bit.bor(io.BackendFlags, C.ImGuiBackendFlags_HasGamepad)
+end
+
+function L.JoystickRemoved()
+    for _, joystick in ipairs(love.joystick.getJoysticks()) do
+        if joystick:isGamepad() then return end
+    end
+    local io = C.igGetIO()
+    io.BackendFlags = bit.band(io.BackendFlags, bit.bnot(C.ImGuiBackendFlags_HasGamepad))
+end
+
+local gamepad_map = {
+    start = C.ImGuiKey_GamepadStart,
+    back = C.ImGuiKey_GamepadBack,
+    a = C.ImGuiKey_GamepadFaceDown,
+    b = C.ImGuiKey_GamepadFaceRight,
+    y = C.ImGuiKey_GamepadFaceUp,
+    x = C.ImGuiKey_GamepadFaceLeft,
+    dpleft = C.ImGuiKey_GamepadDpadLeft,
+    dpright = C.ImGuiKey_GamepadDpadRight,
+    dpup = C.ImGuiKey_GamepadDpadUp,
+    dpdown = C.ImGuiKey_GamepadDpadDown,
+    leftshoulder = C.ImGuiKey_GamepadL1,
+    rightshoulder = C.ImGuiKey_GamepadR1,
+    leftstick = C.ImGuiKey_GamepadL3,
+    rightstick = C.ImGuiKey_GamepadR3,
+    --analog
+    triggerleft = C.ImGuiKey_GamepadL2,
+    triggerright = C.ImGuiKey_GamepadR2,
+    leftx = {C.ImGuiKey_GamepadLStickLeft, C.ImGuiKey_GamepadLStickRight},
+    lefty = {C.ImGuiKey_GamepadLStickUp, C.ImGuiKey_GamepadLStickDown},
+    rightx = {C.ImGuiKey_GamepadRStickLeft, C.ImGuiKey_GamepadRStickRight},
+    righty = {C.ImGuiKey_GamepadRStickUp, C.ImGuiKey_GamepadRStickDown},
+}
+
+function L.GamepadPressed(button)
+    C.igGetIO():AddKeyEvent(gamepad_map[button] or C.ImGuiKey_None, true)
+end
+
+function L.GamepadReleased(button)
+    C.igGetIO():AddKeyEvent(gamepad_map[button] or C.ImGuiKey_None, false)
+end
+
+function L.GamepadAxis(axis, value, threshold)
+    threshold = threshold or 0
+    local io = C.igGetIO()
+    local imguikey = gamepad_map[axis]
+    if type(imguikey) == "table" then
+        if value > threshold then
+            io:AddKeyAnalogEvent(imguikey[2], true, value)
+            io:AddKeyAnalogEvent(imguikey[1], false, 0)
+        elseif value < -threshold then
+            io:AddKeyAnalogEvent(imguikey[1], true, -value)
+            io:AddKeyAnalogEvent(imguikey[2], false, 0)
+        else
+           io:AddKeyAnalogEvent(imguikey[1], false, 0)
+           io:AddKeyAnalogEvent(imguikey[2], false, 0)
+        end
+    elseif imguikey then
+        io:AddKeyAnalogEvent(imguikey, value ~= 0, value)
+    end
+end
+
+-- input capture
+
+function L.GetWantCaptureMouse()
+    return C.igGetIO().WantCaptureMouse
+end
+
+function L.GetWantCaptureKeyboard()
+    return C.igGetIO().WantCaptureKeyboard
+end
+
+function L.GetWantTextInput()
+    return C.igGetIO().WantTextInput
+end
+
+-- flag helpers
+local flags = {}
+
+for name in pairs(M) do
+    name = name:match("^(%w+Flags)_")
+    if name and not flags[name] then
+        flags[name] = true
+    end
+end
+
+for name in pairs(flags) do
+    local shortname = name:gsub("^ImGui", "")
+    shortname = shortname:gsub("^Im", "")
+    L[shortname] = function(...)
+        local t = {}
+        for _, flag in ipairs({...}) do
+            t[#t + 1] = M[name .. "_" .. flag]
+        end
+        return bit.bor(unpack(t))
+    end
+end
+
+-- revert to old implementation names, i.e., imgui.RenderDrawLists instead of imgui.love.RenderDrawLists, etc.
+local old_names = {}
+
+for k, v in pairs(L) do
+    old_names[k] = v
+end
+
+function L.RevertToOldNames()
+    for k, v in pairs(old_names) do
+        M[k] = v
+    end
+end

+ 1 - 0
cimgui/master.lua

@@ -0,0 +1 @@
+return {}

+ 3657 - 0
cimgui/wrap.lua

@@ -0,0 +1,3657 @@
+local env = {
+    assert = assert,
+    type = type,
+    tonumber = tonumber,
+    tostring = tostring,
+    require = require,
+    error = error,
+    getmetatable = getmetatable,
+    setmetatable = setmetatable,
+    string = string,
+    table = table,
+    love = love,
+    jit = jit,
+}
+setfenv(1, env)
+
+local path = (...):gsub("[^%.]*$", "")
+local M = require(path .. "master")
+local ffi = require("ffi")
+
+local C = M.C
+
+-- add metamethods to ImVec2 and ImVec4
+
+local ct = ffi.typeof("ImVec2")
+local ImVec2 = {}
+function ImVec2.__add(u, v)
+    assert(type(u) == type(v) and ffi.istype(u, v), "One of the summands in not an ImVec2.")
+    return ct(u.x + v.x, u.y + v.y)
+end
+function ImVec2.__sub(u, v)
+    assert(type(u) == type(v) and ffi.istype(u, v), "One of the summands in not an ImVec2.")
+    return ct( u.x - v.x, u.y - v.y)
+end
+function ImVec2.__unm(u)
+    return ct(-u.x, -u.y)
+end
+function ImVec2.__mul(u, v)
+    local nu, nv = tonumber(u), tonumber(v)
+    if nu then
+        return ct(nu*v.x, nu*v.y)
+    elseif nv then
+        return ct(nv*u.x, nv*u.y)
+    else
+        error("ImVec2 can only be multipliead by a numerical type.")
+    end
+end
+function ImVec2.__div(u, a)
+    a = assert(tonumber(a), "ImVec2 can only be divided by a numerical type.")
+    return ct(u.x/a, u.y/a)
+end
+
+local ct = ffi.typeof("ImVec4")
+local ImVec4 = {}
+function ImVec4.__add(u, v)
+    assert(type(u) == type(v) and ffi.istype(u, v), "One of the summands in not an ImVec4.")
+    return ct(u.x + v.x, u.y + v.y, u.z + v.z, u.w + v.w)
+end
+function ImVec4.__sub(u, v)
+    assert(type(u) == type(v) and ffi.istype(u, v), "One of the summands in not an ImVec4.")
+    return ct(u.x - v.x, u.y - v.y, u.z - v.z, u.w - v.w)
+end
+function ImVec4.__unm(u)
+    return ct(-u.x, -u.y, -u.z, -u.w)
+end
+function ImVec4.__mul(u, v)
+    local nu, nv = tonumber(u), tonumber(v)
+    if nu then
+        return v:__new(nu*v.x, nu*v.y, nu*v.z, nu*v.w)
+    elseif nv then
+        return ct(nv*u.x, nv*u.y, nv*u.z, nv*u.w)
+    else
+        error("ImVec4 can only be multipliead by a numerical type.")
+    end
+end
+function ImVec4.__div(u, a)
+    a = assert(tonumber(a), "ImVec4 can only be divided by a numerical type.")
+    return ct(u.x/a, u.y/a, u.z/a, u.w/a)
+end
+
+-- wrap FLT_MIN, FLT_MAX
+
+local FLT_MIN, FLT_MAX = C.igGET_FLT_MIN(), C.igGET_FLT_MAX()
+M.FLT_MIN, M.FLT_MAX = FLT_MIN, FLT_MAX
+
+-----------------------
+-- BEGIN GENERATED CODE
+-----------------------
+
+local ImColor = ImColor or {}
+ImColor.__index = ImColor
+ImColor["HSV"] = ImColor["HSV"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = 1.0 end
+    local o1 = ffi.new("ImColor[1]")
+    local out = C.ImColor_HSV(o1, i1, i2, i3, i4)
+    return o1[0], out
+end
+ImColor["SetHSV"] = ImColor["SetHSV"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = 1.0 end
+    local out = C.ImColor_SetHSV(i1, i2, i3, i4, i5)
+    return out
+end
+M.ImColor_Nil = M.ImColor_Nil  or function()
+    jit.off(true)
+    local p = C.ImColor_ImColor_Nil()
+    return ffi.gc(p[0], C.ImColor_destroy)
+end
+M.ImColor_Int = M.ImColor_Int  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local p = C.ImColor_ImColor_Int(i1, i2, i3, i4)
+    return ffi.gc(p[0], C.ImColor_destroy)
+end
+M.ImColor_U32 = M.ImColor_U32  or function(i1)
+    jit.off(true)
+    local p = C.ImColor_ImColor_U32(i1)
+    return ffi.gc(p[0], C.ImColor_destroy)
+end
+M.ImColor_Float = M.ImColor_Float  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local p = C.ImColor_ImColor_Float(i1, i2, i3, i4)
+    return ffi.gc(p[0], C.ImColor_destroy)
+end
+M.ImColor_Vec4 = M.ImColor_Vec4  or function(i1)
+    jit.off(true)
+    local p = C.ImColor_ImColor_Vec4(i1)
+    return ffi.gc(p[0], C.ImColor_destroy)
+end
+M.ImColor = ImColor
+ffi.metatype("ImColor", ImColor)
+
+local ImDrawCmd = ImDrawCmd or {}
+ImDrawCmd.__index = ImDrawCmd
+ImDrawCmd["GetTexID"] = ImDrawCmd["GetTexID"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawCmd_GetTexID(i1)
+    return out
+end
+local mt = getmetatable(ImDrawCmd) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImDrawCmd_ImDrawCmd()
+    return ffi.gc(p[0], C.ImDrawCmd_destroy)
+end
+setmetatable(ImDrawCmd, mt)
+M.ImDrawCmd = ImDrawCmd
+ffi.metatype("ImDrawCmd", ImDrawCmd)
+
+local ImDrawData = ImDrawData or {}
+ImDrawData.__index = ImDrawData
+ImDrawData["Clear"] = ImDrawData["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawData_Clear(i1)
+    return out
+end
+ImDrawData["DeIndexAllBuffers"] = ImDrawData["DeIndexAllBuffers"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawData_DeIndexAllBuffers(i1)
+    return out
+end
+ImDrawData["ScaleClipRects"] = ImDrawData["ScaleClipRects"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawData_ScaleClipRects(i1, i2)
+    return out
+end
+local mt = getmetatable(ImDrawData) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImDrawData_ImDrawData()
+    return ffi.gc(p[0], C.ImDrawData_destroy)
+end
+setmetatable(ImDrawData, mt)
+M.ImDrawData = ImDrawData
+ffi.metatype("ImDrawData", ImDrawData)
+
+local ImDrawList = ImDrawList or {}
+ImDrawList.__index = ImDrawList
+ImDrawList["AddBezierCubic"] = ImDrawList["AddBezierCubic"]  or function(i1, i2, i3, i4, i5, i6, i7, i8)
+    jit.off(true)
+    if i8 == nil then i8 = 0 end
+    local out = C.ImDrawList_AddBezierCubic(i1, i2, i3, i4, i5, i6, i7, i8)
+    return out
+end
+ImDrawList["AddBezierQuadratic"] = ImDrawList["AddBezierQuadratic"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i7 == nil then i7 = 0 end
+    local out = C.ImDrawList_AddBezierQuadratic(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImDrawList["AddCallback"] = ImDrawList["AddCallback"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImDrawList_AddCallback(i1, i2, i3)
+    return out
+end
+ImDrawList["AddCircle"] = ImDrawList["AddCircle"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = 1.0 end
+    local out = C.ImDrawList_AddCircle(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddCircleFilled"] = ImDrawList["AddCircleFilled"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    local out = C.ImDrawList_AddCircleFilled(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["AddConvexPolyFilled"] = ImDrawList["AddConvexPolyFilled"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImDrawList_AddConvexPolyFilled(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["AddDrawCmd"] = ImDrawList["AddDrawCmd"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_AddDrawCmd(i1)
+    return out
+end
+ImDrawList["AddImage"] = ImDrawList["AddImage"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i5 == nil then i5 = M.ImVec2_Float(0, 0) end
+    if i6 == nil then i6 = M.ImVec2_Float(1, 1) end
+    if i7 == nil then i7 = 4294967295 end
+    local ptr = ffi.cast("void *", i2)
+    M.love._textures[tostring(ptr)] = i2
+    i2 = ptr
+    local out = C.ImDrawList_AddImage(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImDrawList["AddImageQuad"] = ImDrawList["AddImageQuad"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
+    jit.off(true)
+    if i7 == nil then i7 = M.ImVec2_Float(0, 0) end
+    if i8 == nil then i8 = M.ImVec2_Float(1, 0) end
+    if i9 == nil then i9 = M.ImVec2_Float(1, 1) end
+    if i10 == nil then i10 = M.ImVec2_Float(0, 1) end
+    if i11 == nil then i11 = 4294967295 end
+    local ptr = ffi.cast("void *", i2)
+    M.love._textures[tostring(ptr)] = i2
+    i2 = ptr
+    local out = C.ImDrawList_AddImageQuad(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
+    return out
+end
+ImDrawList["AddImageRounded"] = ImDrawList["AddImageRounded"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i9 == nil then i9 = 0 end
+    local ptr = ffi.cast("void *", i2)
+    M.love._textures[tostring(ptr)] = i2
+    i2 = ptr
+    local out = C.ImDrawList_AddImageRounded(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+ImDrawList["AddLine"] = ImDrawList["AddLine"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = 1.0 end
+    local out = C.ImDrawList_AddLine(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["AddNgon"] = ImDrawList["AddNgon"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i6 == nil then i6 = 1.0 end
+    local out = C.ImDrawList_AddNgon(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddNgonFilled"] = ImDrawList["AddNgonFilled"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImDrawList_AddNgonFilled(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["AddPolyline"] = ImDrawList["AddPolyline"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImDrawList_AddPolyline(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddQuad"] = ImDrawList["AddQuad"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i7 == nil then i7 = 1.0 end
+    local out = C.ImDrawList_AddQuad(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImDrawList["AddQuadFilled"] = ImDrawList["AddQuadFilled"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImDrawList_AddQuadFilled(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddRect"] = ImDrawList["AddRect"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = 0 end
+    if i7 == nil then i7 = 1.0 end
+    local out = C.ImDrawList_AddRect(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImDrawList["AddRectFilled"] = ImDrawList["AddRectFilled"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = 0 end
+    local out = C.ImDrawList_AddRectFilled(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddRectFilledMultiColor"] = ImDrawList["AddRectFilledMultiColor"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    local out = C.ImDrawList_AddRectFilledMultiColor(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImDrawList["AddText_Vec2"] = ImDrawList["AddText_Vec2"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImDrawList_AddText_Vec2(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["AddText_FontPtr"] = ImDrawList["AddText_FontPtr"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i8 == nil then i8 = 0.0 end
+    local out = C.ImDrawList_AddText_FontPtr(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+ImDrawList["AddTriangle"] = ImDrawList["AddTriangle"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i6 == nil then i6 = 1.0 end
+    local out = C.ImDrawList_AddTriangle(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["AddTriangleFilled"] = ImDrawList["AddTriangleFilled"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImDrawList_AddTriangleFilled(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["ChannelsMerge"] = ImDrawList["ChannelsMerge"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_ChannelsMerge(i1)
+    return out
+end
+ImDrawList["ChannelsSetCurrent"] = ImDrawList["ChannelsSetCurrent"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_ChannelsSetCurrent(i1, i2)
+    return out
+end
+ImDrawList["ChannelsSplit"] = ImDrawList["ChannelsSplit"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_ChannelsSplit(i1, i2)
+    return out
+end
+ImDrawList["CloneOutput"] = ImDrawList["CloneOutput"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_CloneOutput(i1)
+    return out
+end
+ImDrawList["GetClipRectMax"] = ImDrawList["GetClipRectMax"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.ImDrawList_GetClipRectMax(o1, i1)
+    return o1[0], out
+end
+ImDrawList["GetClipRectMin"] = ImDrawList["GetClipRectMin"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.ImDrawList_GetClipRectMin(o1, i1)
+    return o1[0], out
+end
+ImDrawList["PathArcTo"] = ImDrawList["PathArcTo"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i6 == nil then i6 = 0 end
+    local out = C.ImDrawList_PathArcTo(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["PathArcToFast"] = ImDrawList["PathArcToFast"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImDrawList_PathArcToFast(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["PathBezierCubicCurveTo"] = ImDrawList["PathBezierCubicCurveTo"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    local out = C.ImDrawList_PathBezierCubicCurveTo(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["PathBezierQuadraticCurveTo"] = ImDrawList["PathBezierQuadraticCurveTo"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = 0 end
+    local out = C.ImDrawList_PathBezierQuadraticCurveTo(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PathClear"] = ImDrawList["PathClear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_PathClear(i1)
+    return out
+end
+ImDrawList["PathFillConvex"] = ImDrawList["PathFillConvex"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_PathFillConvex(i1, i2)
+    return out
+end
+ImDrawList["PathLineTo"] = ImDrawList["PathLineTo"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_PathLineTo(i1, i2)
+    return out
+end
+ImDrawList["PathLineToMergeDuplicate"] = ImDrawList["PathLineToMergeDuplicate"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_PathLineToMergeDuplicate(i1, i2)
+    return out
+end
+ImDrawList["PathRect"] = ImDrawList["PathRect"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = 0 end
+    local out = C.ImDrawList_PathRect(i1, i2, i3, i4, i5)
+    return out
+end
+ImDrawList["PathStroke"] = ImDrawList["PathStroke"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    if i4 == nil then i4 = 1.0 end
+    local out = C.ImDrawList_PathStroke(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PopClipRect"] = ImDrawList["PopClipRect"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_PopClipRect(i1)
+    return out
+end
+ImDrawList["PopTextureID"] = ImDrawList["PopTextureID"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_PopTextureID(i1)
+    return out
+end
+ImDrawList["PrimQuadUV"] = ImDrawList["PrimQuadUV"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10)
+    jit.off(true)
+    local out = C.ImDrawList_PrimQuadUV(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10)
+    return out
+end
+ImDrawList["PrimRect"] = ImDrawList["PrimRect"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImDrawList_PrimRect(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PrimRectUV"] = ImDrawList["PrimRectUV"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImDrawList_PrimRectUV(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["PrimReserve"] = ImDrawList["PrimReserve"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImDrawList_PrimReserve(i1, i2, i3)
+    return out
+end
+ImDrawList["PrimUnreserve"] = ImDrawList["PrimUnreserve"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImDrawList_PrimUnreserve(i1, i2, i3)
+    return out
+end
+ImDrawList["PrimVtx"] = ImDrawList["PrimVtx"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImDrawList_PrimVtx(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PrimWriteIdx"] = ImDrawList["PrimWriteIdx"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList_PrimWriteIdx(i1, i2)
+    return out
+end
+ImDrawList["PrimWriteVtx"] = ImDrawList["PrimWriteVtx"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImDrawList_PrimWriteVtx(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PushClipRect"] = ImDrawList["PushClipRect"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = false end
+    local out = C.ImDrawList_PushClipRect(i1, i2, i3, i4)
+    return out
+end
+ImDrawList["PushClipRectFullScreen"] = ImDrawList["PushClipRectFullScreen"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList_PushClipRectFullScreen(i1)
+    return out
+end
+ImDrawList["PushTextureID"] = ImDrawList["PushTextureID"]  or function(i1, i2)
+    jit.off(true)
+    local ptr = ffi.cast("void *", i2)
+    M.love._textures[tostring(ptr)] = i2
+    i2 = ptr
+    local out = C.ImDrawList_PushTextureID(i1, i2)
+    return out
+end
+ImDrawList["_CalcCircleAutoSegmentCount"] = ImDrawList["_CalcCircleAutoSegmentCount"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawList__CalcCircleAutoSegmentCount(i1, i2)
+    return out
+end
+ImDrawList["_ClearFreeMemory"] = ImDrawList["_ClearFreeMemory"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__ClearFreeMemory(i1)
+    return out
+end
+ImDrawList["_OnChangedClipRect"] = ImDrawList["_OnChangedClipRect"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__OnChangedClipRect(i1)
+    return out
+end
+ImDrawList["_OnChangedTextureID"] = ImDrawList["_OnChangedTextureID"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__OnChangedTextureID(i1)
+    return out
+end
+ImDrawList["_OnChangedVtxOffset"] = ImDrawList["_OnChangedVtxOffset"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__OnChangedVtxOffset(i1)
+    return out
+end
+ImDrawList["_PathArcToFastEx"] = ImDrawList["_PathArcToFastEx"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImDrawList__PathArcToFastEx(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["_PathArcToN"] = ImDrawList["_PathArcToN"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImDrawList__PathArcToN(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImDrawList["_PopUnusedDrawCmd"] = ImDrawList["_PopUnusedDrawCmd"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__PopUnusedDrawCmd(i1)
+    return out
+end
+ImDrawList["_ResetForNewFrame"] = ImDrawList["_ResetForNewFrame"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__ResetForNewFrame(i1)
+    return out
+end
+ImDrawList["_TryMergeDrawCmds"] = ImDrawList["_TryMergeDrawCmds"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawList__TryMergeDrawCmds(i1)
+    return out
+end
+local mt = getmetatable(ImDrawList) or {}
+mt.__call = mt.__call or function(self, i1)
+    jit.off(true)
+    local p = C.ImDrawList_ImDrawList(i1)
+    return ffi.gc(p[0], C.ImDrawList_destroy)
+end
+setmetatable(ImDrawList, mt)
+M.ImDrawList = ImDrawList
+ffi.metatype("ImDrawList", ImDrawList)
+
+local ImDrawListSplitter = ImDrawListSplitter or {}
+ImDrawListSplitter.__index = ImDrawListSplitter
+ImDrawListSplitter["Clear"] = ImDrawListSplitter["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawListSplitter_Clear(i1)
+    return out
+end
+ImDrawListSplitter["ClearFreeMemory"] = ImDrawListSplitter["ClearFreeMemory"]  or function(i1)
+    jit.off(true)
+    local out = C.ImDrawListSplitter_ClearFreeMemory(i1)
+    return out
+end
+ImDrawListSplitter["Merge"] = ImDrawListSplitter["Merge"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImDrawListSplitter_Merge(i1, i2)
+    return out
+end
+ImDrawListSplitter["SetCurrentChannel"] = ImDrawListSplitter["SetCurrentChannel"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImDrawListSplitter_SetCurrentChannel(i1, i2, i3)
+    return out
+end
+ImDrawListSplitter["Split"] = ImDrawListSplitter["Split"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImDrawListSplitter_Split(i1, i2, i3)
+    return out
+end
+local mt = getmetatable(ImDrawListSplitter) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImDrawListSplitter_ImDrawListSplitter()
+    return ffi.gc(p[0], C.ImDrawListSplitter_destroy)
+end
+setmetatable(ImDrawListSplitter, mt)
+M.ImDrawListSplitter = ImDrawListSplitter
+ffi.metatype("ImDrawListSplitter", ImDrawListSplitter)
+
+local ImFont = ImFont or {}
+ImFont.__index = ImFont
+ImFont["AddGlyph"] = ImFont["AddGlyph"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12)
+    jit.off(true)
+    local out = C.ImFont_AddGlyph(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12)
+    return out
+end
+ImFont["AddRemapChar"] = ImFont["AddRemapChar"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = true end
+    local out = C.ImFont_AddRemapChar(i1, i2, i3, i4)
+    return out
+end
+ImFont["BuildLookupTable"] = ImFont["BuildLookupTable"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFont_BuildLookupTable(i1)
+    return out
+end
+ImFont["CalcTextSizeA"] = ImFont["CalcTextSizeA"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.ImFont_CalcTextSizeA(o1, i1, i2, i3, i4, i5, i6, i7)
+    return o1[0], out
+end
+ImFont["CalcWordWrapPositionA"] = ImFont["CalcWordWrapPositionA"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImFont_CalcWordWrapPositionA(i1, i2, i3, i4, i5)
+    return out
+end
+ImFont["ClearOutputData"] = ImFont["ClearOutputData"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFont_ClearOutputData(i1)
+    return out
+end
+ImFont["FindGlyph"] = ImFont["FindGlyph"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFont_FindGlyph(i1, i2)
+    return out
+end
+ImFont["FindGlyphNoFallback"] = ImFont["FindGlyphNoFallback"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFont_FindGlyphNoFallback(i1, i2)
+    return out
+end
+ImFont["GetCharAdvance"] = ImFont["GetCharAdvance"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFont_GetCharAdvance(i1, i2)
+    return out
+end
+ImFont["GetDebugName"] = ImFont["GetDebugName"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFont_GetDebugName(i1)
+    return out
+end
+ImFont["GrowIndex"] = ImFont["GrowIndex"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFont_GrowIndex(i1, i2)
+    return out
+end
+ImFont["IsGlyphRangeUnused"] = ImFont["IsGlyphRangeUnused"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImFont_IsGlyphRangeUnused(i1, i2, i3)
+    return out
+end
+ImFont["IsLoaded"] = ImFont["IsLoaded"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFont_IsLoaded(i1)
+    return out
+end
+ImFont["RenderChar"] = ImFont["RenderChar"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImFont_RenderChar(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImFont["RenderText"] = ImFont["RenderText"]  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10)
+    jit.off(true)
+    if i9 == nil then i9 = 0.0 end
+    if i10 == nil then i10 = false end
+    local out = C.ImFont_RenderText(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10)
+    return out
+end
+ImFont["SetGlyphVisible"] = ImFont["SetGlyphVisible"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImFont_SetGlyphVisible(i1, i2, i3)
+    return out
+end
+local mt = getmetatable(ImFont) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImFont_ImFont()
+    return ffi.gc(p[0], C.ImFont_destroy)
+end
+setmetatable(ImFont, mt)
+M.ImFont = ImFont
+ffi.metatype("ImFont", ImFont)
+
+local ImFontAtlas = ImFontAtlas or {}
+ImFontAtlas.__index = ImFontAtlas
+ImFontAtlas["AddCustomRectFontGlyph"] = ImFontAtlas["AddCustomRectFontGlyph"]  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i7 == nil then i7 = M.ImVec2_Float(0, 0) end
+    local out = C.ImFontAtlas_AddCustomRectFontGlyph(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+ImFontAtlas["AddCustomRectRegular"] = ImFontAtlas["AddCustomRectRegular"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddCustomRectRegular(i1, i2, i3)
+    return out
+end
+ImFontAtlas["AddFont"] = ImFontAtlas["AddFont"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFont(i1, i2)
+    return out
+end
+ImFontAtlas["AddFontDefault"] = ImFontAtlas["AddFontDefault"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFontDefault(i1, i2)
+    return out
+end
+ImFontAtlas["AddFontFromFileTTF"] = ImFontAtlas["AddFontFromFileTTF"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFontFromFileTTF(i1, i2, i3, i4, i5)
+    return out
+end
+ImFontAtlas["AddFontFromMemoryCompressedBase85TTF"] = ImFontAtlas["AddFontFromMemoryCompressedBase85TTF"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(i1, i2, i3, i4, i5)
+    return out
+end
+ImFontAtlas["AddFontFromMemoryCompressedTTF"] = ImFontAtlas["AddFontFromMemoryCompressedTTF"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFontFromMemoryCompressedTTF(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImFontAtlas["AddFontFromMemoryTTF"] = ImFontAtlas["AddFontFromMemoryTTF"]  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    local out = C.ImFontAtlas_AddFontFromMemoryTTF(i1, i2, i3, i4, i5, i6)
+    return out
+end
+ImFontAtlas["Build"] = ImFontAtlas["Build"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_Build(i1)
+    return out
+end
+ImFontAtlas["CalcCustomRectUV"] = ImFontAtlas["CalcCustomRectUV"]  or function(i1, i2)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local o2 = ffi.new("ImVec2[1]")
+    local out = C.ImFontAtlas_CalcCustomRectUV(i1, i2, o1, o2)
+    return o1[0], o2[0], out
+end
+ImFontAtlas["Clear"] = ImFontAtlas["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_Clear(i1)
+    return out
+end
+ImFontAtlas["ClearFonts"] = ImFontAtlas["ClearFonts"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_ClearFonts(i1)
+    return out
+end
+ImFontAtlas["ClearInputData"] = ImFontAtlas["ClearInputData"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_ClearInputData(i1)
+    return out
+end
+ImFontAtlas["ClearTexData"] = ImFontAtlas["ClearTexData"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_ClearTexData(i1)
+    return out
+end
+ImFontAtlas["GetCustomRectByIndex"] = ImFontAtlas["GetCustomRectByIndex"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetCustomRectByIndex(i1, i2)
+    return out
+end
+ImFontAtlas["GetGlyphRangesChineseFull"] = ImFontAtlas["GetGlyphRangesChineseFull"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesChineseFull(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesChineseSimplifiedCommon"] = ImFontAtlas["GetGlyphRangesChineseSimplifiedCommon"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesCyrillic"] = ImFontAtlas["GetGlyphRangesCyrillic"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesCyrillic(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesDefault"] = ImFontAtlas["GetGlyphRangesDefault"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesDefault(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesJapanese"] = ImFontAtlas["GetGlyphRangesJapanese"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesJapanese(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesKorean"] = ImFontAtlas["GetGlyphRangesKorean"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesKorean(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesThai"] = ImFontAtlas["GetGlyphRangesThai"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesThai(i1)
+    return out
+end
+ImFontAtlas["GetGlyphRangesVietnamese"] = ImFontAtlas["GetGlyphRangesVietnamese"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_GetGlyphRangesVietnamese(i1)
+    return out
+end
+ImFontAtlas["GetMouseCursorTexData"] = ImFontAtlas["GetMouseCursorTexData"]  or function(i1, i2)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local o2 = ffi.new("ImVec2[1]")
+    local o3 = ffi.new("ImVec2[2][1]")
+    local o4 = ffi.new("ImVec2[2][1]")
+    local out = C.ImFontAtlas_GetMouseCursorTexData(i1, i2, o1, o2, o3, o4)
+    return o1[0], o2[0], o3[0], o4[0], out
+end
+ImFontAtlas["GetTexDataAsAlpha8"] = ImFontAtlas["GetTexDataAsAlpha8"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("unsigned char*[1]")
+    local o2 = ffi.new("int[1]")
+    local o3 = ffi.new("int[1]")
+    local o4 = ffi.new("int[1]")
+    local out = C.ImFontAtlas_GetTexDataAsAlpha8(i1, o1, o2, o3, o4)
+    return o1[0], o2[0], o3[0], o4[0], out
+end
+ImFontAtlas["GetTexDataAsRGBA32"] = ImFontAtlas["GetTexDataAsRGBA32"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("unsigned char*[1]")
+    local o2 = ffi.new("int[1]")
+    local o3 = ffi.new("int[1]")
+    local o4 = ffi.new("int[1]")
+    local out = C.ImFontAtlas_GetTexDataAsRGBA32(i1, o1, o2, o3, o4)
+    return o1[0], o2[0], o3[0], o4[0], out
+end
+ImFontAtlas["IsBuilt"] = ImFontAtlas["IsBuilt"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlas_IsBuilt(i1)
+    return out
+end
+ImFontAtlas["SetTexID"] = ImFontAtlas["SetTexID"]  or function(i1, i2)
+    jit.off(true)
+    local ptr = ffi.cast("void *", i2)
+    M.love._textures[tostring(ptr)] = i2
+    i2 = ptr
+    local out = C.ImFontAtlas_SetTexID(i1, i2)
+    return out
+end
+local mt = getmetatable(ImFontAtlas) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImFontAtlas_ImFontAtlas()
+    return ffi.gc(p[0], C.ImFontAtlas_destroy)
+end
+setmetatable(ImFontAtlas, mt)
+M.ImFontAtlas = ImFontAtlas
+ffi.metatype("ImFontAtlas", ImFontAtlas)
+
+local ImFontAtlasCustomRect = ImFontAtlasCustomRect or {}
+ImFontAtlasCustomRect.__index = ImFontAtlasCustomRect
+ImFontAtlasCustomRect["IsPacked"] = ImFontAtlasCustomRect["IsPacked"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontAtlasCustomRect_IsPacked(i1)
+    return out
+end
+local mt = getmetatable(ImFontAtlasCustomRect) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImFontAtlasCustomRect_ImFontAtlasCustomRect()
+    return ffi.gc(p[0], C.ImFontAtlasCustomRect_destroy)
+end
+setmetatable(ImFontAtlasCustomRect, mt)
+M.ImFontAtlasCustomRect = ImFontAtlasCustomRect
+ffi.metatype("ImFontAtlasCustomRect", ImFontAtlasCustomRect)
+
+local ImFontConfig = ImFontConfig or {}
+ImFontConfig.__index = ImFontConfig
+local mt = getmetatable(ImFontConfig) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImFontConfig_ImFontConfig()
+    return ffi.gc(p[0], C.ImFontConfig_destroy)
+end
+setmetatable(ImFontConfig, mt)
+M.ImFontConfig = ImFontConfig
+ffi.metatype("ImFontConfig", ImFontConfig)
+
+local ImFontGlyphRangesBuilder = ImFontGlyphRangesBuilder or {}
+ImFontGlyphRangesBuilder.__index = ImFontGlyphRangesBuilder
+ImFontGlyphRangesBuilder["AddChar"] = ImFontGlyphRangesBuilder["AddChar"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_AddChar(i1, i2)
+    return out
+end
+ImFontGlyphRangesBuilder["AddRanges"] = ImFontGlyphRangesBuilder["AddRanges"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_AddRanges(i1, i2)
+    return out
+end
+ImFontGlyphRangesBuilder["AddText"] = ImFontGlyphRangesBuilder["AddText"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_AddText(i1, i2, i3)
+    return out
+end
+ImFontGlyphRangesBuilder["BuildRanges"] = ImFontGlyphRangesBuilder["BuildRanges"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVector_ImWchar[1]")
+    local out = C.ImFontGlyphRangesBuilder_BuildRanges(i1, o1)
+    return o1[0], out
+end
+ImFontGlyphRangesBuilder["Clear"] = ImFontGlyphRangesBuilder["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_Clear(i1)
+    return out
+end
+ImFontGlyphRangesBuilder["GetBit"] = ImFontGlyphRangesBuilder["GetBit"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_GetBit(i1, i2)
+    return out
+end
+ImFontGlyphRangesBuilder["SetBit"] = ImFontGlyphRangesBuilder["SetBit"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImFontGlyphRangesBuilder_SetBit(i1, i2)
+    return out
+end
+local mt = getmetatable(ImFontGlyphRangesBuilder) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder()
+    return ffi.gc(p[0], C.ImFontGlyphRangesBuilder_destroy)
+end
+setmetatable(ImFontGlyphRangesBuilder, mt)
+M.ImFontGlyphRangesBuilder = ImFontGlyphRangesBuilder
+ffi.metatype("ImFontGlyphRangesBuilder", ImFontGlyphRangesBuilder)
+
+local ImGuiIO = ImGuiIO or {}
+ImGuiIO.__index = ImGuiIO
+ImGuiIO["AddFocusEvent"] = ImGuiIO["AddFocusEvent"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiIO_AddFocusEvent(i1, i2)
+    return out
+end
+ImGuiIO["AddInputCharacter"] = ImGuiIO["AddInputCharacter"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiIO_AddInputCharacter(i1, i2)
+    return out
+end
+ImGuiIO["AddInputCharacterUTF16"] = ImGuiIO["AddInputCharacterUTF16"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiIO_AddInputCharacterUTF16(i1, i2)
+    return out
+end
+ImGuiIO["AddInputCharactersUTF8"] = ImGuiIO["AddInputCharactersUTF8"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiIO_AddInputCharactersUTF8(i1, i2)
+    return out
+end
+ImGuiIO["AddKeyAnalogEvent"] = ImGuiIO["AddKeyAnalogEvent"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImGuiIO_AddKeyAnalogEvent(i1, i2, i3, i4)
+    return out
+end
+ImGuiIO["AddKeyEvent"] = ImGuiIO["AddKeyEvent"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiIO_AddKeyEvent(i1, i2, i3)
+    return out
+end
+ImGuiIO["AddMouseButtonEvent"] = ImGuiIO["AddMouseButtonEvent"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiIO_AddMouseButtonEvent(i1, i2, i3)
+    return out
+end
+ImGuiIO["AddMousePosEvent"] = ImGuiIO["AddMousePosEvent"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiIO_AddMousePosEvent(i1, i2, i3)
+    return out
+end
+ImGuiIO["AddMouseViewportEvent"] = ImGuiIO["AddMouseViewportEvent"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiIO_AddMouseViewportEvent(i1, i2)
+    return out
+end
+ImGuiIO["AddMouseWheelEvent"] = ImGuiIO["AddMouseWheelEvent"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiIO_AddMouseWheelEvent(i1, i2, i3)
+    return out
+end
+ImGuiIO["ClearInputCharacters"] = ImGuiIO["ClearInputCharacters"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiIO_ClearInputCharacters(i1)
+    return out
+end
+ImGuiIO["ClearInputKeys"] = ImGuiIO["ClearInputKeys"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiIO_ClearInputKeys(i1)
+    return out
+end
+ImGuiIO["SetKeyEventNativeData"] = ImGuiIO["SetKeyEventNativeData"]  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = -1 end
+    local out = C.ImGuiIO_SetKeyEventNativeData(i1, i2, i3, i4, i5)
+    return out
+end
+local mt = getmetatable(ImGuiIO) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiIO_ImGuiIO()
+    return ffi.gc(p[0], C.ImGuiIO_destroy)
+end
+setmetatable(ImGuiIO, mt)
+M.ImGuiIO = ImGuiIO
+ffi.metatype("ImGuiIO", ImGuiIO)
+
+local ImGuiInputTextCallbackData = ImGuiInputTextCallbackData or {}
+ImGuiInputTextCallbackData.__index = ImGuiInputTextCallbackData
+ImGuiInputTextCallbackData["ClearSelection"] = ImGuiInputTextCallbackData["ClearSelection"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiInputTextCallbackData_ClearSelection(i1)
+    return out
+end
+ImGuiInputTextCallbackData["DeleteChars"] = ImGuiInputTextCallbackData["DeleteChars"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiInputTextCallbackData_DeleteChars(i1, i2, i3)
+    return out
+end
+ImGuiInputTextCallbackData["HasSelection"] = ImGuiInputTextCallbackData["HasSelection"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiInputTextCallbackData_HasSelection(i1)
+    return out
+end
+ImGuiInputTextCallbackData["InsertChars"] = ImGuiInputTextCallbackData["InsertChars"]  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.ImGuiInputTextCallbackData_InsertChars(i1, i2, i3, i4)
+    return out
+end
+ImGuiInputTextCallbackData["SelectAll"] = ImGuiInputTextCallbackData["SelectAll"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiInputTextCallbackData_SelectAll(i1)
+    return out
+end
+local mt = getmetatable(ImGuiInputTextCallbackData) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiInputTextCallbackData_ImGuiInputTextCallbackData()
+    return ffi.gc(p[0], C.ImGuiInputTextCallbackData_destroy)
+end
+setmetatable(ImGuiInputTextCallbackData, mt)
+M.ImGuiInputTextCallbackData = ImGuiInputTextCallbackData
+ffi.metatype("ImGuiInputTextCallbackData", ImGuiInputTextCallbackData)
+
+local ImGuiListClipper = ImGuiListClipper or {}
+ImGuiListClipper.__index = ImGuiListClipper
+ImGuiListClipper["Begin"] = ImGuiListClipper["Begin"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = -1.0 end
+    local out = C.ImGuiListClipper_Begin(i1, i2, i3)
+    return out
+end
+ImGuiListClipper["End"] = ImGuiListClipper["End"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiListClipper_End(i1)
+    return out
+end
+ImGuiListClipper["ForceDisplayRangeByIndices"] = ImGuiListClipper["ForceDisplayRangeByIndices"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiListClipper_ForceDisplayRangeByIndices(i1, i2, i3)
+    return out
+end
+ImGuiListClipper["Step"] = ImGuiListClipper["Step"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiListClipper_Step(i1)
+    return out
+end
+local mt = getmetatable(ImGuiListClipper) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiListClipper_ImGuiListClipper()
+    return ffi.gc(p[0], C.ImGuiListClipper_destroy)
+end
+setmetatable(ImGuiListClipper, mt)
+M.ImGuiListClipper = ImGuiListClipper
+ffi.metatype("ImGuiListClipper", ImGuiListClipper)
+
+local ImGuiOnceUponAFrame = ImGuiOnceUponAFrame or {}
+ImGuiOnceUponAFrame.__index = ImGuiOnceUponAFrame
+local mt = getmetatable(ImGuiOnceUponAFrame) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiOnceUponAFrame_ImGuiOnceUponAFrame()
+    return ffi.gc(p[0], C.ImGuiOnceUponAFrame_destroy)
+end
+setmetatable(ImGuiOnceUponAFrame, mt)
+M.ImGuiOnceUponAFrame = ImGuiOnceUponAFrame
+ffi.metatype("ImGuiOnceUponAFrame", ImGuiOnceUponAFrame)
+
+local ImGuiPayload = ImGuiPayload or {}
+ImGuiPayload.__index = ImGuiPayload
+ImGuiPayload["Clear"] = ImGuiPayload["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiPayload_Clear(i1)
+    return out
+end
+ImGuiPayload["IsDataType"] = ImGuiPayload["IsDataType"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiPayload_IsDataType(i1, i2)
+    return out
+end
+ImGuiPayload["IsDelivery"] = ImGuiPayload["IsDelivery"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiPayload_IsDelivery(i1)
+    return out
+end
+ImGuiPayload["IsPreview"] = ImGuiPayload["IsPreview"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiPayload_IsPreview(i1)
+    return out
+end
+local mt = getmetatable(ImGuiPayload) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiPayload_ImGuiPayload()
+    return ffi.gc(p[0], C.ImGuiPayload_destroy)
+end
+setmetatable(ImGuiPayload, mt)
+M.ImGuiPayload = ImGuiPayload
+ffi.metatype("ImGuiPayload", ImGuiPayload)
+
+local ImGuiPlatformIO = ImGuiPlatformIO or {}
+ImGuiPlatformIO.__index = ImGuiPlatformIO
+local mt = getmetatable(ImGuiPlatformIO) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiPlatformIO_ImGuiPlatformIO()
+    return ffi.gc(p[0], C.ImGuiPlatformIO_destroy)
+end
+setmetatable(ImGuiPlatformIO, mt)
+M.ImGuiPlatformIO = ImGuiPlatformIO
+ffi.metatype("ImGuiPlatformIO", ImGuiPlatformIO)
+
+local ImGuiPlatformImeData = ImGuiPlatformImeData or {}
+ImGuiPlatformImeData.__index = ImGuiPlatformImeData
+local mt = getmetatable(ImGuiPlatformImeData) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiPlatformImeData_ImGuiPlatformImeData()
+    return ffi.gc(p[0], C.ImGuiPlatformImeData_destroy)
+end
+setmetatable(ImGuiPlatformImeData, mt)
+M.ImGuiPlatformImeData = ImGuiPlatformImeData
+ffi.metatype("ImGuiPlatformImeData", ImGuiPlatformImeData)
+
+local ImGuiPlatformMonitor = ImGuiPlatformMonitor or {}
+ImGuiPlatformMonitor.__index = ImGuiPlatformMonitor
+local mt = getmetatable(ImGuiPlatformMonitor) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiPlatformMonitor_ImGuiPlatformMonitor()
+    return ffi.gc(p[0], C.ImGuiPlatformMonitor_destroy)
+end
+setmetatable(ImGuiPlatformMonitor, mt)
+M.ImGuiPlatformMonitor = ImGuiPlatformMonitor
+ffi.metatype("ImGuiPlatformMonitor", ImGuiPlatformMonitor)
+
+local ImGuiStorage = ImGuiStorage or {}
+ImGuiStorage.__index = ImGuiStorage
+ImGuiStorage["BuildSortByKey"] = ImGuiStorage["BuildSortByKey"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiStorage_BuildSortByKey(i1)
+    return out
+end
+ImGuiStorage["Clear"] = ImGuiStorage["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiStorage_Clear(i1)
+    return out
+end
+ImGuiStorage["GetBool"] = ImGuiStorage["GetBool"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = false end
+    local out = C.ImGuiStorage_GetBool(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetBoolRef"] = ImGuiStorage["GetBoolRef"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = false end
+    local out = C.ImGuiStorage_GetBoolRef(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetFloat"] = ImGuiStorage["GetFloat"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0.0 end
+    local out = C.ImGuiStorage_GetFloat(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetFloatRef"] = ImGuiStorage["GetFloatRef"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0.0 end
+    local out = C.ImGuiStorage_GetFloatRef(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetInt"] = ImGuiStorage["GetInt"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.ImGuiStorage_GetInt(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetIntRef"] = ImGuiStorage["GetIntRef"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.ImGuiStorage_GetIntRef(i1, i2, i3)
+    return out
+end
+ImGuiStorage["GetVoidPtr"] = ImGuiStorage["GetVoidPtr"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiStorage_GetVoidPtr(i1, i2)
+    return out
+end
+ImGuiStorage["GetVoidPtrRef"] = ImGuiStorage["GetVoidPtrRef"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiStorage_GetVoidPtrRef(i1, i2, i3)
+    return out
+end
+ImGuiStorage["SetAllInt"] = ImGuiStorage["SetAllInt"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiStorage_SetAllInt(i1, i2)
+    return out
+end
+ImGuiStorage["SetBool"] = ImGuiStorage["SetBool"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiStorage_SetBool(i1, i2, i3)
+    return out
+end
+ImGuiStorage["SetFloat"] = ImGuiStorage["SetFloat"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiStorage_SetFloat(i1, i2, i3)
+    return out
+end
+ImGuiStorage["SetInt"] = ImGuiStorage["SetInt"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiStorage_SetInt(i1, i2, i3)
+    return out
+end
+ImGuiStorage["SetVoidPtr"] = ImGuiStorage["SetVoidPtr"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiStorage_SetVoidPtr(i1, i2, i3)
+    return out
+end
+M.ImGuiStorage = ImGuiStorage
+ffi.metatype("ImGuiStorage", ImGuiStorage)
+
+local ImGuiStoragePair = ImGuiStoragePair or {}
+ImGuiStoragePair.__index = ImGuiStoragePair
+M.ImGuiStoragePair_Int = M.ImGuiStoragePair_Int  or function(i1, i2)
+    jit.off(true)
+    local p = C.ImGuiStoragePair_ImGuiStoragePair_Int(i1, i2)
+    return ffi.gc(p[0], C.ImGuiStoragePair_destroy)
+end
+M.ImGuiStoragePair_Float = M.ImGuiStoragePair_Float  or function(i1, i2)
+    jit.off(true)
+    local p = C.ImGuiStoragePair_ImGuiStoragePair_Float(i1, i2)
+    return ffi.gc(p[0], C.ImGuiStoragePair_destroy)
+end
+M.ImGuiStoragePair_Ptr = M.ImGuiStoragePair_Ptr  or function(i1, i2)
+    jit.off(true)
+    local p = C.ImGuiStoragePair_ImGuiStoragePair_Ptr(i1, i2)
+    return ffi.gc(p[0], C.ImGuiStoragePair_destroy)
+end
+M.ImGuiStoragePair = ImGuiStoragePair
+ffi.metatype("ImGuiStoragePair", ImGuiStoragePair)
+
+local ImGuiStyle = ImGuiStyle or {}
+ImGuiStyle.__index = ImGuiStyle
+ImGuiStyle["ScaleAllSizes"] = ImGuiStyle["ScaleAllSizes"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiStyle_ScaleAllSizes(i1, i2)
+    return out
+end
+local mt = getmetatable(ImGuiStyle) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiStyle_ImGuiStyle()
+    return ffi.gc(p[0], C.ImGuiStyle_destroy)
+end
+setmetatable(ImGuiStyle, mt)
+M.ImGuiStyle = ImGuiStyle
+ffi.metatype("ImGuiStyle", ImGuiStyle)
+
+local ImGuiTableColumnSortSpecs = ImGuiTableColumnSortSpecs or {}
+ImGuiTableColumnSortSpecs.__index = ImGuiTableColumnSortSpecs
+local mt = getmetatable(ImGuiTableColumnSortSpecs) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs()
+    return ffi.gc(p[0], C.ImGuiTableColumnSortSpecs_destroy)
+end
+setmetatable(ImGuiTableColumnSortSpecs, mt)
+M.ImGuiTableColumnSortSpecs = ImGuiTableColumnSortSpecs
+ffi.metatype("ImGuiTableColumnSortSpecs", ImGuiTableColumnSortSpecs)
+
+local ImGuiTableSortSpecs = ImGuiTableSortSpecs or {}
+ImGuiTableSortSpecs.__index = ImGuiTableSortSpecs
+local mt = getmetatable(ImGuiTableSortSpecs) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiTableSortSpecs_ImGuiTableSortSpecs()
+    return ffi.gc(p[0], C.ImGuiTableSortSpecs_destroy)
+end
+setmetatable(ImGuiTableSortSpecs, mt)
+M.ImGuiTableSortSpecs = ImGuiTableSortSpecs
+ffi.metatype("ImGuiTableSortSpecs", ImGuiTableSortSpecs)
+
+local ImGuiTextBuffer = ImGuiTextBuffer or {}
+ImGuiTextBuffer.__index = ImGuiTextBuffer
+ImGuiTextBuffer["append"] = ImGuiTextBuffer["append"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_append(i1, i2, i3)
+    return out
+end
+ImGuiTextBuffer["appendf"] = ImGuiTextBuffer["appendf"]  or function(i1, i2, ...)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_appendf(i1, i2, ...)
+    return out
+end
+ImGuiTextBuffer["begin"] = ImGuiTextBuffer["begin"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_begin(i1)
+    return out
+end
+ImGuiTextBuffer["c_str"] = ImGuiTextBuffer["c_str"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_c_str(i1)
+    return out
+end
+ImGuiTextBuffer["clear"] = ImGuiTextBuffer["clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_clear(i1)
+    return out
+end
+ImGuiTextBuffer["empty"] = ImGuiTextBuffer["empty"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_empty(i1)
+    return out
+end
+ImGuiTextBuffer["end"] = ImGuiTextBuffer["end"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_end(i1)
+    return out
+end
+ImGuiTextBuffer.c_end = ImGuiTextBuffer["end"] 
+ImGuiTextBuffer["reserve"] = ImGuiTextBuffer["reserve"]  or function(i1, i2)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_reserve(i1, i2)
+    return out
+end
+ImGuiTextBuffer["size"] = ImGuiTextBuffer["size"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextBuffer_size(i1)
+    return out
+end
+local mt = getmetatable(ImGuiTextBuffer) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiTextBuffer_ImGuiTextBuffer()
+    return ffi.gc(p[0], C.ImGuiTextBuffer_destroy)
+end
+setmetatable(ImGuiTextBuffer, mt)
+M.ImGuiTextBuffer = ImGuiTextBuffer
+ffi.metatype("ImGuiTextBuffer", ImGuiTextBuffer)
+
+local ImGuiTextFilter = ImGuiTextFilter or {}
+ImGuiTextFilter.__index = ImGuiTextFilter
+ImGuiTextFilter["Build"] = ImGuiTextFilter["Build"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextFilter_Build(i1)
+    return out
+end
+ImGuiTextFilter["Clear"] = ImGuiTextFilter["Clear"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextFilter_Clear(i1)
+    return out
+end
+ImGuiTextFilter["Draw"] = ImGuiTextFilter["Draw"]  or function(i1, i2, i3)
+    jit.off(true)
+    if i2 == nil then i2 = "Filter(inc,-exc)" end
+    if i3 == nil then i3 = 0.0 end
+    local out = C.ImGuiTextFilter_Draw(i1, i2, i3)
+    return out
+end
+ImGuiTextFilter["IsActive"] = ImGuiTextFilter["IsActive"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextFilter_IsActive(i1)
+    return out
+end
+ImGuiTextFilter["PassFilter"] = ImGuiTextFilter["PassFilter"]  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.ImGuiTextFilter_PassFilter(i1, i2, i3)
+    return out
+end
+local mt = getmetatable(ImGuiTextFilter) or {}
+mt.__call = mt.__call or function(self, i1)
+    jit.off(true)
+    local p = C.ImGuiTextFilter_ImGuiTextFilter(i1)
+    return ffi.gc(p[0], C.ImGuiTextFilter_destroy)
+end
+setmetatable(ImGuiTextFilter, mt)
+M.ImGuiTextFilter = ImGuiTextFilter
+ffi.metatype("ImGuiTextFilter", ImGuiTextFilter)
+
+local ImGuiTextRange = ImGuiTextRange or {}
+ImGuiTextRange.__index = ImGuiTextRange
+ImGuiTextRange["empty"] = ImGuiTextRange["empty"]  or function(i1)
+    jit.off(true)
+    local out = C.ImGuiTextRange_empty(i1)
+    return out
+end
+ImGuiTextRange["split"] = ImGuiTextRange["split"]  or function(i1, i2)
+    jit.off(true)
+    local o1 = ffi.new("ImVector_ImGuiTextRange[1]")
+    local out = C.ImGuiTextRange_split(i1, i2, o1)
+    return o1[0], out
+end
+M.ImGuiTextRange_Nil = M.ImGuiTextRange_Nil  or function()
+    jit.off(true)
+    local p = C.ImGuiTextRange_ImGuiTextRange_Nil()
+    return ffi.gc(p[0], C.ImGuiTextRange_destroy)
+end
+M.ImGuiTextRange_Str = M.ImGuiTextRange_Str  or function(i1, i2)
+    jit.off(true)
+    local p = C.ImGuiTextRange_ImGuiTextRange_Str(i1, i2)
+    return ffi.gc(p[0], C.ImGuiTextRange_destroy)
+end
+M.ImGuiTextRange = ImGuiTextRange
+ffi.metatype("ImGuiTextRange", ImGuiTextRange)
+
+local ImGuiViewport = ImGuiViewport or {}
+ImGuiViewport.__index = ImGuiViewport
+ImGuiViewport["GetCenter"] = ImGuiViewport["GetCenter"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.ImGuiViewport_GetCenter(o1, i1)
+    return o1[0], out
+end
+ImGuiViewport["GetWorkCenter"] = ImGuiViewport["GetWorkCenter"]  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.ImGuiViewport_GetWorkCenter(o1, i1)
+    return o1[0], out
+end
+local mt = getmetatable(ImGuiViewport) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiViewport_ImGuiViewport()
+    return ffi.gc(p[0], C.ImGuiViewport_destroy)
+end
+setmetatable(ImGuiViewport, mt)
+M.ImGuiViewport = ImGuiViewport
+ffi.metatype("ImGuiViewport", ImGuiViewport)
+
+local ImGuiWindowClass = ImGuiWindowClass or {}
+ImGuiWindowClass.__index = ImGuiWindowClass
+local mt = getmetatable(ImGuiWindowClass) or {}
+mt.__call = mt.__call or function(self)
+    jit.off(true)
+    local p = C.ImGuiWindowClass_ImGuiWindowClass()
+    return ffi.gc(p[0], C.ImGuiWindowClass_destroy)
+end
+setmetatable(ImGuiWindowClass, mt)
+M.ImGuiWindowClass = ImGuiWindowClass
+ffi.metatype("ImGuiWindowClass", ImGuiWindowClass)
+
+local ImVec2 = ImVec2 or {}
+ImVec2.__index = ImVec2
+M.ImVec2_Nil = M.ImVec2_Nil  or function()
+    jit.off(true)
+    local p = C.ImVec2_ImVec2_Nil()
+    return ffi.gc(p[0], C.ImVec2_destroy)
+end
+M.ImVec2_Float = M.ImVec2_Float  or function(i1, i2)
+    jit.off(true)
+    local p = C.ImVec2_ImVec2_Float(i1, i2)
+    return ffi.gc(p[0], C.ImVec2_destroy)
+end
+M.ImVec2 = ImVec2
+ffi.metatype("ImVec2", ImVec2)
+
+local ImVec4 = ImVec4 or {}
+ImVec4.__index = ImVec4
+M.ImVec4_Nil = M.ImVec4_Nil  or function()
+    jit.off(true)
+    local p = C.ImVec4_ImVec4_Nil()
+    return ffi.gc(p[0], C.ImVec4_destroy)
+end
+M.ImVec4_Float = M.ImVec4_Float  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local p = C.ImVec4_ImVec4_Float(i1, i2, i3, i4)
+    return ffi.gc(p[0], C.ImVec4_destroy)
+end
+M.ImVec4 = ImVec4
+ffi.metatype("ImVec4", ImVec4)
+
+M.AcceptDragDropPayload = M.AcceptDragDropPayload  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igAcceptDragDropPayload(i1, i2)
+    return out
+end
+M.AlignTextToFramePadding = M.AlignTextToFramePadding  or function()
+    jit.off(true)
+    local out = C.igAlignTextToFramePadding()
+    return out
+end
+M.ArrowButton = M.ArrowButton  or function(i1, i2)
+    jit.off(true)
+    local out = C.igArrowButton(i1, i2)
+    return out
+end
+M.Begin = M.Begin  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igBegin(i1, i2, i3)
+    return out
+end
+M.BeginChild_Str = M.BeginChild_Str  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(0, 0) end
+    if i3 == nil then i3 = false end
+    if i4 == nil then i4 = 0 end
+    local out = C.igBeginChild_Str(i1, i2, i3, i4)
+    return out
+end
+M.BeginChild_ID = M.BeginChild_ID  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(0, 0) end
+    if i3 == nil then i3 = false end
+    if i4 == nil then i4 = 0 end
+    local out = C.igBeginChild_ID(i1, i2, i3, i4)
+    return out
+end
+M.BeginChildFrame = M.BeginChildFrame  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igBeginChildFrame(i1, i2, i3)
+    return out
+end
+M.BeginCombo = M.BeginCombo  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igBeginCombo(i1, i2, i3)
+    return out
+end
+M.BeginDisabled = M.BeginDisabled  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = true end
+    local out = C.igBeginDisabled(i1)
+    return out
+end
+M.BeginDragDropSource = M.BeginDragDropSource  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igBeginDragDropSource(i1)
+    return out
+end
+M.BeginDragDropTarget = M.BeginDragDropTarget  or function()
+    jit.off(true)
+    local out = C.igBeginDragDropTarget()
+    return out
+end
+M.BeginGroup = M.BeginGroup  or function()
+    jit.off(true)
+    local out = C.igBeginGroup()
+    return out
+end
+M.BeginListBox = M.BeginListBox  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(0, 0) end
+    local out = C.igBeginListBox(i1, i2)
+    return out
+end
+M.BeginMainMenuBar = M.BeginMainMenuBar  or function()
+    jit.off(true)
+    local out = C.igBeginMainMenuBar()
+    return out
+end
+M.BeginMenu = M.BeginMenu  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = true end
+    local out = C.igBeginMenu(i1, i2)
+    return out
+end
+M.BeginMenuBar = M.BeginMenuBar  or function()
+    jit.off(true)
+    local out = C.igBeginMenuBar()
+    return out
+end
+M.BeginPopup = M.BeginPopup  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igBeginPopup(i1, i2)
+    return out
+end
+M.BeginPopupContextItem = M.BeginPopupContextItem  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 1 end
+    local out = C.igBeginPopupContextItem(i1, i2)
+    return out
+end
+M.BeginPopupContextVoid = M.BeginPopupContextVoid  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 1 end
+    local out = C.igBeginPopupContextVoid(i1, i2)
+    return out
+end
+M.BeginPopupContextWindow = M.BeginPopupContextWindow  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 1 end
+    local out = C.igBeginPopupContextWindow(i1, i2)
+    return out
+end
+M.BeginPopupModal = M.BeginPopupModal  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igBeginPopupModal(i1, i2, i3)
+    return out
+end
+M.BeginTabBar = M.BeginTabBar  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igBeginTabBar(i1, i2)
+    return out
+end
+M.BeginTabItem = M.BeginTabItem  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igBeginTabItem(i1, i2, i3)
+    return out
+end
+M.BeginTable = M.BeginTable  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    if i4 == nil then i4 = M.ImVec2_Float(0.0, 0.0) end
+    if i5 == nil then i5 = 0.0 end
+    local out = C.igBeginTable(i1, i2, i3, i4, i5)
+    return out
+end
+M.BeginTooltip = M.BeginTooltip  or function()
+    jit.off(true)
+    local out = C.igBeginTooltip()
+    return out
+end
+M.Bullet = M.Bullet  or function()
+    jit.off(true)
+    local out = C.igBullet()
+    return out
+end
+M.BulletText = M.BulletText  or function(i1, ...)
+    jit.off(true)
+    local out = C.igBulletText(i1, ...)
+    return out
+end
+M.Button = M.Button  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(0, 0) end
+    local out = C.igButton(i1, i2)
+    return out
+end
+M.CalcItemWidth = M.CalcItemWidth  or function()
+    jit.off(true)
+    local out = C.igCalcItemWidth()
+    return out
+end
+M.CalcTextSize = M.CalcTextSize  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = false end
+    if i4 == nil then i4 = -1.0 end
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igCalcTextSize(o1, i1, i2, i3, i4)
+    return o1[0], out
+end
+M.CaptureKeyboardFromApp = M.CaptureKeyboardFromApp  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = true end
+    local out = C.igCaptureKeyboardFromApp(i1)
+    return out
+end
+M.CaptureMouseFromApp = M.CaptureMouseFromApp  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = true end
+    local out = C.igCaptureMouseFromApp(i1)
+    return out
+end
+M.Checkbox = M.Checkbox  or function(i1, i2)
+    jit.off(true)
+    local out = C.igCheckbox(i1, i2)
+    return out
+end
+M.CheckboxFlags_IntPtr = M.CheckboxFlags_IntPtr  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igCheckboxFlags_IntPtr(i1, i2, i3)
+    return out
+end
+M.CheckboxFlags_UintPtr = M.CheckboxFlags_UintPtr  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igCheckboxFlags_UintPtr(i1, i2, i3)
+    return out
+end
+M.CloseCurrentPopup = M.CloseCurrentPopup  or function()
+    jit.off(true)
+    local out = C.igCloseCurrentPopup()
+    return out
+end
+M.CollapsingHeader_TreeNodeFlags = M.CollapsingHeader_TreeNodeFlags  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igCollapsingHeader_TreeNodeFlags(i1, i2)
+    return out
+end
+M.CollapsingHeader_BoolPtr = M.CollapsingHeader_BoolPtr  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igCollapsingHeader_BoolPtr(i1, i2, i3)
+    return out
+end
+M.ColorButton = M.ColorButton  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    if i4 == nil then i4 = M.ImVec2_Float(0, 0) end
+    local out = C.igColorButton(i1, i2, i3, i4)
+    return out
+end
+M.ColorConvertFloat4ToU32 = M.ColorConvertFloat4ToU32  or function(i1)
+    jit.off(true)
+    local out = C.igColorConvertFloat4ToU32(i1)
+    return out
+end
+M.ColorConvertHSVtoRGB = M.ColorConvertHSVtoRGB  or function(i1, i2, i3)
+    jit.off(true)
+    local o1 = ffi.new("float[1]")
+    local o2 = ffi.new("float[1]")
+    local o3 = ffi.new("float[1]")
+    local out = C.igColorConvertHSVtoRGB(i1, i2, i3, o1, o2, o3)
+    return o1[0], o2[0], o3[0], out
+end
+M.ColorConvertRGBtoHSV = M.ColorConvertRGBtoHSV  or function(i1, i2, i3)
+    jit.off(true)
+    local o1 = ffi.new("float[1]")
+    local o2 = ffi.new("float[1]")
+    local o3 = ffi.new("float[1]")
+    local out = C.igColorConvertRGBtoHSV(i1, i2, i3, o1, o2, o3)
+    return o1[0], o2[0], o3[0], out
+end
+M.ColorConvertU32ToFloat4 = M.ColorConvertU32ToFloat4  or function(i1)
+    jit.off(true)
+    local o1 = ffi.new("ImVec4[1]")
+    local out = C.igColorConvertU32ToFloat4(o1, i1)
+    return o1[0], out
+end
+M.ColorEdit3 = M.ColorEdit3  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igColorEdit3(i1, i2, i3)
+    return out
+end
+M.ColorEdit4 = M.ColorEdit4  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igColorEdit4(i1, i2, i3)
+    return out
+end
+M.ColorPicker3 = M.ColorPicker3  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igColorPicker3(i1, i2, i3)
+    return out
+end
+M.ColorPicker4 = M.ColorPicker4  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igColorPicker4(i1, i2, i3, i4)
+    return out
+end
+M.Columns = M.Columns  or function(i1, i2, i3)
+    jit.off(true)
+    if i1 == nil then i1 = 1 end
+    if i3 == nil then i3 = true end
+    local out = C.igColumns(i1, i2, i3)
+    return out
+end
+M.Combo_Str_arr = M.Combo_Str_arr  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = -1 end
+    local out = C.igCombo_Str_arr(i1, i2, i3, i4, i5)
+    return out
+end
+M.Combo_Str = M.Combo_Str  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = -1 end
+    local out = C.igCombo_Str(i1, i2, i3, i4)
+    return out
+end
+M.Combo_FnBoolPtr = M.Combo_FnBoolPtr  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i6 == nil then i6 = -1 end
+    local out = C.igCombo_FnBoolPtr(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.CreateContext = M.CreateContext  or function(i1)
+    jit.off(true)
+    local out = C.igCreateContext(i1)
+    return out
+end
+M.DebugCheckVersionAndDataLayout = M.DebugCheckVersionAndDataLayout  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    local out = C.igDebugCheckVersionAndDataLayout(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DestroyContext = M.DestroyContext  or function(i1)
+    jit.off(true)
+    local out = C.igDestroyContext(i1)
+    return out
+end
+M.DestroyPlatformWindows = M.DestroyPlatformWindows  or function()
+    jit.off(true)
+    local out = C.igDestroyPlatformWindows()
+    return out
+end
+M.DockSpace = M.DockSpace  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(0, 0) end
+    if i3 == nil then i3 = 0 end
+    local out = C.igDockSpace(i1, i2, i3, i4)
+    return out
+end
+M.DockSpaceOverViewport = M.DockSpaceOverViewport  or function(i1, i2, i3)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igDockSpaceOverViewport(i1, i2, i3)
+    return out
+end
+M.DragFloat = M.DragFloat  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = "%.3f" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragFloat(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragFloat2 = M.DragFloat2  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = "%.3f" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragFloat2(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragFloat3 = M.DragFloat3  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = "%.3f" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragFloat3(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragFloat4 = M.DragFloat4  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = "%.3f" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragFloat4(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragFloatRange2 = M.DragFloatRange2  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i4 == nil then i4 = 1.0 end
+    if i5 == nil then i5 = 0.0 end
+    if i6 == nil then i6 = 0.0 end
+    if i7 == nil then i7 = "%.3f" end
+    if i9 == nil then i9 = 0 end
+    local out = C.igDragFloatRange2(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.DragInt = M.DragInt  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0 end
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = "%d" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragInt(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragInt2 = M.DragInt2  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0 end
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = "%d" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragInt2(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragInt3 = M.DragInt3  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0 end
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = "%d" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragInt3(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragInt4 = M.DragInt4  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = 1.0 end
+    if i4 == nil then i4 = 0 end
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = "%d" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igDragInt4(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.DragIntRange2 = M.DragIntRange2  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i4 == nil then i4 = 1.0 end
+    if i5 == nil then i5 = 0 end
+    if i6 == nil then i6 = 0 end
+    if i7 == nil then i7 = "%d" end
+    if i9 == nil then i9 = 0 end
+    local out = C.igDragIntRange2(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.DragScalar = M.DragScalar  or function(i1, i2, i3, i4, i5, i6, i7, i8)
+    jit.off(true)
+    if i4 == nil then i4 = 1.0 end
+    if i8 == nil then i8 = 0 end
+    local out = C.igDragScalar(i1, i2, i3, i4, i5, i6, i7, i8)
+    return out
+end
+M.DragScalarN = M.DragScalarN  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i5 == nil then i5 = 1.0 end
+    if i9 == nil then i9 = 0 end
+    local out = C.igDragScalarN(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.Dummy = M.Dummy  or function(i1)
+    jit.off(true)
+    local out = C.igDummy(i1)
+    return out
+end
+M.End = M.End  or function()
+    jit.off(true)
+    local out = C.igEnd()
+    return out
+end
+M.EndChild = M.EndChild  or function()
+    jit.off(true)
+    local out = C.igEndChild()
+    return out
+end
+M.EndChildFrame = M.EndChildFrame  or function()
+    jit.off(true)
+    local out = C.igEndChildFrame()
+    return out
+end
+M.EndCombo = M.EndCombo  or function()
+    jit.off(true)
+    local out = C.igEndCombo()
+    return out
+end
+M.EndDisabled = M.EndDisabled  or function()
+    jit.off(true)
+    local out = C.igEndDisabled()
+    return out
+end
+M.EndDragDropSource = M.EndDragDropSource  or function()
+    jit.off(true)
+    local out = C.igEndDragDropSource()
+    return out
+end
+M.EndDragDropTarget = M.EndDragDropTarget  or function()
+    jit.off(true)
+    local out = C.igEndDragDropTarget()
+    return out
+end
+M.EndFrame = M.EndFrame  or function()
+    jit.off(true)
+    local out = C.igEndFrame()
+    return out
+end
+M.EndGroup = M.EndGroup  or function()
+    jit.off(true)
+    local out = C.igEndGroup()
+    return out
+end
+M.EndListBox = M.EndListBox  or function()
+    jit.off(true)
+    local out = C.igEndListBox()
+    return out
+end
+M.EndMainMenuBar = M.EndMainMenuBar  or function()
+    jit.off(true)
+    local out = C.igEndMainMenuBar()
+    return out
+end
+M.EndMenu = M.EndMenu  or function()
+    jit.off(true)
+    local out = C.igEndMenu()
+    return out
+end
+M.EndMenuBar = M.EndMenuBar  or function()
+    jit.off(true)
+    local out = C.igEndMenuBar()
+    return out
+end
+M.EndPopup = M.EndPopup  or function()
+    jit.off(true)
+    local out = C.igEndPopup()
+    return out
+end
+M.EndTabBar = M.EndTabBar  or function()
+    jit.off(true)
+    local out = C.igEndTabBar()
+    return out
+end
+M.EndTabItem = M.EndTabItem  or function()
+    jit.off(true)
+    local out = C.igEndTabItem()
+    return out
+end
+M.EndTable = M.EndTable  or function()
+    jit.off(true)
+    local out = C.igEndTable()
+    return out
+end
+M.EndTooltip = M.EndTooltip  or function()
+    jit.off(true)
+    local out = C.igEndTooltip()
+    return out
+end
+M.FindViewportByID = M.FindViewportByID  or function(i1)
+    jit.off(true)
+    local out = C.igFindViewportByID(i1)
+    return out
+end
+M.FindViewportByPlatformHandle = M.FindViewportByPlatformHandle  or function(i1)
+    jit.off(true)
+    local out = C.igFindViewportByPlatformHandle(i1)
+    return out
+end
+M.GetAllocatorFunctions = M.GetAllocatorFunctions  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igGetAllocatorFunctions(i1, i2, i3)
+    return out
+end
+M.GetBackgroundDrawList_Nil = M.GetBackgroundDrawList_Nil  or function()
+    jit.off(true)
+    local out = C.igGetBackgroundDrawList_Nil()
+    return out
+end
+M.GetBackgroundDrawList_ViewportPtr = M.GetBackgroundDrawList_ViewportPtr  or function(i1)
+    jit.off(true)
+    local out = C.igGetBackgroundDrawList_ViewportPtr(i1)
+    return out
+end
+M.GetClipboardText = M.GetClipboardText  or function()
+    jit.off(true)
+    local out = C.igGetClipboardText()
+    return out
+end
+M.GetColorU32_Col = M.GetColorU32_Col  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 1.0 end
+    local out = C.igGetColorU32_Col(i1, i2)
+    return out
+end
+M.GetColorU32_Vec4 = M.GetColorU32_Vec4  or function(i1)
+    jit.off(true)
+    local out = C.igGetColorU32_Vec4(i1)
+    return out
+end
+M.GetColorU32_U32 = M.GetColorU32_U32  or function(i1)
+    jit.off(true)
+    local out = C.igGetColorU32_U32(i1)
+    return out
+end
+M.GetColumnIndex = M.GetColumnIndex  or function()
+    jit.off(true)
+    local out = C.igGetColumnIndex()
+    return out
+end
+M.GetColumnOffset = M.GetColumnOffset  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igGetColumnOffset(i1)
+    return out
+end
+M.GetColumnWidth = M.GetColumnWidth  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igGetColumnWidth(i1)
+    return out
+end
+M.GetColumnsCount = M.GetColumnsCount  or function()
+    jit.off(true)
+    local out = C.igGetColumnsCount()
+    return out
+end
+M.GetContentRegionAvail = M.GetContentRegionAvail  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetContentRegionAvail(o1)
+    return o1[0], out
+end
+M.GetContentRegionMax = M.GetContentRegionMax  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetContentRegionMax(o1)
+    return o1[0], out
+end
+M.GetCurrentContext = M.GetCurrentContext  or function()
+    jit.off(true)
+    local out = C.igGetCurrentContext()
+    return out
+end
+M.GetCursorPos = M.GetCursorPos  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetCursorPos(o1)
+    return o1[0], out
+end
+M.GetCursorPosX = M.GetCursorPosX  or function()
+    jit.off(true)
+    local out = C.igGetCursorPosX()
+    return out
+end
+M.GetCursorPosY = M.GetCursorPosY  or function()
+    jit.off(true)
+    local out = C.igGetCursorPosY()
+    return out
+end
+M.GetCursorScreenPos = M.GetCursorScreenPos  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetCursorScreenPos(o1)
+    return o1[0], out
+end
+M.GetCursorStartPos = M.GetCursorStartPos  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetCursorStartPos(o1)
+    return o1[0], out
+end
+M.GetDragDropPayload = M.GetDragDropPayload  or function()
+    jit.off(true)
+    local out = C.igGetDragDropPayload()
+    return out
+end
+M.GetDrawData = M.GetDrawData  or function()
+    jit.off(true)
+    local out = C.igGetDrawData()
+    return out
+end
+M.GetDrawListSharedData = M.GetDrawListSharedData  or function()
+    jit.off(true)
+    local out = C.igGetDrawListSharedData()
+    return out
+end
+M.GetFont = M.GetFont  or function()
+    jit.off(true)
+    local out = C.igGetFont()
+    return out
+end
+M.GetFontSize = M.GetFontSize  or function()
+    jit.off(true)
+    local out = C.igGetFontSize()
+    return out
+end
+M.GetFontTexUvWhitePixel = M.GetFontTexUvWhitePixel  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetFontTexUvWhitePixel(o1)
+    return o1[0], out
+end
+M.GetForegroundDrawList_Nil = M.GetForegroundDrawList_Nil  or function()
+    jit.off(true)
+    local out = C.igGetForegroundDrawList_Nil()
+    return out
+end
+M.GetForegroundDrawList_ViewportPtr = M.GetForegroundDrawList_ViewportPtr  or function(i1)
+    jit.off(true)
+    local out = C.igGetForegroundDrawList_ViewportPtr(i1)
+    return out
+end
+M.GetFrameCount = M.GetFrameCount  or function()
+    jit.off(true)
+    local out = C.igGetFrameCount()
+    return out
+end
+M.GetFrameHeight = M.GetFrameHeight  or function()
+    jit.off(true)
+    local out = C.igGetFrameHeight()
+    return out
+end
+M.GetFrameHeightWithSpacing = M.GetFrameHeightWithSpacing  or function()
+    jit.off(true)
+    local out = C.igGetFrameHeightWithSpacing()
+    return out
+end
+M.GetID_Str = M.GetID_Str  or function(i1)
+    jit.off(true)
+    local out = C.igGetID_Str(i1)
+    return out
+end
+M.GetID_StrStr = M.GetID_StrStr  or function(i1, i2)
+    jit.off(true)
+    local out = C.igGetID_StrStr(i1, i2)
+    return out
+end
+M.GetID_Ptr = M.GetID_Ptr  or function(i1)
+    jit.off(true)
+    local out = C.igGetID_Ptr(i1)
+    return out
+end
+M.GetIO = M.GetIO  or function()
+    jit.off(true)
+    local out = C.igGetIO()
+    return out
+end
+M.GetItemRectMax = M.GetItemRectMax  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetItemRectMax(o1)
+    return o1[0], out
+end
+M.GetItemRectMin = M.GetItemRectMin  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetItemRectMin(o1)
+    return o1[0], out
+end
+M.GetItemRectSize = M.GetItemRectSize  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetItemRectSize(o1)
+    return o1[0], out
+end
+M.GetKeyIndex = M.GetKeyIndex  or function(i1)
+    jit.off(true)
+    local out = C.igGetKeyIndex(i1)
+    return out
+end
+M.GetKeyName = M.GetKeyName  or function(i1)
+    jit.off(true)
+    local out = C.igGetKeyName(i1)
+    return out
+end
+M.GetKeyPressedAmount = M.GetKeyPressedAmount  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igGetKeyPressedAmount(i1, i2, i3)
+    return out
+end
+M.GetMainViewport = M.GetMainViewport  or function()
+    jit.off(true)
+    local out = C.igGetMainViewport()
+    return out
+end
+M.GetMouseClickedCount = M.GetMouseClickedCount  or function(i1)
+    jit.off(true)
+    local out = C.igGetMouseClickedCount(i1)
+    return out
+end
+M.GetMouseCursor = M.GetMouseCursor  or function()
+    jit.off(true)
+    local out = C.igGetMouseCursor()
+    return out
+end
+M.GetMouseDragDelta = M.GetMouseDragDelta  or function(i1, i2)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    if i2 == nil then i2 = -1.0 end
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetMouseDragDelta(o1, i1, i2)
+    return o1[0], out
+end
+M.GetMousePos = M.GetMousePos  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetMousePos(o1)
+    return o1[0], out
+end
+M.GetMousePosOnOpeningCurrentPopup = M.GetMousePosOnOpeningCurrentPopup  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetMousePosOnOpeningCurrentPopup(o1)
+    return o1[0], out
+end
+M.GetPlatformIO = M.GetPlatformIO  or function()
+    jit.off(true)
+    local out = C.igGetPlatformIO()
+    return out
+end
+M.GetScrollMaxX = M.GetScrollMaxX  or function()
+    jit.off(true)
+    local out = C.igGetScrollMaxX()
+    return out
+end
+M.GetScrollMaxY = M.GetScrollMaxY  or function()
+    jit.off(true)
+    local out = C.igGetScrollMaxY()
+    return out
+end
+M.GetScrollX = M.GetScrollX  or function()
+    jit.off(true)
+    local out = C.igGetScrollX()
+    return out
+end
+M.GetScrollY = M.GetScrollY  or function()
+    jit.off(true)
+    local out = C.igGetScrollY()
+    return out
+end
+M.GetStateStorage = M.GetStateStorage  or function()
+    jit.off(true)
+    local out = C.igGetStateStorage()
+    return out
+end
+M.GetStyle = M.GetStyle  or function()
+    jit.off(true)
+    local out = C.igGetStyle()
+    return out
+end
+M.GetStyleColorName = M.GetStyleColorName  or function(i1)
+    jit.off(true)
+    local out = C.igGetStyleColorName(i1)
+    return out
+end
+M.GetStyleColorVec4 = M.GetStyleColorVec4  or function(i1)
+    jit.off(true)
+    local out = C.igGetStyleColorVec4(i1)
+    return out
+end
+M.GetTextLineHeight = M.GetTextLineHeight  or function()
+    jit.off(true)
+    local out = C.igGetTextLineHeight()
+    return out
+end
+M.GetTextLineHeightWithSpacing = M.GetTextLineHeightWithSpacing  or function()
+    jit.off(true)
+    local out = C.igGetTextLineHeightWithSpacing()
+    return out
+end
+M.GetTime = M.GetTime  or function()
+    jit.off(true)
+    local out = C.igGetTime()
+    return out
+end
+M.GetTreeNodeToLabelSpacing = M.GetTreeNodeToLabelSpacing  or function()
+    jit.off(true)
+    local out = C.igGetTreeNodeToLabelSpacing()
+    return out
+end
+M.GetVersion = M.GetVersion  or function()
+    jit.off(true)
+    local out = C.igGetVersion()
+    return out
+end
+M.GetWindowContentRegionMax = M.GetWindowContentRegionMax  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetWindowContentRegionMax(o1)
+    return o1[0], out
+end
+M.GetWindowContentRegionMin = M.GetWindowContentRegionMin  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetWindowContentRegionMin(o1)
+    return o1[0], out
+end
+M.GetWindowDockID = M.GetWindowDockID  or function()
+    jit.off(true)
+    local out = C.igGetWindowDockID()
+    return out
+end
+M.GetWindowDpiScale = M.GetWindowDpiScale  or function()
+    jit.off(true)
+    local out = C.igGetWindowDpiScale()
+    return out
+end
+M.GetWindowDrawList = M.GetWindowDrawList  or function()
+    jit.off(true)
+    local out = C.igGetWindowDrawList()
+    return out
+end
+M.GetWindowHeight = M.GetWindowHeight  or function()
+    jit.off(true)
+    local out = C.igGetWindowHeight()
+    return out
+end
+M.GetWindowPos = M.GetWindowPos  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetWindowPos(o1)
+    return o1[0], out
+end
+M.GetWindowSize = M.GetWindowSize  or function()
+    jit.off(true)
+    local o1 = ffi.new("ImVec2[1]")
+    local out = C.igGetWindowSize(o1)
+    return o1[0], out
+end
+M.GetWindowViewport = M.GetWindowViewport  or function()
+    jit.off(true)
+    local out = C.igGetWindowViewport()
+    return out
+end
+M.GetWindowWidth = M.GetWindowWidth  or function()
+    jit.off(true)
+    local out = C.igGetWindowWidth()
+    return out
+end
+M.Image = M.Image  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i3 == nil then i3 = M.ImVec2_Float(0, 0) end
+    if i4 == nil then i4 = M.ImVec2_Float(1, 1) end
+    if i5 == nil then i5 = M.ImVec4_Float(1, 1, 1, 1) end
+    if i6 == nil then i6 = M.ImVec4_Float(0, 0, 0, 0) end
+    local ptr = ffi.cast("void *", i1)
+    M.love._textures[tostring(ptr)] = i1
+    i1 = ptr
+    local out = C.igImage(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.ImageButton = M.ImageButton  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i3 == nil then i3 = M.ImVec2_Float(0, 0) end
+    if i4 == nil then i4 = M.ImVec2_Float(1, 1) end
+    if i5 == nil then i5 = -1 end
+    if i6 == nil then i6 = M.ImVec4_Float(0, 0, 0, 0) end
+    if i7 == nil then i7 = M.ImVec4_Float(1, 1, 1, 1) end
+    local ptr = ffi.cast("void *", i1)
+    M.love._textures[tostring(ptr)] = i1
+    i1 = ptr
+    local out = C.igImageButton(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.Indent = M.Indent  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0.0 end
+    local out = C.igIndent(i1)
+    return out
+end
+M.InputDouble = M.InputDouble  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i3 == nil then i3 = 0.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = "%.6f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igInputDouble(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.InputFloat = M.InputFloat  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i3 == nil then i3 = 0.0 end
+    if i4 == nil then i4 = 0.0 end
+    if i5 == nil then i5 = "%.3f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igInputFloat(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.InputFloat2 = M.InputFloat2  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = "%.3f" end
+    if i4 == nil then i4 = 0 end
+    local out = C.igInputFloat2(i1, i2, i3, i4)
+    return out
+end
+M.InputFloat3 = M.InputFloat3  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = "%.3f" end
+    if i4 == nil then i4 = 0 end
+    local out = C.igInputFloat3(i1, i2, i3, i4)
+    return out
+end
+M.InputFloat4 = M.InputFloat4  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = "%.3f" end
+    if i4 == nil then i4 = 0 end
+    local out = C.igInputFloat4(i1, i2, i3, i4)
+    return out
+end
+M.InputInt = M.InputInt  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i3 == nil then i3 = 1 end
+    if i4 == nil then i4 = 100 end
+    if i5 == nil then i5 = 0 end
+    local out = C.igInputInt(i1, i2, i3, i4, i5)
+    return out
+end
+M.InputInt2 = M.InputInt2  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igInputInt2(i1, i2, i3)
+    return out
+end
+M.InputInt3 = M.InputInt3  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igInputInt3(i1, i2, i3)
+    return out
+end
+M.InputInt4 = M.InputInt4  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igInputInt4(i1, i2, i3)
+    return out
+end
+M.InputScalar = M.InputScalar  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i7 == nil then i7 = 0 end
+    local out = C.igInputScalar(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.InputScalarN = M.InputScalarN  or function(i1, i2, i3, i4, i5, i6, i7, i8)
+    jit.off(true)
+    if i8 == nil then i8 = 0 end
+    local out = C.igInputScalarN(i1, i2, i3, i4, i5, i6, i7, i8)
+    return out
+end
+M.InputText = M.InputText  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i4 == nil then i4 = 0 end
+    local out = C.igInputText(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.InputTextMultiline = M.InputTextMultiline  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i4 == nil then i4 = M.ImVec2_Float(0, 0) end
+    if i5 == nil then i5 = 0 end
+    local out = C.igInputTextMultiline(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.InputTextWithHint = M.InputTextWithHint  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    local out = C.igInputTextWithHint(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.InvisibleButton = M.InvisibleButton  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igInvisibleButton(i1, i2, i3)
+    return out
+end
+M.IsAnyItemActive = M.IsAnyItemActive  or function()
+    jit.off(true)
+    local out = C.igIsAnyItemActive()
+    return out
+end
+M.IsAnyItemFocused = M.IsAnyItemFocused  or function()
+    jit.off(true)
+    local out = C.igIsAnyItemFocused()
+    return out
+end
+M.IsAnyItemHovered = M.IsAnyItemHovered  or function()
+    jit.off(true)
+    local out = C.igIsAnyItemHovered()
+    return out
+end
+M.IsAnyMouseDown = M.IsAnyMouseDown  or function()
+    jit.off(true)
+    local out = C.igIsAnyMouseDown()
+    return out
+end
+M.IsItemActivated = M.IsItemActivated  or function()
+    jit.off(true)
+    local out = C.igIsItemActivated()
+    return out
+end
+M.IsItemActive = M.IsItemActive  or function()
+    jit.off(true)
+    local out = C.igIsItemActive()
+    return out
+end
+M.IsItemClicked = M.IsItemClicked  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igIsItemClicked(i1)
+    return out
+end
+M.IsItemDeactivated = M.IsItemDeactivated  or function()
+    jit.off(true)
+    local out = C.igIsItemDeactivated()
+    return out
+end
+M.IsItemDeactivatedAfterEdit = M.IsItemDeactivatedAfterEdit  or function()
+    jit.off(true)
+    local out = C.igIsItemDeactivatedAfterEdit()
+    return out
+end
+M.IsItemEdited = M.IsItemEdited  or function()
+    jit.off(true)
+    local out = C.igIsItemEdited()
+    return out
+end
+M.IsItemFocused = M.IsItemFocused  or function()
+    jit.off(true)
+    local out = C.igIsItemFocused()
+    return out
+end
+M.IsItemHovered = M.IsItemHovered  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igIsItemHovered(i1)
+    return out
+end
+M.IsItemToggledOpen = M.IsItemToggledOpen  or function()
+    jit.off(true)
+    local out = C.igIsItemToggledOpen()
+    return out
+end
+M.IsItemVisible = M.IsItemVisible  or function()
+    jit.off(true)
+    local out = C.igIsItemVisible()
+    return out
+end
+M.IsKeyDown = M.IsKeyDown  or function(i1)
+    jit.off(true)
+    local out = C.igIsKeyDown(i1)
+    return out
+end
+M.IsKeyPressed = M.IsKeyPressed  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = true end
+    local out = C.igIsKeyPressed(i1, i2)
+    return out
+end
+M.IsKeyReleased = M.IsKeyReleased  or function(i1)
+    jit.off(true)
+    local out = C.igIsKeyReleased(i1)
+    return out
+end
+M.IsMouseClicked = M.IsMouseClicked  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = false end
+    local out = C.igIsMouseClicked(i1, i2)
+    return out
+end
+M.IsMouseDoubleClicked = M.IsMouseDoubleClicked  or function(i1)
+    jit.off(true)
+    local out = C.igIsMouseDoubleClicked(i1)
+    return out
+end
+M.IsMouseDown = M.IsMouseDown  or function(i1)
+    jit.off(true)
+    local out = C.igIsMouseDown(i1)
+    return out
+end
+M.IsMouseDragging = M.IsMouseDragging  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = -1.0 end
+    local out = C.igIsMouseDragging(i1, i2)
+    return out
+end
+M.IsMouseHoveringRect = M.IsMouseHoveringRect  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = true end
+    local out = C.igIsMouseHoveringRect(i1, i2, i3)
+    return out
+end
+M.IsMousePosValid = M.IsMousePosValid  or function(i1)
+    jit.off(true)
+    local out = C.igIsMousePosValid(i1)
+    return out
+end
+M.IsMouseReleased = M.IsMouseReleased  or function(i1)
+    jit.off(true)
+    local out = C.igIsMouseReleased(i1)
+    return out
+end
+M.IsPopupOpen = M.IsPopupOpen  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igIsPopupOpen(i1, i2)
+    return out
+end
+M.IsRectVisible_Nil = M.IsRectVisible_Nil  or function(i1)
+    jit.off(true)
+    local out = C.igIsRectVisible_Nil(i1)
+    return out
+end
+M.IsRectVisible_Vec2 = M.IsRectVisible_Vec2  or function(i1, i2)
+    jit.off(true)
+    local out = C.igIsRectVisible_Vec2(i1, i2)
+    return out
+end
+M.IsWindowAppearing = M.IsWindowAppearing  or function()
+    jit.off(true)
+    local out = C.igIsWindowAppearing()
+    return out
+end
+M.IsWindowCollapsed = M.IsWindowCollapsed  or function()
+    jit.off(true)
+    local out = C.igIsWindowCollapsed()
+    return out
+end
+M.IsWindowDocked = M.IsWindowDocked  or function()
+    jit.off(true)
+    local out = C.igIsWindowDocked()
+    return out
+end
+M.IsWindowFocused = M.IsWindowFocused  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igIsWindowFocused(i1)
+    return out
+end
+M.IsWindowHovered = M.IsWindowHovered  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igIsWindowHovered(i1)
+    return out
+end
+M.LabelText = M.LabelText  or function(i1, i2, ...)
+    jit.off(true)
+    local out = C.igLabelText(i1, i2, ...)
+    return out
+end
+M.ListBox_Str_arr = M.ListBox_Str_arr  or function(i1, i2, i3, i4, i5)
+    jit.off(true)
+    if i5 == nil then i5 = -1 end
+    local out = C.igListBox_Str_arr(i1, i2, i3, i4, i5)
+    return out
+end
+M.ListBox_FnBoolPtr = M.ListBox_FnBoolPtr  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i6 == nil then i6 = -1 end
+    local out = C.igListBox_FnBoolPtr(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.LoadIniSettingsFromDisk = M.LoadIniSettingsFromDisk  or function(i1)
+    jit.off(true)
+    local out = C.igLoadIniSettingsFromDisk(i1)
+    return out
+end
+M.LoadIniSettingsFromMemory = M.LoadIniSettingsFromMemory  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igLoadIniSettingsFromMemory(i1, i2)
+    return out
+end
+M.LogButtons = M.LogButtons  or function()
+    jit.off(true)
+    local out = C.igLogButtons()
+    return out
+end
+M.LogFinish = M.LogFinish  or function()
+    jit.off(true)
+    local out = C.igLogFinish()
+    return out
+end
+M.LogText = M.LogText  or function(i1, ...)
+    jit.off(true)
+    local out = C.igLogText(i1, ...)
+    return out
+end
+M.LogToClipboard = M.LogToClipboard  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igLogToClipboard(i1)
+    return out
+end
+M.LogToFile = M.LogToFile  or function(i1, i2)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igLogToFile(i1, i2)
+    return out
+end
+M.LogToTTY = M.LogToTTY  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igLogToTTY(i1)
+    return out
+end
+M.MemAlloc = M.MemAlloc  or function(i1)
+    jit.off(true)
+    local out = C.igMemAlloc(i1)
+    return out
+end
+M.MemFree = M.MemFree  or function(i1)
+    jit.off(true)
+    local out = C.igMemFree(i1)
+    return out
+end
+M.MenuItem_Bool = M.MenuItem_Bool  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = false end
+    if i4 == nil then i4 = true end
+    local out = C.igMenuItem_Bool(i1, i2, i3, i4)
+    return out
+end
+M.MenuItem_BoolPtr = M.MenuItem_BoolPtr  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = true end
+    local out = C.igMenuItem_BoolPtr(i1, i2, i3, i4)
+    return out
+end
+M.NewFrame = M.NewFrame  or function()
+    jit.off(true)
+    local out = C.igNewFrame()
+    return out
+end
+M.NewLine = M.NewLine  or function()
+    jit.off(true)
+    local out = C.igNewLine()
+    return out
+end
+M.NextColumn = M.NextColumn  or function()
+    jit.off(true)
+    local out = C.igNextColumn()
+    return out
+end
+M.OpenPopup_Str = M.OpenPopup_Str  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igOpenPopup_Str(i1, i2)
+    return out
+end
+M.OpenPopup_ID = M.OpenPopup_ID  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igOpenPopup_ID(i1, i2)
+    return out
+end
+M.OpenPopupOnItemClick = M.OpenPopupOnItemClick  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 1 end
+    local out = C.igOpenPopupOnItemClick(i1, i2)
+    return out
+end
+M.PlotHistogram_FloatPtr = M.PlotHistogram_FloatPtr  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i4 == nil then i4 = 0 end
+    if i6 == nil then i6 = FLT_MAX end
+    if i7 == nil then i7 = FLT_MAX end
+    if i8 == nil then i8 = M.ImVec2_Float(0, 0) end
+    if i9 == nil then i9 = ffi.sizeof("float") end
+    local out = C.igPlotHistogram_FloatPtr(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.PlotHistogram_FnFloatPtr = M.PlotHistogram_FnFloatPtr  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    if i7 == nil then i7 = FLT_MAX end
+    if i8 == nil then i8 = FLT_MAX end
+    if i9 == nil then i9 = M.ImVec2_Float(0, 0) end
+    local out = C.igPlotHistogram_FnFloatPtr(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.PlotLines_FloatPtr = M.PlotLines_FloatPtr  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i4 == nil then i4 = 0 end
+    if i6 == nil then i6 = FLT_MAX end
+    if i7 == nil then i7 = FLT_MAX end
+    if i8 == nil then i8 = M.ImVec2_Float(0, 0) end
+    if i9 == nil then i9 = ffi.sizeof("float") end
+    local out = C.igPlotLines_FloatPtr(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.PlotLines_FnFloatPtr = M.PlotLines_FnFloatPtr  or function(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    jit.off(true)
+    if i5 == nil then i5 = 0 end
+    if i7 == nil then i7 = FLT_MAX end
+    if i8 == nil then i8 = FLT_MAX end
+    if i9 == nil then i9 = M.ImVec2_Float(0, 0) end
+    local out = C.igPlotLines_FnFloatPtr(i1, i2, i3, i4, i5, i6, i7, i8, i9)
+    return out
+end
+M.PopAllowKeyboardFocus = M.PopAllowKeyboardFocus  or function()
+    jit.off(true)
+    local out = C.igPopAllowKeyboardFocus()
+    return out
+end
+M.PopButtonRepeat = M.PopButtonRepeat  or function()
+    jit.off(true)
+    local out = C.igPopButtonRepeat()
+    return out
+end
+M.PopClipRect = M.PopClipRect  or function()
+    jit.off(true)
+    local out = C.igPopClipRect()
+    return out
+end
+M.PopFont = M.PopFont  or function()
+    jit.off(true)
+    local out = C.igPopFont()
+    return out
+end
+M.PopID = M.PopID  or function()
+    jit.off(true)
+    local out = C.igPopID()
+    return out
+end
+M.PopItemWidth = M.PopItemWidth  or function()
+    jit.off(true)
+    local out = C.igPopItemWidth()
+    return out
+end
+M.PopStyleColor = M.PopStyleColor  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 1 end
+    local out = C.igPopStyleColor(i1)
+    return out
+end
+M.PopStyleVar = M.PopStyleVar  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 1 end
+    local out = C.igPopStyleVar(i1)
+    return out
+end
+M.PopTextWrapPos = M.PopTextWrapPos  or function()
+    jit.off(true)
+    local out = C.igPopTextWrapPos()
+    return out
+end
+M.ProgressBar = M.ProgressBar  or function(i1, i2, i3)
+    jit.off(true)
+    if i2 == nil then i2 = M.ImVec2_Float(-FLT_MIN, 0) end
+    local out = C.igProgressBar(i1, i2, i3)
+    return out
+end
+M.PushAllowKeyboardFocus = M.PushAllowKeyboardFocus  or function(i1)
+    jit.off(true)
+    local out = C.igPushAllowKeyboardFocus(i1)
+    return out
+end
+M.PushButtonRepeat = M.PushButtonRepeat  or function(i1)
+    jit.off(true)
+    local out = C.igPushButtonRepeat(i1)
+    return out
+end
+M.PushClipRect = M.PushClipRect  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igPushClipRect(i1, i2, i3)
+    return out
+end
+M.PushFont = M.PushFont  or function(i1)
+    jit.off(true)
+    local out = C.igPushFont(i1)
+    return out
+end
+M.PushID_Str = M.PushID_Str  or function(i1)
+    jit.off(true)
+    local out = C.igPushID_Str(i1)
+    return out
+end
+M.PushID_StrStr = M.PushID_StrStr  or function(i1, i2)
+    jit.off(true)
+    local out = C.igPushID_StrStr(i1, i2)
+    return out
+end
+M.PushID_Ptr = M.PushID_Ptr  or function(i1)
+    jit.off(true)
+    local out = C.igPushID_Ptr(i1)
+    return out
+end
+M.PushID_Int = M.PushID_Int  or function(i1)
+    jit.off(true)
+    local out = C.igPushID_Int(i1)
+    return out
+end
+M.PushItemWidth = M.PushItemWidth  or function(i1)
+    jit.off(true)
+    local out = C.igPushItemWidth(i1)
+    return out
+end
+M.PushStyleColor_U32 = M.PushStyleColor_U32  or function(i1, i2)
+    jit.off(true)
+    local out = C.igPushStyleColor_U32(i1, i2)
+    return out
+end
+M.PushStyleColor_Vec4 = M.PushStyleColor_Vec4  or function(i1, i2)
+    jit.off(true)
+    local out = C.igPushStyleColor_Vec4(i1, i2)
+    return out
+end
+M.PushStyleVar_Float = M.PushStyleVar_Float  or function(i1, i2)
+    jit.off(true)
+    local out = C.igPushStyleVar_Float(i1, i2)
+    return out
+end
+M.PushStyleVar_Vec2 = M.PushStyleVar_Vec2  or function(i1, i2)
+    jit.off(true)
+    local out = C.igPushStyleVar_Vec2(i1, i2)
+    return out
+end
+M.PushTextWrapPos = M.PushTextWrapPos  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0.0 end
+    local out = C.igPushTextWrapPos(i1)
+    return out
+end
+M.RadioButton_Bool = M.RadioButton_Bool  or function(i1, i2)
+    jit.off(true)
+    local out = C.igRadioButton_Bool(i1, i2)
+    return out
+end
+M.RadioButton_IntPtr = M.RadioButton_IntPtr  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igRadioButton_IntPtr(i1, i2, i3)
+    return out
+end
+M.Render = M.Render  or function()
+    jit.off(true)
+    local out = C.igRender()
+    return out
+end
+M.RenderPlatformWindowsDefault = M.RenderPlatformWindowsDefault  or function(i1, i2)
+    jit.off(true)
+    local out = C.igRenderPlatformWindowsDefault(i1, i2)
+    return out
+end
+M.ResetMouseDragDelta = M.ResetMouseDragDelta  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igResetMouseDragDelta(i1)
+    return out
+end
+M.SameLine = M.SameLine  or function(i1, i2)
+    jit.off(true)
+    if i1 == nil then i1 = 0.0 end
+    if i2 == nil then i2 = -1.0 end
+    local out = C.igSameLine(i1, i2)
+    return out
+end
+M.SaveIniSettingsToDisk = M.SaveIniSettingsToDisk  or function(i1)
+    jit.off(true)
+    local out = C.igSaveIniSettingsToDisk(i1)
+    return out
+end
+M.SaveIniSettingsToMemory = M.SaveIniSettingsToMemory  or function()
+    jit.off(true)
+    local o1 = ffi.new("size_t[1]")
+    local out = C.igSaveIniSettingsToMemory(o1)
+    return o1[0], out
+end
+M.Selectable_Bool = M.Selectable_Bool  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i2 == nil then i2 = false end
+    if i3 == nil then i3 = 0 end
+    if i4 == nil then i4 = M.ImVec2_Float(0, 0) end
+    local out = C.igSelectable_Bool(i1, i2, i3, i4)
+    return out
+end
+M.Selectable_BoolPtr = M.Selectable_BoolPtr  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    if i4 == nil then i4 = M.ImVec2_Float(0, 0) end
+    local out = C.igSelectable_BoolPtr(i1, i2, i3, i4)
+    return out
+end
+M.Separator = M.Separator  or function()
+    jit.off(true)
+    local out = C.igSeparator()
+    return out
+end
+M.SetAllocatorFunctions = M.SetAllocatorFunctions  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igSetAllocatorFunctions(i1, i2, i3)
+    return out
+end
+M.SetClipboardText = M.SetClipboardText  or function(i1)
+    jit.off(true)
+    local out = C.igSetClipboardText(i1)
+    return out
+end
+M.SetColorEditOptions = M.SetColorEditOptions  or function(i1)
+    jit.off(true)
+    local out = C.igSetColorEditOptions(i1)
+    return out
+end
+M.SetColumnOffset = M.SetColumnOffset  or function(i1, i2)
+    jit.off(true)
+    local out = C.igSetColumnOffset(i1, i2)
+    return out
+end
+M.SetColumnWidth = M.SetColumnWidth  or function(i1, i2)
+    jit.off(true)
+    local out = C.igSetColumnWidth(i1, i2)
+    return out
+end
+M.SetCurrentContext = M.SetCurrentContext  or function(i1)
+    jit.off(true)
+    local out = C.igSetCurrentContext(i1)
+    return out
+end
+M.SetCursorPos = M.SetCursorPos  or function(i1)
+    jit.off(true)
+    local out = C.igSetCursorPos(i1)
+    return out
+end
+M.SetCursorPosX = M.SetCursorPosX  or function(i1)
+    jit.off(true)
+    local out = C.igSetCursorPosX(i1)
+    return out
+end
+M.SetCursorPosY = M.SetCursorPosY  or function(i1)
+    jit.off(true)
+    local out = C.igSetCursorPosY(i1)
+    return out
+end
+M.SetCursorScreenPos = M.SetCursorScreenPos  or function(i1)
+    jit.off(true)
+    local out = C.igSetCursorScreenPos(i1)
+    return out
+end
+M.SetDragDropPayload = M.SetDragDropPayload  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i4 == nil then i4 = 0 end
+    local out = C.igSetDragDropPayload(i1, i2, i3, i4)
+    return out
+end
+M.SetItemAllowOverlap = M.SetItemAllowOverlap  or function()
+    jit.off(true)
+    local out = C.igSetItemAllowOverlap()
+    return out
+end
+M.SetItemDefaultFocus = M.SetItemDefaultFocus  or function()
+    jit.off(true)
+    local out = C.igSetItemDefaultFocus()
+    return out
+end
+M.SetKeyboardFocusHere = M.SetKeyboardFocusHere  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    local out = C.igSetKeyboardFocusHere(i1)
+    return out
+end
+M.SetMouseCursor = M.SetMouseCursor  or function(i1)
+    jit.off(true)
+    local out = C.igSetMouseCursor(i1)
+    return out
+end
+M.SetNextItemOpen = M.SetNextItemOpen  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetNextItemOpen(i1, i2)
+    return out
+end
+M.SetNextItemWidth = M.SetNextItemWidth  or function(i1)
+    jit.off(true)
+    local out = C.igSetNextItemWidth(i1)
+    return out
+end
+M.SetNextWindowBgAlpha = M.SetNextWindowBgAlpha  or function(i1)
+    jit.off(true)
+    local out = C.igSetNextWindowBgAlpha(i1)
+    return out
+end
+M.SetNextWindowClass = M.SetNextWindowClass  or function(i1)
+    jit.off(true)
+    local out = C.igSetNextWindowClass(i1)
+    return out
+end
+M.SetNextWindowCollapsed = M.SetNextWindowCollapsed  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetNextWindowCollapsed(i1, i2)
+    return out
+end
+M.SetNextWindowContentSize = M.SetNextWindowContentSize  or function(i1)
+    jit.off(true)
+    local out = C.igSetNextWindowContentSize(i1)
+    return out
+end
+M.SetNextWindowDockID = M.SetNextWindowDockID  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetNextWindowDockID(i1, i2)
+    return out
+end
+M.SetNextWindowFocus = M.SetNextWindowFocus  or function()
+    jit.off(true)
+    local out = C.igSetNextWindowFocus()
+    return out
+end
+M.SetNextWindowPos = M.SetNextWindowPos  or function(i1, i2, i3)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    if i3 == nil then i3 = M.ImVec2_Float(0, 0) end
+    local out = C.igSetNextWindowPos(i1, i2, i3)
+    return out
+end
+M.SetNextWindowSize = M.SetNextWindowSize  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetNextWindowSize(i1, i2)
+    return out
+end
+M.SetNextWindowSizeConstraints = M.SetNextWindowSizeConstraints  or function(i1, i2, i3, i4)
+    jit.off(true)
+    local out = C.igSetNextWindowSizeConstraints(i1, i2, i3, i4)
+    return out
+end
+M.SetNextWindowViewport = M.SetNextWindowViewport  or function(i1)
+    jit.off(true)
+    local out = C.igSetNextWindowViewport(i1)
+    return out
+end
+M.SetScrollFromPosX = M.SetScrollFromPosX  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0.5 end
+    local out = C.igSetScrollFromPosX(i1, i2)
+    return out
+end
+M.SetScrollFromPosY = M.SetScrollFromPosY  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0.5 end
+    local out = C.igSetScrollFromPosY(i1, i2)
+    return out
+end
+M.SetScrollHereX = M.SetScrollHereX  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0.5 end
+    local out = C.igSetScrollHereX(i1)
+    return out
+end
+M.SetScrollHereY = M.SetScrollHereY  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0.5 end
+    local out = C.igSetScrollHereY(i1)
+    return out
+end
+M.SetScrollX = M.SetScrollX  or function(i1)
+    jit.off(true)
+    local out = C.igSetScrollX(i1)
+    return out
+end
+M.SetScrollY = M.SetScrollY  or function(i1)
+    jit.off(true)
+    local out = C.igSetScrollY(i1)
+    return out
+end
+M.SetStateStorage = M.SetStateStorage  or function(i1)
+    jit.off(true)
+    local out = C.igSetStateStorage(i1)
+    return out
+end
+M.SetTabItemClosed = M.SetTabItemClosed  or function(i1)
+    jit.off(true)
+    local out = C.igSetTabItemClosed(i1)
+    return out
+end
+M.SetTooltip = M.SetTooltip  or function(i1, ...)
+    jit.off(true)
+    local out = C.igSetTooltip(i1, ...)
+    return out
+end
+M.SetWindowCollapsed_Bool = M.SetWindowCollapsed_Bool  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetWindowCollapsed_Bool(i1, i2)
+    return out
+end
+M.SetWindowCollapsed_Str = M.SetWindowCollapsed_Str  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igSetWindowCollapsed_Str(i1, i2, i3)
+    return out
+end
+M.SetWindowFocus_Nil = M.SetWindowFocus_Nil  or function()
+    jit.off(true)
+    local out = C.igSetWindowFocus_Nil()
+    return out
+end
+M.SetWindowFocus_Str = M.SetWindowFocus_Str  or function(i1)
+    jit.off(true)
+    local out = C.igSetWindowFocus_Str(i1)
+    return out
+end
+M.SetWindowFontScale = M.SetWindowFontScale  or function(i1)
+    jit.off(true)
+    local out = C.igSetWindowFontScale(i1)
+    return out
+end
+M.SetWindowPos_Vec2 = M.SetWindowPos_Vec2  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetWindowPos_Vec2(i1, i2)
+    return out
+end
+M.SetWindowPos_Str = M.SetWindowPos_Str  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igSetWindowPos_Str(i1, i2, i3)
+    return out
+end
+M.SetWindowSize_Vec2 = M.SetWindowSize_Vec2  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igSetWindowSize_Vec2(i1, i2)
+    return out
+end
+M.SetWindowSize_Str = M.SetWindowSize_Str  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = 0 end
+    local out = C.igSetWindowSize_Str(i1, i2, i3)
+    return out
+end
+M.ShowAboutWindow = M.ShowAboutWindow  or function(i1)
+    jit.off(true)
+    local out = C.igShowAboutWindow(i1)
+    return out
+end
+M.ShowDemoWindow = M.ShowDemoWindow  or function(i1)
+    jit.off(true)
+    local out = C.igShowDemoWindow(i1)
+    return out
+end
+M.ShowFontSelector = M.ShowFontSelector  or function(i1)
+    jit.off(true)
+    local out = C.igShowFontSelector(i1)
+    return out
+end
+M.ShowMetricsWindow = M.ShowMetricsWindow  or function(i1)
+    jit.off(true)
+    local out = C.igShowMetricsWindow(i1)
+    return out
+end
+M.ShowStackToolWindow = M.ShowStackToolWindow  or function(i1)
+    jit.off(true)
+    local out = C.igShowStackToolWindow(i1)
+    return out
+end
+M.ShowStyleEditor = M.ShowStyleEditor  or function(i1)
+    jit.off(true)
+    local out = C.igShowStyleEditor(i1)
+    return out
+end
+M.ShowStyleSelector = M.ShowStyleSelector  or function(i1)
+    jit.off(true)
+    local out = C.igShowStyleSelector(i1)
+    return out
+end
+M.ShowUserGuide = M.ShowUserGuide  or function()
+    jit.off(true)
+    local out = C.igShowUserGuide()
+    return out
+end
+M.SliderAngle = M.SliderAngle  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i3 == nil then i3 = -360.0 end
+    if i4 == nil then i4 = 360.0 end
+    if i5 == nil then i5 = "%.0f deg" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderAngle(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderFloat = M.SliderFloat  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%.3f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderFloat(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderFloat2 = M.SliderFloat2  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%.3f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderFloat2(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderFloat3 = M.SliderFloat3  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%.3f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderFloat3(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderFloat4 = M.SliderFloat4  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%.3f" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderFloat4(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderInt = M.SliderInt  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%d" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderInt(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderInt2 = M.SliderInt2  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%d" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderInt2(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderInt3 = M.SliderInt3  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%d" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderInt3(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderInt4 = M.SliderInt4  or function(i1, i2, i3, i4, i5, i6)
+    jit.off(true)
+    if i5 == nil then i5 = "%d" end
+    if i6 == nil then i6 = 0 end
+    local out = C.igSliderInt4(i1, i2, i3, i4, i5, i6)
+    return out
+end
+M.SliderScalar = M.SliderScalar  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i7 == nil then i7 = 0 end
+    local out = C.igSliderScalar(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.SliderScalarN = M.SliderScalarN  or function(i1, i2, i3, i4, i5, i6, i7, i8)
+    jit.off(true)
+    if i8 == nil then i8 = 0 end
+    local out = C.igSliderScalarN(i1, i2, i3, i4, i5, i6, i7, i8)
+    return out
+end
+M.SmallButton = M.SmallButton  or function(i1)
+    jit.off(true)
+    local out = C.igSmallButton(i1)
+    return out
+end
+M.Spacing = M.Spacing  or function()
+    jit.off(true)
+    local out = C.igSpacing()
+    return out
+end
+M.StyleColorsClassic = M.StyleColorsClassic  or function(i1)
+    jit.off(true)
+    local out = C.igStyleColorsClassic(i1)
+    return out
+end
+M.StyleColorsDark = M.StyleColorsDark  or function(i1)
+    jit.off(true)
+    local out = C.igStyleColorsDark(i1)
+    return out
+end
+M.StyleColorsLight = M.StyleColorsLight  or function(i1)
+    jit.off(true)
+    local out = C.igStyleColorsLight(i1)
+    return out
+end
+M.TabItemButton = M.TabItemButton  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igTabItemButton(i1, i2)
+    return out
+end
+M.TableGetColumnCount = M.TableGetColumnCount  or function()
+    jit.off(true)
+    local out = C.igTableGetColumnCount()
+    return out
+end
+M.TableGetColumnFlags = M.TableGetColumnFlags  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igTableGetColumnFlags(i1)
+    return out
+end
+M.TableGetColumnIndex = M.TableGetColumnIndex  or function()
+    jit.off(true)
+    local out = C.igTableGetColumnIndex()
+    return out
+end
+M.TableGetColumnName = M.TableGetColumnName  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = -1 end
+    local out = C.igTableGetColumnName(i1)
+    return out
+end
+M.TableGetRowIndex = M.TableGetRowIndex  or function()
+    jit.off(true)
+    local out = C.igTableGetRowIndex()
+    return out
+end
+M.TableGetSortSpecs = M.TableGetSortSpecs  or function()
+    jit.off(true)
+    local out = C.igTableGetSortSpecs()
+    return out
+end
+M.TableHeader = M.TableHeader  or function(i1)
+    jit.off(true)
+    local out = C.igTableHeader(i1)
+    return out
+end
+M.TableHeadersRow = M.TableHeadersRow  or function()
+    jit.off(true)
+    local out = C.igTableHeadersRow()
+    return out
+end
+M.TableNextColumn = M.TableNextColumn  or function()
+    jit.off(true)
+    local out = C.igTableNextColumn()
+    return out
+end
+M.TableNextRow = M.TableNextRow  or function(i1, i2)
+    jit.off(true)
+    if i1 == nil then i1 = 0 end
+    if i2 == nil then i2 = 0.0 end
+    local out = C.igTableNextRow(i1, i2)
+    return out
+end
+M.TableSetBgColor = M.TableSetBgColor  or function(i1, i2, i3)
+    jit.off(true)
+    if i3 == nil then i3 = -1 end
+    local out = C.igTableSetBgColor(i1, i2, i3)
+    return out
+end
+M.TableSetColumnEnabled = M.TableSetColumnEnabled  or function(i1, i2)
+    jit.off(true)
+    local out = C.igTableSetColumnEnabled(i1, i2)
+    return out
+end
+M.TableSetColumnIndex = M.TableSetColumnIndex  or function(i1)
+    jit.off(true)
+    local out = C.igTableSetColumnIndex(i1)
+    return out
+end
+M.TableSetupColumn = M.TableSetupColumn  or function(i1, i2, i3, i4)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    if i3 == nil then i3 = 0.0 end
+    if i4 == nil then i4 = 0 end
+    local out = C.igTableSetupColumn(i1, i2, i3, i4)
+    return out
+end
+M.TableSetupScrollFreeze = M.TableSetupScrollFreeze  or function(i1, i2)
+    jit.off(true)
+    local out = C.igTableSetupScrollFreeze(i1, i2)
+    return out
+end
+M.Text = M.Text  or function(i1, ...)
+    jit.off(true)
+    local out = C.igText(i1, ...)
+    return out
+end
+M.TextColored = M.TextColored  or function(i1, i2, ...)
+    jit.off(true)
+    local out = C.igTextColored(i1, i2, ...)
+    return out
+end
+M.TextDisabled = M.TextDisabled  or function(i1, ...)
+    jit.off(true)
+    local out = C.igTextDisabled(i1, ...)
+    return out
+end
+M.TextUnformatted = M.TextUnformatted  or function(i1, i2)
+    jit.off(true)
+    local out = C.igTextUnformatted(i1, i2)
+    return out
+end
+M.TextWrapped = M.TextWrapped  or function(i1, ...)
+    jit.off(true)
+    local out = C.igTextWrapped(i1, ...)
+    return out
+end
+M.TreeNode_Str = M.TreeNode_Str  or function(i1)
+    jit.off(true)
+    local out = C.igTreeNode_Str(i1)
+    return out
+end
+M.TreeNode_StrStr = M.TreeNode_StrStr  or function(i1, i2, ...)
+    jit.off(true)
+    local out = C.igTreeNode_StrStr(i1, i2, ...)
+    return out
+end
+M.TreeNode_Ptr = M.TreeNode_Ptr  or function(i1, i2, ...)
+    jit.off(true)
+    local out = C.igTreeNode_Ptr(i1, i2, ...)
+    return out
+end
+M.TreeNodeEx_Str = M.TreeNodeEx_Str  or function(i1, i2)
+    jit.off(true)
+    if i2 == nil then i2 = 0 end
+    local out = C.igTreeNodeEx_Str(i1, i2)
+    return out
+end
+M.TreeNodeEx_StrStr = M.TreeNodeEx_StrStr  or function(i1, i2, i3, ...)
+    jit.off(true)
+    local out = C.igTreeNodeEx_StrStr(i1, i2, i3, ...)
+    return out
+end
+M.TreeNodeEx_Ptr = M.TreeNodeEx_Ptr  or function(i1, i2, i3, ...)
+    jit.off(true)
+    local out = C.igTreeNodeEx_Ptr(i1, i2, i3, ...)
+    return out
+end
+M.TreePop = M.TreePop  or function()
+    jit.off(true)
+    local out = C.igTreePop()
+    return out
+end
+M.TreePush_Str = M.TreePush_Str  or function(i1)
+    jit.off(true)
+    local out = C.igTreePush_Str(i1)
+    return out
+end
+M.TreePush_Ptr = M.TreePush_Ptr  or function(i1)
+    jit.off(true)
+    local out = C.igTreePush_Ptr(i1)
+    return out
+end
+M.Unindent = M.Unindent  or function(i1)
+    jit.off(true)
+    if i1 == nil then i1 = 0.0 end
+    local out = C.igUnindent(i1)
+    return out
+end
+M.UpdatePlatformWindows = M.UpdatePlatformWindows  or function()
+    jit.off(true)
+    local out = C.igUpdatePlatformWindows()
+    return out
+end
+M.VSliderFloat = M.VSliderFloat  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i6 == nil then i6 = "%.3f" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igVSliderFloat(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.VSliderInt = M.VSliderInt  or function(i1, i2, i3, i4, i5, i6, i7)
+    jit.off(true)
+    if i6 == nil then i6 = "%d" end
+    if i7 == nil then i7 = 0 end
+    local out = C.igVSliderInt(i1, i2, i3, i4, i5, i6, i7)
+    return out
+end
+M.VSliderScalar = M.VSliderScalar  or function(i1, i2, i3, i4, i5, i6, i7, i8)
+    jit.off(true)
+    if i8 == nil then i8 = 0 end
+    local out = C.igVSliderScalar(i1, i2, i3, i4, i5, i6, i7, i8)
+    return out
+end
+M.Value_Bool = M.Value_Bool  or function(i1, i2)
+    jit.off(true)
+    local out = C.igValue_Bool(i1, i2)
+    return out
+end
+M.Value_Int = M.Value_Int  or function(i1, i2)
+    jit.off(true)
+    local out = C.igValue_Int(i1, i2)
+    return out
+end
+M.Value_Uint = M.Value_Uint  or function(i1, i2)
+    jit.off(true)
+    local out = C.igValue_Uint(i1, i2)
+    return out
+end
+M.Value_Float = M.Value_Float  or function(i1, i2, i3)
+    jit.off(true)
+    local out = C.igValue_Float(i1, i2, i3)
+    return out
+end

BIN
libraries/cimgui.dll


BIN
libraries/cimgui.dylib


BIN
libraries/cimgui.so


+ 118 - 0
main.lua

@@ -0,0 +1,118 @@
+-- Make sure the shared library can be found through package.cpath before loading the module.
+-- For example, if you put it in the LÖVE save directory, you could do something like this:
+-- local lib_path = love.filesystem.getSaveDirectory() .. "/libraries"
+local lib_path = "./libraries"
+local extension = jit.os == "Windows" and "dll" or jit.os == "Linux" and "so" or jit.os == "OSX" and "dylib"
+package.cpath = string.format("%s;%s/?.%s", package.cpath, lib_path, extension)
+
+local imgui = require "cimgui"
+
+love.load = function()
+	love.window.setTitle("Cool Video Game")
+    imgui.love.Init()
+
+	local imio = imgui.GetIO()
+	imio.ConfigFlags = imgui.love.ConfigFlags("NavEnableKeyboard", "DockingEnable")
+end
+
+love.draw = function()
+	local viewport = imgui.GetMainViewport()
+	imgui.DockSpaceOverViewport(viewport)
+
+    -- example window
+    imgui.ShowDemoWindow()
+    
+    -- code to render imgui
+    imgui.Render()
+    imgui.love.RenderDrawLists()
+end
+
+love.update = function(dt)
+    imgui.love.Update(dt)
+    imgui.NewFrame()
+end
+
+love.mousemoved = function(x, y, ...)
+    imgui.love.MouseMoved(x, y)
+    if not imgui.love.GetWantCaptureMouse() then
+        -- your code here
+    end
+end
+
+love.mousepressed = function(x, y, button, ...)
+    imgui.love.MousePressed(button)
+    if not imgui.love.GetWantCaptureMouse() then
+        -- your code here 
+    end
+end
+
+love.mousereleased = function(x, y, button, ...)
+    imgui.love.MouseReleased(button)
+    if not imgui.love.GetWantCaptureMouse() then
+        -- your code here 
+    end
+end
+
+love.wheelmoved = function(x, y)
+    imgui.love.WheelMoved(x, y)
+    if not imgui.love.GetWantCaptureMouse() then
+        -- your code here 
+    end
+end
+
+love.keypressed = function(key, ...)
+    imgui.love.KeyPressed(key)
+    if not imgui.love.GetWantCaptureKeyboard() then
+        -- your code here 
+    end
+end
+
+love.keyreleased = function(key, ...)
+    imgui.love.KeyReleased(key)
+    if not imgui.love.GetWantCaptureKeyboard() then
+        -- your code here 
+    end
+end
+
+love.textinput = function(t)
+    -- only use imgui.love.TextInput when characters are expected
+    if imgui.love.GetWantCaptureKeyboard() then
+        imgui.love.TextInput(t)
+    else
+        -- your code here 
+    end
+end
+
+love.quit = function()
+    return imgui.love.Shutdown()
+end
+
+-- for gamepad support also add the following:
+
+love.joystickadded = function(joystick)
+    imgui.love.JoystickAdded(joystick)
+    -- your code here 
+end
+
+love.joystickremoved = function(joystick)
+    imgui.love.JoystickRemoved()
+    -- your code here 
+end
+
+love.gamepadpressed = function(joystick, button)
+    imgui.love.GamepadPressed(button)
+    -- your code here 
+end
+
+love.gamepadreleased = function(joystick, button)
+    imgui.love.GamepadReleased(button)
+    -- your code here 
+end
+
+-- choose threshold for considering analog controllers active, defaults to 0 if unspecified
+local threshold = 0.2 
+
+love.gamepadaxis = function(joystick, axis, value)
+    imgui.love.GamepadAxis(axis, value, threshold)
+    -- your code here 
+end