Pārlūkot izejas kodu

ImGui Pas Source Code

Coldzer0 1 gadu atpakaļ
vecāks
revīzija
8eba7f85e3
6 mainītis faili ar 10828 papildinājumiem un 1 dzēšanām
  1. 44 0
      OpenGL3/OpenGl3.Loader.pas
  2. 36 1
      README.md
  3. 1508 0
      src/PasImGui.Apis.pas
  4. 2646 0
      src/PasImGui.Enums.pas
  5. 2452 0
      src/PasImGui.Types.pas
  6. 4142 0
      src/PasImGui.pas

+ 44 - 0
OpenGL3/OpenGl3.Loader.pas

@@ -0,0 +1,44 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+unit OpenGl3.Loader;
+
+{$IFDEF FPC}
+  {$mode objfpc}{$H+}{$J-}
+{$ENDIF}
+
+
+interface
+
+uses
+  glad_gl, SDL2;
+
+function ImGLInit(): Boolean;
+
+implementation
+
+Function GLFuncLoad(proc: PChar): Pointer;
+Begin
+  Result := SDL_GL_GetProcAddress(proc);
+  Assert(Result <> nil, 'couldn''t load ' + proc);
+End;
+
+function ImGLInit(): Boolean;
+begin
+  Result := gladLoadGL(@GLFuncLoad);
+end;
+
+end.
+

+ 36 - 1
README.md

@@ -1,2 +1,37 @@
 # ImGui-Pascal
-FreePascal Binding for cimgui with the latest version of ImGui with docking.
+[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
+
+FreePascal bindings for dear [ImGui](https://github.com/ocornut/imgui) with docking v1.99
+
+The Binding is based on [cimgui](https://github.com/cimgui/cimgui)
+> cimgui is c-api for imgui (https://github.com/ocornut/imgui) Look at: https://github.com/cimgui for other widgets.
+
+
+## Building
+Tested with FreePascal 3.3.x and later.
+
+## Usage
+It should be almost 1 to 1 as if you are using ImGui <br> 
+Check the demo project for more info.
+
+### TODO
+- Add Support for [cimplot](https://github.com/cimgui/cimplot)
+- Add Support for [cimnodes](https://github.com/cimgui/cimnodes)
+- Add Support for [cimnodes_r](https://github.com/cimgui/cimnodes_r)
+- Test on Mac & Linux
+- Add missing APIs to our `ImGui Class`
+- Add record helpers for some records like `ImGuiIO` & all `ImVector_xxx` records
+
+
+
+## Acknowledgements & Resources :
+
+#### Inspired by the work of David Pethes [imgui-pas](https://github.com/dpethes/imgui-pas) 
+
+
+#### Used Projects :
+- [cimgui](https://github.com/cimgui/cimgui)
+- [imgui-pas](https://github.com/dpethes/imgui-pas)
+- [ChatGPT](https://chat.openai.com)
+
+## With ❤️ From Home.

+ 1508 - 0
src/PasImGui.Apis.pas

@@ -0,0 +1,1508 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+unit PasImGui.Apis;
+{$IfDef FPC}
+  {$PACKRECORDS C}   
+  {$mode objfpc}{$H+}
+  {$modeswitch advancedrecords}
+{$EndIf} 
+
+interface  
+uses
+    PasImGui.Enums, PasImGui.Types; // All Needed Types form cimgui
+
+const
+  {$if defined(Darwin)}
+    SharedSuffix = 'dylib';
+  {$elseif defined(linux)}
+    SharedSuffix = 'so';
+  {$elseif defined(MSWINDOWS)}
+    SharedSuffix = 'dll';
+  {$endif}
+  CIMGUI_LIB = 'cimgui.' + SharedSuffix;
+
+procedure ImBitVector_Clear( self : PImBitVector ); cdecl; external CIMGUI_LIB;
+procedure ImBitVector_ClearBit( self : PImBitVector; n : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImBitVector_Create( self : PImBitVector; sz : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImBitVector_SetBit( self : PImBitVector; n : Integer ); cdecl; external CIMGUI_LIB;
+function ImBitVector_TestBit( self : PImBitVector; n : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImColor_HSV( pOut : PImColor; h : Single; s : Single; v : Single; a : Single ); cdecl; external CIMGUI_LIB;
+function ImColor_ImColor_Nil( ) : PImColor; cdecl; external CIMGUI_LIB;
+function ImColor_ImColor_Float( r : Single; g : Single; b : Single; a : Single ) : PImColor; cdecl; external CIMGUI_LIB;
+function ImColor_ImColor_Vec4( col : ImVec4 ) : PImColor; cdecl; external CIMGUI_LIB;
+function ImColor_ImColor_Int( r : Integer; g : Integer; b : Integer; a : Integer ) : PImColor; cdecl; external CIMGUI_LIB;
+function ImColor_ImColor_U32( rgba : ImU32 ) : PImColor; cdecl; external CIMGUI_LIB;
+procedure ImColor_SetHSV( self : PImColor; h : Single; s : Single; v : Single; a : Single ); cdecl; external CIMGUI_LIB;
+procedure ImColor_destroy( self : PImColor ); cdecl; external CIMGUI_LIB;
+function ImDrawCmd_GetTexID( self : PImDrawCmd ) : ImTextureID; cdecl; external CIMGUI_LIB;
+function ImDrawCmd_ImDrawCmd( ) : PImDrawCmd; cdecl; external CIMGUI_LIB;
+procedure ImDrawCmd_destroy( self : PImDrawCmd ); cdecl; external CIMGUI_LIB;
+function ImDrawDataBuilder_ImDrawDataBuilder( ) : PImDrawDataBuilder; cdecl; external CIMGUI_LIB;
+procedure ImDrawDataBuilder_destroy( self : PImDrawDataBuilder ); cdecl; external CIMGUI_LIB;
+procedure ImDrawData_AddDrawList( self : PImDrawData; draw_list : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawData_Clear( self : PImDrawData ); cdecl; external CIMGUI_LIB;
+procedure ImDrawData_DeIndexAllBuffers( self : PImDrawData ); cdecl; external CIMGUI_LIB;
+function ImDrawData_ImDrawData( ) : PImDrawData; cdecl; external CIMGUI_LIB;
+procedure ImDrawData_ScaleClipRects( self : PImDrawData; fb_scale : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawData_destroy( self : PImDrawData ); cdecl; external CIMGUI_LIB;
+function ImDrawListSharedData_ImDrawListSharedData( ) : PImDrawListSharedData; cdecl; external CIMGUI_LIB;
+procedure ImDrawListSharedData_SetCircleTessellationMaxError( self : PImDrawListSharedData; max_error : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSharedData_destroy( self : PImDrawListSharedData ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_Clear( self : PImDrawListSplitter ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_ClearFreeMemory( self : PImDrawListSplitter ); cdecl; external CIMGUI_LIB;
+function ImDrawListSplitter_ImDrawListSplitter( ) : PImDrawListSplitter; cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_Merge( self : PImDrawListSplitter; draw_list : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_SetCurrentChannel( self : PImDrawListSplitter; draw_list : PImDrawList; channel_idx : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_Split( self : PImDrawListSplitter; draw_list : PImDrawList; count : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawListSplitter_destroy( self : PImDrawListSplitter ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddBezierCubic( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; col : ImU32; thickness : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddBezierQuadratic( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; col : ImU32; thickness : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddCallback( self : PImDrawList; callback : ImDrawCallback; callback_data : Pointer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddCircle( self : PImDrawList; center : ImVec2; radius : Single; col : ImU32; num_segments : Integer; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddCircleFilled( self : PImDrawList; center : ImVec2; radius : Single; col : ImU32; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddConvexPolyFilled( self : PImDrawList; points : PImVec2; num_points : Integer; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddDrawCmd( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddEllipse( self : PImDrawList; center : ImVec2; radius_x : Single; radius_y : Single; col : ImU32; rot : Single; num_segments : Integer; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddEllipseFilled( self : PImDrawList; center : ImVec2; radius_x : Single; radius_y : Single; col : ImU32; rot : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddImage( self : PImDrawList; user_texture_id : ImTextureID; p_min : ImVec2; p_max : ImVec2; uv_min : ImVec2; uv_max : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddImageQuad( self : PImDrawList; user_texture_id : ImTextureID; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; uv1 : ImVec2; uv2 : ImVec2; uv3 : ImVec2; uv4 : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddImageRounded( self : PImDrawList; user_texture_id : ImTextureID; p_min : ImVec2; p_max : ImVec2; uv_min : ImVec2; uv_max : ImVec2; col : ImU32; rounding : Single; flags : ImDrawFlags ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddLine( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; col : ImU32; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddNgon( self : PImDrawList; center : ImVec2; radius : Single; col : ImU32; num_segments : Integer; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddNgonFilled( self : PImDrawList; center : ImVec2; radius : Single; col : ImU32; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddPolyline( self : PImDrawList; points : PImVec2; num_points : Integer; col : ImU32; flags : ImDrawFlags; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddQuad( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; col : ImU32; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddQuadFilled( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddRect( self : PImDrawList; p_min : ImVec2; p_max : ImVec2; col : ImU32; rounding : Single; flags : ImDrawFlags; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddRectFilled( self : PImDrawList; p_min : ImVec2; p_max : ImVec2; col : ImU32; rounding : Single; flags : ImDrawFlags ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddRectFilledMultiColor( self : PImDrawList; p_min : ImVec2; p_max : ImVec2; col_upr_left : ImU32; col_upr_right : ImU32; col_bot_right : ImU32; col_bot_left : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddText_Vec2( self : PImDrawList; pos : ImVec2; col : ImU32; text_begin : PChar; text_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddText_FontPtr( self : PImDrawList; font : PImFont; font_size : Single; pos : ImVec2; col : ImU32; text_begin : PChar; text_end : PChar; wrap_width : Single; cpu_fine_clip_rect : PImVec4 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddTriangle( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; col : ImU32; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_AddTriangleFilled( self : PImDrawList; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_ChannelsMerge( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_ChannelsSetCurrent( self : PImDrawList; n : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_ChannelsSplit( self : PImDrawList; count : Integer ); cdecl; external CIMGUI_LIB;
+function ImDrawList_CloneOutput( self : PImDrawList ) : PImDrawList; cdecl; external CIMGUI_LIB;
+procedure ImDrawList_GetClipRectMax( pOut : PImVec2; self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_GetClipRectMin( pOut : PImVec2; self : PImDrawList ); cdecl; external CIMGUI_LIB;
+function ImDrawList_ImDrawList( shared_data : PImDrawListSharedData ) : PImDrawList; cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathArcTo( self : PImDrawList; center : ImVec2; radius : Single; a_min : Single; a_max : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathArcToFast( self : PImDrawList; center : ImVec2; radius : Single; a_min_of_12 : Integer; a_max_of_12 : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathBezierCubicCurveTo( self : PImDrawList; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathBezierQuadraticCurveTo( self : PImDrawList; p2 : ImVec2; p3 : ImVec2; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathClear( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathEllipticalArcTo( self : PImDrawList; center : ImVec2; radius_x : Single; radius_y : Single; rot : Single; a_min : Single; a_max : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathFillConvex( self : PImDrawList; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathLineTo( self : PImDrawList; pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathLineToMergeDuplicate( self : PImDrawList; pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathRect( self : PImDrawList; rect_min : ImVec2; rect_max : ImVec2; rounding : Single; flags : ImDrawFlags ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PathStroke( self : PImDrawList; col : ImU32; flags : ImDrawFlags; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PopClipRect( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PopTextureID( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimQuadUV( self : PImDrawList; a : ImVec2; b : ImVec2; c : ImVec2; d : ImVec2; uv_a : ImVec2; uv_b : ImVec2; uv_c : ImVec2; uv_d : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimRect( self : PImDrawList; a : ImVec2; b : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimRectUV( self : PImDrawList; a : ImVec2; b : ImVec2; uv_a : ImVec2; uv_b : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimReserve( self : PImDrawList; idx_count : Integer; vtx_count : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimUnreserve( self : PImDrawList; idx_count : Integer; vtx_count : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimVtx( self : PImDrawList; pos : ImVec2; uv : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimWriteIdx( self : PImDrawList; idx : ImDrawIdx ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PrimWriteVtx( self : PImDrawList; pos : ImVec2; uv : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PushClipRect( self : PImDrawList; clip_rect_min : ImVec2; clip_rect_max : ImVec2; intersect_with_current_clip_rect : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PushClipRectFullScreen( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_PushTextureID( self : PImDrawList; texture_id : ImTextureID ); cdecl; external CIMGUI_LIB;
+function ImDrawList__CalcCircleAutoSegmentCount( self : PImDrawList; radius : Single ) : Integer; cdecl; external CIMGUI_LIB;
+procedure ImDrawList__ClearFreeMemory( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__OnChangedClipRect( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__OnChangedTextureID( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__OnChangedVtxOffset( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__PathArcToFastEx( self : PImDrawList; center : ImVec2; radius : Single; a_min_sample : Integer; a_max_sample : Integer; a_step : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__PathArcToN( self : PImDrawList; center : ImVec2; radius : Single; a_min : Single; a_max : Single; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__PopUnusedDrawCmd( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__ResetForNewFrame( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList__TryMergeDrawCmds( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure ImDrawList_destroy( self : PImDrawList ); cdecl; external CIMGUI_LIB;
+function ImFontAtlasCustomRect_ImFontAtlasCustomRect( ) : PImFontAtlasCustomRect; cdecl; external CIMGUI_LIB;
+function ImFontAtlasCustomRect_IsPacked( self : PImFontAtlasCustomRect ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImFontAtlasCustomRect_destroy( self : PImFontAtlasCustomRect ); cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddCustomRectFontGlyph( self : PImFontAtlas; font : PImFont; id : ImWchar; width : Integer; height : Integer; advance_x : Single; offset : ImVec2 ) : Integer; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddCustomRectRegular( self : PImFontAtlas; width : Integer; height : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFont( self : PImFontAtlas; font_cfg : PImFontConfig ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFontDefault( self : PImFontAtlas; font_cfg : PImFontConfig ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFontFromFileTTF( self : PImFontAtlas; filename : PChar; size_pixels : Single; font_cfg : PImFontConfig; glyph_ranges : PImWchar ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFontFromMemoryCompressedBase85TTF( self : PImFontAtlas; compressed_font_data_base85 : PChar; size_pixels : Single; font_cfg : PImFontConfig; glyph_ranges : PImWchar ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFontFromMemoryCompressedTTF( self : PImFontAtlas; compressed_font_data : Pointer; compressed_font_data_size : Integer; size_pixels : Single; font_cfg : PImFontConfig; glyph_ranges : PImWchar ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_AddFontFromMemoryTTF( self : PImFontAtlas; font_data : Pointer; font_data_size : Integer; size_pixels : Single; font_cfg : PImFontConfig; glyph_ranges : PImWchar ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_Build( self : PImFontAtlas ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_CalcCustomRectUV( self : PImFontAtlas; rect : PImFontAtlasCustomRect; out_uv_min : PImVec2; out_uv_max : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_Clear( self : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_ClearFonts( self : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_ClearInputData( self : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_ClearTexData( self : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetCustomRectByIndex( self : PImFontAtlas; index : Integer ) : PImFontAtlasCustomRect; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesChineseFull( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesCyrillic( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesDefault( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesGreek( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesJapanese( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesKorean( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesThai( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetGlyphRangesVietnamese( self : PImFontAtlas ) : PImWchar; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_GetMouseCursorTexData( self : PImFontAtlas; cursor : ImGuiMouseCursor; out_offset : PImVec2; out_size : PImVec2; out_uv_border : PImVec2; out_uv_fill : PImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_GetTexDataAsAlpha8( self : PImFontAtlas; out_pixels : PPImU8; out_width : PInteger; out_height : PInteger; out_bytes_per_pixel : PInteger ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_GetTexDataAsRGBA32( self : PImFontAtlas; out_pixels : PPImU8; out_width : PInteger; out_height : PInteger; out_bytes_per_pixel : PInteger ); cdecl; external CIMGUI_LIB;
+function ImFontAtlas_ImFontAtlas( ) : PImFontAtlas; cdecl; external CIMGUI_LIB;
+function ImFontAtlas_IsBuilt( self : PImFontAtlas ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_SetTexID( self : PImFontAtlas; id : ImTextureID ); cdecl; external CIMGUI_LIB;
+procedure ImFontAtlas_destroy( self : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+function ImFontConfig_ImFontConfig( ) : PImFontConfig; cdecl; external CIMGUI_LIB;
+procedure ImFontConfig_destroy( self : PImFontConfig ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_AddChar( self : PImFontGlyphRangesBuilder; c : ImWchar ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_AddRanges( self : PImFontGlyphRangesBuilder; ranges : PImWchar ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_AddText( self : PImFontGlyphRangesBuilder; text : PChar; text_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_BuildRanges( self : PImFontGlyphRangesBuilder; out_ranges : PImVector_ImWchar ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_Clear( self : PImFontGlyphRangesBuilder ); cdecl; external CIMGUI_LIB;
+function ImFontGlyphRangesBuilder_GetBit( self : PImFontGlyphRangesBuilder; n : size_t ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder( ) : PImFontGlyphRangesBuilder; cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_SetBit( self : PImFontGlyphRangesBuilder; n : size_t ); cdecl; external CIMGUI_LIB;
+procedure ImFontGlyphRangesBuilder_destroy( self : PImFontGlyphRangesBuilder ); cdecl; external CIMGUI_LIB;
+procedure ImFont_AddGlyph( self : PImFont; src_cfg : PImFontConfig; c : ImWchar; x0 : Single; y0 : Single; x1 : Single; y1 : Single; u0 : Single; v0 : Single; u1 : Single; v1 : Single; advance_x : Single ); cdecl; external CIMGUI_LIB;
+procedure ImFont_AddRemapChar( self : PImFont; dst : ImWchar; src : ImWchar; overwrite_dst : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImFont_BuildLookupTable( self : PImFont ); cdecl; external CIMGUI_LIB;
+procedure ImFont_CalcTextSizeA( pOut : PImVec2; self : PImFont; size : Single; max_width : Single; wrap_width : Single; text_begin : PChar; text_end : PChar; remaining : PPChar ); cdecl; external CIMGUI_LIB;
+function ImFont_CalcWordWrapPositionA( self : PImFont; scale : Single; text : PChar; text_end : PChar; wrap_width : Single ) : PChar; cdecl; external CIMGUI_LIB;
+procedure ImFont_ClearOutputData( self : PImFont ); cdecl; external CIMGUI_LIB;
+function ImFont_FindGlyph( self : PImFont; c : ImWchar ) : PImFontGlyph; cdecl; external CIMGUI_LIB;
+function ImFont_FindGlyphNoFallback( self : PImFont; c : ImWchar ) : PImFontGlyph; cdecl; external CIMGUI_LIB;
+function ImFont_GetCharAdvance( self : PImFont; c : ImWchar ) : Single; cdecl; external CIMGUI_LIB;
+function ImFont_GetDebugName( self : PImFont ) : PChar; cdecl; external CIMGUI_LIB;
+procedure ImFont_GrowIndex( self : PImFont; new_size : Integer ); cdecl; external CIMGUI_LIB;
+function ImFont_ImFont( ) : PImFont; cdecl; external CIMGUI_LIB;
+function ImFont_IsGlyphRangeUnused( self : PImFont; c_begin : ImU32; c_last : ImU32 ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImFont_IsLoaded( self : PImFont ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImFont_RenderChar( self : PImFont; draw_list : PImDrawList; size : Single; pos : ImVec2; col : ImU32; c : ImWchar ); cdecl; external CIMGUI_LIB;
+procedure ImFont_RenderText( self : PImFont; draw_list : PImDrawList; size : Single; pos : ImVec2; col : ImU32; clip_rect : ImVec4; text_begin : PChar; text_end : PChar; wrap_width : Single; cpu_fine_clip : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImFont_SetGlyphVisible( self : PImFont; c : ImWchar; visible : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImFont_destroy( self : PImFont ); cdecl; external CIMGUI_LIB;
+function ImGuiComboPreviewData_ImGuiComboPreviewData( ) : PImGuiComboPreviewData; cdecl; external CIMGUI_LIB;
+procedure ImGuiComboPreviewData_destroy( self : PImGuiComboPreviewData ); cdecl; external CIMGUI_LIB;
+function ImGuiContextHook_ImGuiContextHook( ) : PImGuiContextHook; cdecl; external CIMGUI_LIB;
+procedure ImGuiContextHook_destroy( self : PImGuiContextHook ); cdecl; external CIMGUI_LIB;
+function ImGuiContext_ImGuiContext( shared_font_atlas : PImFontAtlas ) : PImGuiContext; cdecl; external CIMGUI_LIB;
+procedure ImGuiContext_destroy( self : PImGuiContext ); cdecl; external CIMGUI_LIB;
+function ImGuiDataVarInfo_GetVarPtr( self : PImGuiDataVarInfo; parent : Pointer ) : Pointer; cdecl; external CIMGUI_LIB;
+function ImGuiDebugAllocInfo_ImGuiDebugAllocInfo( ) : PImGuiDebugAllocInfo; cdecl; external CIMGUI_LIB;
+procedure ImGuiDebugAllocInfo_destroy( self : PImGuiDebugAllocInfo ); cdecl; external CIMGUI_LIB;
+function ImGuiDockContext_ImGuiDockContext( ) : PImGuiDockContext; cdecl; external CIMGUI_LIB;
+procedure ImGuiDockContext_destroy( self : PImGuiDockContext ); cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_ImGuiDockNode( id : ImGuiID ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsCentralNode( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsDockSpace( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsEmpty( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsFloatingNode( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsHiddenTabBar( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsLeafNode( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsNoTabBar( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsRootNode( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiDockNode_IsSplitNode( self : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImGuiDockNode_Rect( pOut : PImRect; self : PImGuiDockNode ); cdecl; external CIMGUI_LIB;
+procedure ImGuiDockNode_SetLocalFlags( self : PImGuiDockNode; flags : ImGuiDockNodeFlags ); cdecl; external CIMGUI_LIB;
+procedure ImGuiDockNode_UpdateMergedFlags( self : PImGuiDockNode ); cdecl; external CIMGUI_LIB;
+procedure ImGuiDockNode_destroy( self : PImGuiDockNode ); cdecl; external CIMGUI_LIB;
+function ImGuiIDStackTool_ImGuiIDStackTool( ) : PImGuiIDStackTool; cdecl; external CIMGUI_LIB;
+procedure ImGuiIDStackTool_destroy( self : PImGuiIDStackTool ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddFocusEvent( self : PImGuiIO; focused : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddInputCharacter( self : PImGuiIO; c : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddInputCharacterUTF16( self : PImGuiIO; c : ImWchar16 ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddInputCharactersUTF8( self : PImGuiIO; str : PChar ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddKeyAnalogEvent( self : PImGuiIO; key : ImGuiKey; down : Boolean; v : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddKeyEvent( self : PImGuiIO; key : ImGuiKey; down : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddMouseButtonEvent( self : PImGuiIO; button : Integer; down : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddMousePosEvent( self : PImGuiIO; x : Single; y : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddMouseSourceEvent( self : PImGuiIO; source : ImGuiMouseSource ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddMouseViewportEvent( self : PImGuiIO; id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_AddMouseWheelEvent( self : PImGuiIO; wheel_x : Single; wheel_y : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_ClearEventsQueue( self : PImGuiIO ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_ClearInputKeys( self : PImGuiIO ); cdecl; external CIMGUI_LIB;
+function ImGuiIO_ImGuiIO( ) : PImGuiIO; cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_SetAppAcceptingEvents( self : PImGuiIO; accepting_events : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_SetKeyEventNativeData( self : PImGuiIO; key : ImGuiKey; native_keycode : Integer; native_scancode : Integer; native_legacy_index : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiIO_destroy( self : PImGuiIO ); cdecl; external CIMGUI_LIB;
+function ImGuiInputEvent_ImGuiInputEvent( ) : PImGuiInputEvent; cdecl; external CIMGUI_LIB;
+procedure ImGuiInputEvent_destroy( self : PImGuiInputEvent ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextCallbackData_ClearSelection( self : PImGuiInputTextCallbackData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextCallbackData_DeleteChars( self : PImGuiInputTextCallbackData; pos : Integer; bytes_count : Integer ); cdecl; external CIMGUI_LIB;
+function ImGuiInputTextCallbackData_HasSelection( self : PImGuiInputTextCallbackData ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextCallbackData_ImGuiInputTextCallbackData( ) : PImGuiInputTextCallbackData; cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextCallbackData_InsertChars( self : PImGuiInputTextCallbackData; pos : Integer; text : PChar; text_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextCallbackData_SelectAll( self : PImGuiInputTextCallbackData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextCallbackData_destroy( self : PImGuiInputTextCallbackData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextDeactivatedState_ClearFreeMemory( self : PImGuiInputTextDeactivatedState ); cdecl; external CIMGUI_LIB;
+function ImGuiInputTextDeactivatedState_ImGuiInputTextDeactivatedState( ) : PImGuiInputTextDeactivatedState; cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextDeactivatedState_destroy( self : PImGuiInputTextDeactivatedState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_ClearFreeMemory( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_ClearSelection( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_ClearText( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_CursorAnimReset( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_CursorClamp( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_GetCursorPos( self : PImGuiInputTextState ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_GetRedoAvailCount( self : PImGuiInputTextState ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_GetSelectionEnd( self : PImGuiInputTextState ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_GetSelectionStart( self : PImGuiInputTextState ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_GetUndoAvailCount( self : PImGuiInputTextState ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_HasSelection( self : PImGuiInputTextState ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiInputTextState_ImGuiInputTextState( ) : PImGuiInputTextState; cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_OnKeyPressed( self : PImGuiInputTextState; key : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_SelectAll( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiInputTextState_destroy( self : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+function ImGuiKeyOwnerData_ImGuiKeyOwnerData( ) : PImGuiKeyOwnerData; cdecl; external CIMGUI_LIB;
+procedure ImGuiKeyOwnerData_destroy( self : PImGuiKeyOwnerData ); cdecl; external CIMGUI_LIB;
+function ImGuiKeyRoutingData_ImGuiKeyRoutingData( ) : PImGuiKeyRoutingData; cdecl; external CIMGUI_LIB;
+procedure ImGuiKeyRoutingData_destroy( self : PImGuiKeyRoutingData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiKeyRoutingTable_Clear( self : PImGuiKeyRoutingTable ); cdecl; external CIMGUI_LIB;
+function ImGuiKeyRoutingTable_ImGuiKeyRoutingTable( ) : PImGuiKeyRoutingTable; cdecl; external CIMGUI_LIB;
+procedure ImGuiKeyRoutingTable_destroy( self : PImGuiKeyRoutingTable ); cdecl; external CIMGUI_LIB;
+function ImGuiLastItemData_ImGuiLastItemData( ) : PImGuiLastItemData; cdecl; external CIMGUI_LIB;
+procedure ImGuiLastItemData_destroy( self : PImGuiLastItemData ); cdecl; external CIMGUI_LIB;
+function ImGuiListClipperData_ImGuiListClipperData( ) : PImGuiListClipperData; cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipperData_Reset( self : PImGuiListClipperData; clipper : PImGuiListClipper ); cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipperData_destroy( self : PImGuiListClipperData ); cdecl; external CIMGUI_LIB;
+function ImGuiListClipperRange_FromIndices( min : Integer; max : Integer ) : ImGuiListClipperRange; cdecl; external CIMGUI_LIB;
+function ImGuiListClipperRange_FromPositions( y1 : Single; y2 : Single; off_min : Integer; off_max : Integer ) : ImGuiListClipperRange; cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipper_Begin( self : PImGuiListClipper; items_count : Integer; items_height : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipper_End( self : PImGuiListClipper ); cdecl; external CIMGUI_LIB;
+function ImGuiListClipper_ImGuiListClipper( ) : PImGuiListClipper; cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipper_IncludeItemByIndex( self : PImGuiListClipper; item_index : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipper_IncludeItemsByIndex( self : PImGuiListClipper; item_begin : Integer; item_end : Integer ); cdecl; external CIMGUI_LIB;
+function ImGuiListClipper_Step( self : PImGuiListClipper ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImGuiListClipper_destroy( self : PImGuiListClipper ); cdecl; external CIMGUI_LIB;
+procedure ImGuiMenuColumns_CalcNextTotalWidth( self : PImGuiMenuColumns; update_offsets : Boolean ); cdecl; external CIMGUI_LIB;
+function ImGuiMenuColumns_DeclColumns( self : PImGuiMenuColumns; w_icon : Single; w_label : Single; w_shortcut : Single; w_mark : Single ) : Single; cdecl; external CIMGUI_LIB;
+function ImGuiMenuColumns_ImGuiMenuColumns( ) : PImGuiMenuColumns; cdecl; external CIMGUI_LIB;
+procedure ImGuiMenuColumns_Update( self : PImGuiMenuColumns; spacing : Single; window_reappearing : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiMenuColumns_destroy( self : PImGuiMenuColumns ); cdecl; external CIMGUI_LIB;
+procedure ImGuiNavItemData_Clear( self : PImGuiNavItemData ); cdecl; external CIMGUI_LIB;
+function ImGuiNavItemData_ImGuiNavItemData( ) : PImGuiNavItemData; cdecl; external CIMGUI_LIB;
+procedure ImGuiNavItemData_destroy( self : PImGuiNavItemData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiNextItemData_ClearFlags( self : PImGuiNextItemData ); cdecl; external CIMGUI_LIB;
+function ImGuiNextItemData_ImGuiNextItemData( ) : PImGuiNextItemData; cdecl; external CIMGUI_LIB;
+procedure ImGuiNextItemData_destroy( self : PImGuiNextItemData ); cdecl; external CIMGUI_LIB;
+procedure ImGuiNextWindowData_ClearFlags( self : PImGuiNextWindowData ); cdecl; external CIMGUI_LIB;
+function ImGuiNextWindowData_ImGuiNextWindowData( ) : PImGuiNextWindowData; cdecl; external CIMGUI_LIB;
+procedure ImGuiNextWindowData_destroy( self : PImGuiNextWindowData ); cdecl; external CIMGUI_LIB;
+function ImGuiOldColumnData_ImGuiOldColumnData( ) : PImGuiOldColumnData; cdecl; external CIMGUI_LIB;
+procedure ImGuiOldColumnData_destroy( self : PImGuiOldColumnData ); cdecl; external CIMGUI_LIB;
+function ImGuiOldColumns_ImGuiOldColumns( ) : PImGuiOldColumns; cdecl; external CIMGUI_LIB;
+procedure ImGuiOldColumns_destroy( self : PImGuiOldColumns ); cdecl; external CIMGUI_LIB;
+function ImGuiOnceUponAFrame_ImGuiOnceUponAFrame( ) : PImGuiOnceUponAFrame; cdecl; external CIMGUI_LIB;
+procedure ImGuiOnceUponAFrame_destroy( self : PImGuiOnceUponAFrame ); cdecl; external CIMGUI_LIB;
+procedure ImGuiPayload_Clear( self : PImGuiPayload ); cdecl; external CIMGUI_LIB;
+function ImGuiPayload_ImGuiPayload( ) : PImGuiPayload; cdecl; external CIMGUI_LIB;
+function ImGuiPayload_IsDataType( self : PImGuiPayload; type_ : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiPayload_IsDelivery( self : PImGuiPayload ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiPayload_IsPreview( self : PImGuiPayload ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImGuiPayload_destroy( self : PImGuiPayload ); cdecl; external CIMGUI_LIB;
+function ImGuiPlatformIO_ImGuiPlatformIO( ) : PImGuiPlatformIO; cdecl; external CIMGUI_LIB;
+procedure ImGuiPlatformIO_destroy( self : PImGuiPlatformIO ); cdecl; external CIMGUI_LIB;
+function ImGuiPlatformImeData_ImGuiPlatformImeData( ) : PImGuiPlatformImeData; cdecl; external CIMGUI_LIB;
+procedure ImGuiPlatformImeData_destroy( self : PImGuiPlatformImeData ); cdecl; external CIMGUI_LIB;
+function ImGuiPlatformMonitor_ImGuiPlatformMonitor( ) : PImGuiPlatformMonitor; cdecl; external CIMGUI_LIB;
+procedure ImGuiPlatformMonitor_destroy( self : PImGuiPlatformMonitor ); cdecl; external CIMGUI_LIB;
+function ImGuiPopupData_ImGuiPopupData( ) : PImGuiPopupData; cdecl; external CIMGUI_LIB;
+procedure ImGuiPopupData_destroy( self : PImGuiPopupData ); cdecl; external CIMGUI_LIB;
+function ImGuiPtrOrIndex_ImGuiPtrOrIndex_Ptr( ptr : Pointer ) : PImGuiPtrOrIndex; cdecl; external CIMGUI_LIB;
+function ImGuiPtrOrIndex_ImGuiPtrOrIndex_Int( index : Integer ) : PImGuiPtrOrIndex; cdecl; external CIMGUI_LIB;
+procedure ImGuiPtrOrIndex_destroy( self : PImGuiPtrOrIndex ); cdecl; external CIMGUI_LIB;
+function ImGuiSettingsHandler_ImGuiSettingsHandler( ) : PImGuiSettingsHandler; cdecl; external CIMGUI_LIB;
+procedure ImGuiSettingsHandler_destroy( self : PImGuiSettingsHandler ); cdecl; external CIMGUI_LIB;
+function ImGuiStackLevelInfo_ImGuiStackLevelInfo( ) : PImGuiStackLevelInfo; cdecl; external CIMGUI_LIB;
+procedure ImGuiStackLevelInfo_destroy( self : PImGuiStackLevelInfo ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStackSizes_CompareWithContextState( self : PImGuiStackSizes; ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+function ImGuiStackSizes_ImGuiStackSizes( ) : PImGuiStackSizes; cdecl; external CIMGUI_LIB;
+procedure ImGuiStackSizes_SetToContextState( self : PImGuiStackSizes; ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStackSizes_destroy( self : PImGuiStackSizes ); cdecl; external CIMGUI_LIB;
+function ImGuiStoragePair_ImGuiStoragePair_Int( _key : ImGuiID; _val : Integer ) : PImGuiStoragePair; cdecl; external CIMGUI_LIB;
+function ImGuiStoragePair_ImGuiStoragePair_Float( _key : ImGuiID; _val : Single ) : PImGuiStoragePair; cdecl; external CIMGUI_LIB;
+function ImGuiStoragePair_ImGuiStoragePair_Ptr( _key : ImGuiID; _val : Pointer ) : PImGuiStoragePair; cdecl; external CIMGUI_LIB;
+procedure ImGuiStoragePair_destroy( self : PImGuiStoragePair ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_BuildSortByKey( self : PImGuiStorage ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_Clear( self : PImGuiStorage ); cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetBool( self : PImGuiStorage; key : ImGuiID; default_val : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetBoolRef( self : PImGuiStorage; key : ImGuiID; default_val : Boolean ) : PBoolean; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetFloat( self : PImGuiStorage; key : ImGuiID; default_val : Single ) : Single; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetFloatRef( self : PImGuiStorage; key : ImGuiID; default_val : Single ) : PSingle; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetInt( self : PImGuiStorage; key : ImGuiID; default_val : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetIntRef( self : PImGuiStorage; key : ImGuiID; default_val : Integer ) : PInteger; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetVoidPtr( self : PImGuiStorage; key : ImGuiID ) : Pointer; cdecl; external CIMGUI_LIB;
+function ImGuiStorage_GetVoidPtrRef( self : PImGuiStorage; key : ImGuiID; default_val : Pointer ) : PPPointer; cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_SetAllInt( self : PImGuiStorage; val : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_SetBool( self : PImGuiStorage; key : ImGuiID; val : Boolean ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_SetFloat( self : PImGuiStorage; key : ImGuiID; val : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_SetInt( self : PImGuiStorage; key : ImGuiID; val : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStorage_SetVoidPtr( self : PImGuiStorage; key : ImGuiID; val : Pointer ); cdecl; external CIMGUI_LIB;
+function ImGuiStyleMod_ImGuiStyleMod_Int( idx : ImGuiStyleVar; v : Integer ) : PImGuiStyleMod; cdecl; external CIMGUI_LIB;
+function ImGuiStyleMod_ImGuiStyleMod_Float( idx : ImGuiStyleVar; v : Single ) : PImGuiStyleMod; cdecl; external CIMGUI_LIB;
+function ImGuiStyleMod_ImGuiStyleMod_Vec2( idx : ImGuiStyleVar; v : ImVec2 ) : PImGuiStyleMod; cdecl; external CIMGUI_LIB;
+procedure ImGuiStyleMod_destroy( self : PImGuiStyleMod ); cdecl; external CIMGUI_LIB;
+function ImGuiStyle_ImGuiStyle( ) : PImGuiStyle; cdecl; external CIMGUI_LIB;
+procedure ImGuiStyle_ScaleAllSizes( self : PImGuiStyle; scale_factor : Single ); cdecl; external CIMGUI_LIB;
+procedure ImGuiStyle_destroy( self : PImGuiStyle ); cdecl; external CIMGUI_LIB;
+function ImGuiTabBar_ImGuiTabBar( ) : PImGuiTabBar; cdecl; external CIMGUI_LIB;
+procedure ImGuiTabBar_destroy( self : PImGuiTabBar ); cdecl; external CIMGUI_LIB;
+function ImGuiTabItem_ImGuiTabItem( ) : PImGuiTabItem; cdecl; external CIMGUI_LIB;
+procedure ImGuiTabItem_destroy( self : PImGuiTabItem ); cdecl; external CIMGUI_LIB;
+function ImGuiTableColumnSettings_ImGuiTableColumnSettings( ) : PImGuiTableColumnSettings; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableColumnSettings_destroy( self : PImGuiTableColumnSettings ); cdecl; external CIMGUI_LIB;
+function ImGuiTableColumnSortSpecs_ImGuiTableColumnSortSpecs( ) : PImGuiTableColumnSortSpecs; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableColumnSortSpecs_destroy( self : PImGuiTableColumnSortSpecs ); cdecl; external CIMGUI_LIB;
+function ImGuiTableColumn_ImGuiTableColumn( ) : PImGuiTableColumn; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableColumn_destroy( self : PImGuiTableColumn ); cdecl; external CIMGUI_LIB;
+function ImGuiTableInstanceData_ImGuiTableInstanceData( ) : PImGuiTableInstanceData; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableInstanceData_destroy( self : PImGuiTableInstanceData ); cdecl; external CIMGUI_LIB;
+function ImGuiTableSettings_GetColumnSettings( self : PImGuiTableSettings ) : PImGuiTableColumnSettings; cdecl; external CIMGUI_LIB;
+function ImGuiTableSettings_ImGuiTableSettings( ) : PImGuiTableSettings; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableSettings_destroy( self : PImGuiTableSettings ); cdecl; external CIMGUI_LIB;
+function ImGuiTableSortSpecs_ImGuiTableSortSpecs( ) : PImGuiTableSortSpecs; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableSortSpecs_destroy( self : PImGuiTableSortSpecs ); cdecl; external CIMGUI_LIB;
+function ImGuiTableTempData_ImGuiTableTempData( ) : PImGuiTableTempData; cdecl; external CIMGUI_LIB;
+procedure ImGuiTableTempData_destroy( self : PImGuiTableTempData ); cdecl; external CIMGUI_LIB;
+function ImGuiTable_ImGuiTable( ) : PImGuiTable; cdecl; external CIMGUI_LIB;
+procedure ImGuiTable_destroy( self : PImGuiTable ); cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_ImGuiTextBuffer( ) : PImGuiTextBuffer; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_append( self : PImGuiTextBuffer; str : PChar; str_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_appendf( self : PImGuiTextBuffer; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_appendfv( self : PImGuiTextBuffer; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_begin( self : PImGuiTextBuffer ) : PChar; cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_c_str( self : PImGuiTextBuffer ) : PChar; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_clear( self : PImGuiTextBuffer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_destroy( self : PImGuiTextBuffer ); cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_empty( self : PImGuiTextBuffer ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_end( self : PImGuiTextBuffer ) : PChar; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextBuffer_reserve( self : PImGuiTextBuffer; capacity : Integer ); cdecl; external CIMGUI_LIB;
+function ImGuiTextBuffer_size( self : PImGuiTextBuffer ) : Integer; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextFilter_Build( self : PImGuiTextFilter ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextFilter_Clear( self : PImGuiTextFilter ); cdecl; external CIMGUI_LIB;
+function ImGuiTextFilter_Draw( self : PImGuiTextFilter; label_ : PChar; width : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiTextFilter_ImGuiTextFilter( default_filter : PChar ) : PImGuiTextFilter; cdecl; external CIMGUI_LIB;
+function ImGuiTextFilter_IsActive( self : PImGuiTextFilter ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImGuiTextFilter_PassFilter( self : PImGuiTextFilter; text : PChar; text_end : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextFilter_destroy( self : PImGuiTextFilter ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextIndex_append( self : PImGuiTextIndex; base : PChar; old_size : Integer; new_size : Integer ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTextIndex_clear( self : PImGuiTextIndex ); cdecl; external CIMGUI_LIB;
+function ImGuiTextIndex_get_line_begin( self : PImGuiTextIndex; base : PChar; n : Integer ) : PChar; cdecl; external CIMGUI_LIB;
+function ImGuiTextIndex_get_line_end( self : PImGuiTextIndex; base : PChar; n : Integer ) : PChar; cdecl; external CIMGUI_LIB;
+function ImGuiTextIndex_size( self : PImGuiTextIndex ) : Integer; cdecl; external CIMGUI_LIB;
+function ImGuiTextRange_ImGuiTextRange_Nil( ) : PImGuiTextRange; cdecl; external CIMGUI_LIB;
+function ImGuiTextRange_ImGuiTextRange_Str( _b : PChar; _e : PChar ) : PImGuiTextRange; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextRange_destroy( self : PImGuiTextRange ); cdecl; external CIMGUI_LIB;
+function ImGuiTextRange_empty( self : PImGuiTextRange ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImGuiTextRange_split( self : PImGuiTextRange; separator : Char; out_ : PImVector_ImGuiTextRange ); cdecl; external CIMGUI_LIB;
+procedure ImGuiTypingSelectState_Clear( self : PImGuiTypingSelectState ); cdecl; external CIMGUI_LIB;
+function ImGuiTypingSelectState_ImGuiTypingSelectState( ) : PImGuiTypingSelectState; cdecl; external CIMGUI_LIB;
+procedure ImGuiTypingSelectState_destroy( self : PImGuiTypingSelectState ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_CalcWorkRectPos( pOut : PImVec2; self : PImGuiViewportP; off_min : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_CalcWorkRectSize( pOut : PImVec2; self : PImGuiViewportP; off_min : ImVec2; off_max : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_ClearRequestFlags( self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_GetBuildWorkRect( pOut : PImRect; self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_GetMainRect( pOut : PImRect; self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_GetWorkRect( pOut : PImRect; self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+function ImGuiViewportP_ImGuiViewportP( ) : PImGuiViewportP; cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_UpdateWorkRect( self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewportP_destroy( self : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewport_GetCenter( pOut : PImVec2; self : PImGuiViewport ); cdecl; external CIMGUI_LIB;
+procedure ImGuiViewport_GetWorkCenter( pOut : PImVec2; self : PImGuiViewport ); cdecl; external CIMGUI_LIB;
+function ImGuiViewport_ImGuiViewport( ) : PImGuiViewport; cdecl; external CIMGUI_LIB;
+procedure ImGuiViewport_destroy( self : PImGuiViewport ); cdecl; external CIMGUI_LIB;
+function ImGuiWindowClass_ImGuiWindowClass( ) : PImGuiWindowClass; cdecl; external CIMGUI_LIB;
+procedure ImGuiWindowClass_destroy( self : PImGuiWindowClass ); cdecl; external CIMGUI_LIB;
+function ImGuiWindowSettings_GetName( self : PImGuiWindowSettings ) : PChar; cdecl; external CIMGUI_LIB;
+function ImGuiWindowSettings_ImGuiWindowSettings( ) : PImGuiWindowSettings; cdecl; external CIMGUI_LIB;
+procedure ImGuiWindowSettings_destroy( self : PImGuiWindowSettings ); cdecl; external CIMGUI_LIB;
+function ImGuiWindow_CalcFontSize( self : PImGuiWindow ) : Single; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_GetID_Str( self : PImGuiWindow; str : PChar; str_end : PChar ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_GetID_Ptr( self : PImGuiWindow; ptr : Pointer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_GetID_Int( self : PImGuiWindow; n : Integer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_GetIDFromRectangle( self : PImGuiWindow; r_abs : ImRect ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_ImGuiWindow( context : PImGuiContext; name : PChar ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function ImGuiWindow_MenuBarHeight( self : PImGuiWindow ) : Single; cdecl; external CIMGUI_LIB;
+procedure ImGuiWindow_MenuBarRect( pOut : PImRect; self : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure ImGuiWindow_Rect( pOut : PImRect; self : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function ImGuiWindow_TitleBarHeight( self : PImGuiWindow ) : Single; cdecl; external CIMGUI_LIB;
+procedure ImGuiWindow_TitleBarRect( pOut : PImRect; self : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure ImGuiWindow_destroy( self : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure ImRect_Add_Vec2( self : PImRect; p : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImRect_Add_Rect( self : PImRect; r : ImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_ClipWith( self : PImRect; r : ImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_ClipWithFull( self : PImRect; r : ImRect ); cdecl; external CIMGUI_LIB;
+function ImRect_Contains_Vec2( self : PImRect; p : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImRect_Contains_Rect( self : PImRect; r : ImRect ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImRect_ContainsWithPad( self : PImRect; p : ImVec2; pad : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImRect_Expand_Float( self : PImRect; amount : Single ); cdecl; external CIMGUI_LIB;
+procedure ImRect_Expand_Vec2( self : PImRect; amount : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImRect_Floor( self : PImRect ); cdecl; external CIMGUI_LIB;
+function ImRect_GetArea( self : PImRect ) : Single; cdecl; external CIMGUI_LIB;
+procedure ImRect_GetBL( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_GetBR( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_GetCenter( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+function ImRect_GetHeight( self : PImRect ) : Single; cdecl; external CIMGUI_LIB;
+procedure ImRect_GetSize( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_GetTL( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_GetTR( pOut : PImVec2; self : PImRect ); cdecl; external CIMGUI_LIB;
+function ImRect_GetWidth( self : PImRect ) : Single; cdecl; external CIMGUI_LIB;
+function ImRect_ImRect_Nil( ) : PImRect; cdecl; external CIMGUI_LIB;
+function ImRect_ImRect_Vec2( min : ImVec2; max : ImVec2 ) : PImRect; cdecl; external CIMGUI_LIB;
+function ImRect_ImRect_Vec4( v : ImVec4 ) : PImRect; cdecl; external CIMGUI_LIB;
+function ImRect_ImRect_Float( x1 : Single; y1 : Single; x2 : Single; y2 : Single ) : PImRect; cdecl; external CIMGUI_LIB;
+function ImRect_IsInverted( self : PImRect ) : Boolean; cdecl; external CIMGUI_LIB;
+function ImRect_Overlaps( self : PImRect; r : ImRect ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure ImRect_ToVec4( pOut : PImVec4; self : PImRect ); cdecl; external CIMGUI_LIB;
+procedure ImRect_Translate( self : PImRect; d : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure ImRect_TranslateX( self : PImRect; dx : Single ); cdecl; external CIMGUI_LIB;
+procedure ImRect_TranslateY( self : PImRect; dy : Single ); cdecl; external CIMGUI_LIB;
+procedure ImRect_destroy( self : PImRect ); cdecl; external CIMGUI_LIB;
+function ImVec1_ImVec1_Nil( ) : PImVec1; cdecl; external CIMGUI_LIB;
+function ImVec1_ImVec1_Float( _x : Single ) : PImVec1; cdecl; external CIMGUI_LIB;
+procedure ImVec1_destroy( self : PImVec1 ); cdecl; external CIMGUI_LIB;
+function ImVec2_ImVec2_Nil( ) : PImVec2; cdecl; external CIMGUI_LIB;
+function ImVec2_ImVec2_Float( _x : Single; _y : Single ) : PImVec2; cdecl; external CIMGUI_LIB;
+procedure ImVec2_destroy( self : PImVec2 ); cdecl; external CIMGUI_LIB;
+function ImVec2ih_ImVec2ih_Nil( ) : PImVec2ih; cdecl; external CIMGUI_LIB;
+function ImVec2ih_ImVec2ih_short( _x : ImS16; _y : ImS16 ) : PImVec2ih; cdecl; external CIMGUI_LIB;
+function ImVec2ih_ImVec2ih_Vec2( rhs : ImVec2 ) : PImVec2ih; cdecl; external CIMGUI_LIB;
+procedure ImVec2ih_destroy( self : PImVec2ih ); cdecl; external CIMGUI_LIB;
+function ImVec4_ImVec4_Nil( ) : PImVec4; cdecl; external CIMGUI_LIB;
+function ImVec4_ImVec4_Float( _x : Single; _y : Single; _z : Single; _w : Single ) : PImVec4; cdecl; external CIMGUI_LIB;
+procedure ImVec4_destroy( self : PImVec4 ); cdecl; external CIMGUI_LIB;
+function igAcceptDragDropPayload( type_ : PChar; flags : ImGuiDragDropFlags ) : PImGuiPayload; cdecl; external CIMGUI_LIB;
+procedure igActivateItemByID( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+function igAddContextHook( context : PImGuiContext; hook : PImGuiContextHook ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igAddDrawListToDrawDataEx( draw_data : PImDrawData; out_list : PImVector_ImDrawListPtr; draw_list : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure igAddSettingsHandler( handler : PImGuiSettingsHandler ); cdecl; external CIMGUI_LIB;
+procedure igAlignTextToFramePadding( ); cdecl; external CIMGUI_LIB;
+function igArrowButton( str_id : PChar; dir : ImGuiDir ) : Boolean; cdecl; external CIMGUI_LIB;
+function igArrowButtonEx( str_id : PChar; dir : ImGuiDir; size_arg : ImVec2; flags : ImGuiButtonFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBegin( name : PChar; p_open : PBoolean; flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginChild_Str( str_id : PChar; size : ImVec2; child_flags : ImGuiChildFlags; window_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginChild_ID( id : ImGuiID; size : ImVec2; child_flags : ImGuiChildFlags; window_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginChildEx( name : PChar; id : ImGuiID; size_arg : ImVec2; child_flags : ImGuiChildFlags; window_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginChildFrame( id : ImGuiID; size : ImVec2; flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igBeginColumns( str_id : PChar; count : Integer; flags : ImGuiOldColumnFlags ); cdecl; external CIMGUI_LIB;
+function igBeginCombo( label_ : PChar; preview_value : PChar; flags : ImGuiComboFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginComboPopup( popup_id : ImGuiID; bb : ImRect; flags : ImGuiComboFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginComboPreview( ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igBeginDisabled( disabled : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igBeginDockableDragDropSource( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBeginDockableDragDropTarget( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBeginDocked( window : PImGuiWindow; p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+function igBeginDragDropSource( flags : ImGuiDragDropFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginDragDropTarget( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginDragDropTargetCustom( bb : ImRect; id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igBeginGroup( ); cdecl; external CIMGUI_LIB;
+function igBeginItemTooltip( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginListBox( label_ : PChar; size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginMainMenuBar( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginMenu( label_ : PChar; enabled : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginMenuBar( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginMenuEx( label_ : PChar; icon : PChar; enabled : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopup( str_id : PChar; flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopupContextItem( str_id : PChar; popup_flags : ImGuiPopupFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopupContextVoid( str_id : PChar; popup_flags : ImGuiPopupFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopupContextWindow( str_id : PChar; popup_flags : ImGuiPopupFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopupEx( id : ImGuiID; extra_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginPopupModal( name : PChar; p_open : PBoolean; flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTabBar( str_id : PChar; flags : ImGuiTabBarFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTabBarEx( tab_bar : PImGuiTabBar; bb : ImRect; flags : ImGuiTabBarFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTabItem( label_ : PChar; p_open : PBoolean; flags : ImGuiTabItemFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTable( str_id : PChar; column : Integer; flags : ImGuiTableFlags; outer_size : ImVec2; inner_width : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTableEx( name : PChar; id : ImGuiID; columns_count : Integer; flags : ImGuiTableFlags; outer_size : ImVec2; inner_width : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTooltip( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTooltipEx( tooltip_flags : ImGuiTooltipFlags; extra_window_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginTooltipHidden( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igBeginViewportSideBar( name : PChar; viewport : PImGuiViewport; dir : ImGuiDir; size : Single; window_flags : ImGuiWindowFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igBringWindowToDisplayBack( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBringWindowToDisplayBehind( window : PImGuiWindow; above_window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBringWindowToDisplayFront( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBringWindowToFocusFront( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igBullet( ); cdecl; external CIMGUI_LIB;
+procedure igBulletText( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igBulletTextV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+function igButton( label_ : PChar; size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igButtonBehavior( bb : ImRect; id : ImGuiID; out_hovered : PBoolean; out_held : PBoolean; flags : ImGuiButtonFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igButtonEx( label_ : PChar; size_arg : ImVec2; flags : ImGuiButtonFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igCalcItemSize( pOut : PImVec2; size : ImVec2; default_w : Single; default_h : Single ); cdecl; external CIMGUI_LIB;
+function igCalcItemWidth( ) : Single; cdecl; external CIMGUI_LIB;
+function igCalcRoundingFlagsForRectInRect( r_in : ImRect; r_outer : ImRect; threshold : Single ) : ImDrawFlags; cdecl; external CIMGUI_LIB;
+procedure igCalcTextSize( pOut : PImVec2; text : PChar; text_end : PChar; hide_text_after_double_hash : Boolean; wrap_width : Single ); cdecl; external CIMGUI_LIB;
+function igCalcTypematicRepeatAmount( t0 : Single; t1 : Single; repeat_delay : Single; repeat_rate : Single ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igCalcWindowNextAutoFitSize( pOut : PImVec2; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function igCalcWrapWidthForPos( pos : ImVec2; wrap_pos_x : Single ) : Single; cdecl; external CIMGUI_LIB;
+procedure igCallContextHooks( context : PImGuiContext; type_ : ImGuiContextHookType ); cdecl; external CIMGUI_LIB;
+function igCheckbox( label_ : PChar; v : PBoolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCheckboxFlags_IntPtr( label_ : PChar; flags : PInteger; flags_value : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCheckboxFlags_UintPtr( label_ : PChar; flags : PImU32; flags_value : ImU32 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCheckboxFlags_S64Ptr( label_ : PChar; flags : PImS64; flags_value : ImS64 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCheckboxFlags_U64Ptr( label_ : PChar; flags : PImU64; flags_value : ImU64 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igClearActiveID( ); cdecl; external CIMGUI_LIB;
+procedure igClearDragDrop( ); cdecl; external CIMGUI_LIB;
+procedure igClearIniSettings( ); cdecl; external CIMGUI_LIB;
+procedure igClearWindowSettings( name : PChar ); cdecl; external CIMGUI_LIB;
+function igCloseButton( id : ImGuiID; pos : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igCloseCurrentPopup( ); cdecl; external CIMGUI_LIB;
+procedure igClosePopupToLevel( remaining : Integer; restore_focus_to_window_under_popup : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igClosePopupsExceptModals( ); cdecl; external CIMGUI_LIB;
+procedure igClosePopupsOverWindow( ref_window : PImGuiWindow; restore_focus_to_window_under_popup : Boolean ); cdecl; external CIMGUI_LIB;
+function igCollapseButton( id : ImGuiID; pos : ImVec2; dock_node : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCollapsingHeader_TreeNodeFlags( label_ : PChar; flags : ImGuiTreeNodeFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCollapsingHeader_BoolPtr( label_ : PChar; p_visible : PBoolean; flags : ImGuiTreeNodeFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igColorButton( desc_id : PChar; col : ImVec4; flags : ImGuiColorEditFlags; size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igColorConvertFloat4ToU32( in_ : ImVec4 ) : ImU32; cdecl; external CIMGUI_LIB;
+procedure igColorConvertHSVtoRGB( h : Single; s : Single; v : Single; out_r : PSingle; out_g : PSingle; out_b : PSingle ); cdecl; external CIMGUI_LIB;
+procedure igColorConvertRGBtoHSV( r : Single; g : Single; b : Single; out_h : PSingle; out_s : PSingle; out_v : PSingle ); cdecl; external CIMGUI_LIB;
+procedure igColorConvertU32ToFloat4( pOut : PImVec4; in_ : ImU32 ); cdecl; external CIMGUI_LIB;
+function igColorEdit3( label_ : PChar; col : PSingle; flags : ImGuiColorEditFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igColorEdit4( label_ : PChar; col : PSingle; flags : ImGuiColorEditFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igColorEditOptionsPopup( col : PSingle; flags : ImGuiColorEditFlags ); cdecl; external CIMGUI_LIB;
+function igColorPicker3( label_ : PChar; col : PSingle; flags : ImGuiColorEditFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igColorPicker4( label_ : PChar; col : PSingle; flags : ImGuiColorEditFlags; ref_col : PSingle ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igColorPickerOptionsPopup( ref_col : PSingle; flags : ImGuiColorEditFlags ); cdecl; external CIMGUI_LIB;
+procedure igColorTooltip( text : PChar; col : PSingle; flags : ImGuiColorEditFlags ); cdecl; external CIMGUI_LIB;
+procedure igColumns( count : Integer; id : PChar; border : Boolean ); cdecl; external CIMGUI_LIB;
+function igCombo_Str_arr( label_ : PChar; current_item : PInteger; items : PPChar; items_count : Integer; popup_max_height_in_items : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCombo_Str( label_ : PChar; current_item : PInteger; items_separated_by_zeros : PChar; popup_max_height_in_items : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igCombo_FnStrPtr( label_ : PChar; current_item : PInteger; getter : TImGuiComboItemsGetterFunc ;user_data : Pointer; items_count : Integer; popup_max_height_in_items : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igConvertShortcutMod( key_chord : ImGuiKeyChord ) : ImGuiKeyChord; cdecl; external CIMGUI_LIB;
+function igConvertSingleModFlagToKey( ctx : PImGuiContext; key : ImGuiKey ) : ImGuiKey; cdecl; external CIMGUI_LIB;
+function igCreateContext( shared_font_atlas : PImFontAtlas ) : PImGuiContext; cdecl; external CIMGUI_LIB;
+function igCreateNewWindowSettings( name : PChar ) : PImGuiWindowSettings; cdecl; external CIMGUI_LIB;
+function igDataTypeApplyFromText( buf : PChar; data_type : ImGuiDataType; p_data : Pointer; format : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDataTypeApplyOp( data_type : ImGuiDataType; op : Integer; output : Pointer; arg_1 : Pointer; arg_2 : Pointer ); cdecl; external CIMGUI_LIB;
+function igDataTypeClamp( data_type : ImGuiDataType; p_data : Pointer; p_min : Pointer; p_max : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDataTypeCompare( data_type : ImGuiDataType; arg_1 : Pointer; arg_2 : Pointer ) : Integer; cdecl; external CIMGUI_LIB;
+function igDataTypeFormatString( buf : PChar; buf_size : Integer; data_type : ImGuiDataType; p_data : Pointer; format : PChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igDataTypeGetInfo( data_type : ImGuiDataType ) : PImGuiDataTypeInfo; cdecl; external CIMGUI_LIB;
+procedure igDebugAllocHook( info : PImGuiDebugAllocInfo; frame_count : Integer; ptr : Pointer; size : size_t ); cdecl; external CIMGUI_LIB;
+function igDebugCheckVersionAndDataLayout( version_str : PChar; sz_io : size_t; sz_style : size_t; sz_vec2 : size_t; sz_vec4 : size_t; sz_drawvert : size_t; sz_drawidx : size_t ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDebugDrawCursorPos( col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igDebugDrawItemRect( col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igDebugDrawLineExtents( col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igDebugHookIdInfo( id : ImGuiID; data_type : ImGuiDataType; data_id : Pointer; data_id_end : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igDebugLocateItem( target_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDebugLocateItemOnHover( target_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDebugLocateItemResolveWithLastItem( ); cdecl; external CIMGUI_LIB;
+procedure igDebugLog( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igDebugLogV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeColumns( columns : PImGuiOldColumns ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeDockNode( node : PImGuiDockNode; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeDrawCmdShowMeshAndBoundingBox( out_draw_list : PImDrawList; draw_list : PImDrawList; draw_cmd : PImDrawCmd; show_mesh : Boolean; show_aabb : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeDrawList( window : PImGuiWindow; viewport : PImGuiViewportP; draw_list : PImDrawList; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeFont( font : PImFont ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeFontGlyph( font : PImFont; glyph : PImFontGlyph ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeInputTextState( state : PImGuiInputTextState ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeStorage( storage : PImGuiStorage; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeTabBar( tab_bar : PImGuiTabBar; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeTable( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeTableSettings( settings : PImGuiTableSettings ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeTypingSelectState( state : PImGuiTypingSelectState ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeViewport( viewport : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeWindow( window : PImGuiWindow; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeWindowSettings( settings : PImGuiWindowSettings ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeWindowsList( windows : PImVector_ImGuiWindowPtr; label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDebugNodeWindowsListByBeginStackParent( windows : PPImGuiWindow; windows_size : Integer; parent_in_begin_stack : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igDebugRenderKeyboardPreview( draw_list : PImDrawList ); cdecl; external CIMGUI_LIB;
+procedure igDebugRenderViewportThumbnail( draw_list : PImDrawList; viewport : PImGuiViewportP; bb : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igDebugStartItemPicker( ); cdecl; external CIMGUI_LIB;
+procedure igDebugTextEncoding( text : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDestroyContext( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igDestroyPlatformWindow( viewport : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure igDestroyPlatformWindows( ); cdecl; external CIMGUI_LIB;
+function igDockBuilderAddNode( node_id : ImGuiID; flags : ImGuiDockNodeFlags ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igDockBuilderCopyDockSpace( src_dockspace_id : ImGuiID; dst_dockspace_id : ImGuiID; in_window_remap_pairs : PImVector_const_charPtr ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderCopyNode( src_node_id : ImGuiID; dst_node_id : ImGuiID; out_node_remap_pairs : PImVector_ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderCopyWindowSettings( src_name : PChar; dst_name : PChar ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderDockWindow( window_name : PChar; node_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderFinish( node_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+function igDockBuilderGetCentralNode( node_id : ImGuiID ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+function igDockBuilderGetNode( node_id : ImGuiID ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+procedure igDockBuilderRemoveNode( node_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderRemoveNodeChildNodes( node_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderRemoveNodeDockedWindows( node_id : ImGuiID; clear_settings_refs : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderSetNodePos( node_id : ImGuiID; pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igDockBuilderSetNodeSize( node_id : ImGuiID; size : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igDockBuilderSplitNode( node_id : ImGuiID; split_dir : ImGuiDir; size_ratio_for_node_at_dir : Single; out_id_at_dir : PImGuiID; out_id_at_opposite_dir : PImGuiID ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igDockContextCalcDropPosForDocking( target : PImGuiWindow; target_node : PImGuiDockNode; payload_window : PImGuiWindow; payload_node : PImGuiDockNode; split_dir : ImGuiDir; split_outer : Boolean; out_pos : PImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDockContextClearNodes( ctx : PImGuiContext; root_id : ImGuiID; clear_settings_refs : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igDockContextEndFrame( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+function igDockContextFindNodeByID( ctx : PImGuiContext; id : ImGuiID ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+function igDockContextGenNodeID( ctx : PImGuiContext ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igDockContextInitialize( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igDockContextNewFrameUpdateDocking( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igDockContextNewFrameUpdateUndocking( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igDockContextProcessUndockNode( ctx : PImGuiContext; node : PImGuiDockNode ); cdecl; external CIMGUI_LIB;
+procedure igDockContextProcessUndockWindow( ctx : PImGuiContext; window : PImGuiWindow; clear_persistent_docking_ref : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igDockContextQueueDock( ctx : PImGuiContext; target : PImGuiWindow; target_node : PImGuiDockNode; payload : PImGuiWindow; split_dir : ImGuiDir; split_ratio : Single; split_outer : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igDockContextQueueUndockNode( ctx : PImGuiContext; node : PImGuiDockNode ); cdecl; external CIMGUI_LIB;
+procedure igDockContextQueueUndockWindow( ctx : PImGuiContext; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igDockContextRebuildNodes( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igDockContextShutdown( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+function igDockNodeBeginAmendTabBar( node : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDockNodeEndAmendTabBar( ); cdecl; external CIMGUI_LIB;
+function igDockNodeGetDepth( node : PImGuiDockNode ) : Integer; cdecl; external CIMGUI_LIB;
+function igDockNodeGetRootNode( node : PImGuiDockNode ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+function igDockNodeGetWindowMenuButtonId( node : PImGuiDockNode ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igDockNodeIsInHierarchyOf( node : PImGuiDockNode; parent : PImGuiDockNode ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDockNodeWindowMenuHandler_Default( ctx : PImGuiContext; node : PImGuiDockNode; tab_bar : PImGuiTabBar ); cdecl; external CIMGUI_LIB;
+function igDockSpace( id : ImGuiID; size : ImVec2; flags : ImGuiDockNodeFlags; window_class : PImGuiWindowClass ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igDockSpaceOverViewport( viewport : PImGuiViewport; flags : ImGuiDockNodeFlags; window_class : PImGuiWindowClass ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igDragBehavior( id : ImGuiID; data_type : ImGuiDataType; p_v : Pointer; v_speed : Single; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragFloat( label_ : PChar; v : PSingle; v_speed : Single; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragFloat2( label_ : PChar; v : PSingle; v_speed : Single; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragFloat3( label_ : PChar; v : PSingle; v_speed : Single; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragFloat4( label_ : PChar; v : PSingle; v_speed : Single; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragFloatRange2( label_ : PChar; v_current_min : PSingle; v_current_max : PSingle; v_speed : Single; v_min : Single; v_max : Single; format : PChar; format_max : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragInt( label_ : PChar; v : PInteger; v_speed : Single; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragInt2( label_ : PChar; v : PInteger; v_speed : Single; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragInt3( label_ : PChar; v : PInteger; v_speed : Single; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragInt4( label_ : PChar; v : PInteger; v_speed : Single; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragIntRange2( label_ : PChar; v_current_min : PInteger; v_current_max : PInteger; v_speed : Single; v_min : Integer; v_max : Integer; format : PChar; format_max : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragScalar( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; v_speed : Single; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igDragScalarN( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; components : Integer; v_speed : Single; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igDummy( size : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igEnd( ); cdecl; external CIMGUI_LIB;
+procedure igEndChild( ); cdecl; external CIMGUI_LIB;
+procedure igEndChildFrame( ); cdecl; external CIMGUI_LIB;
+procedure igEndColumns( ); cdecl; external CIMGUI_LIB;
+procedure igEndCombo( ); cdecl; external CIMGUI_LIB;
+procedure igEndComboPreview( ); cdecl; external CIMGUI_LIB;
+procedure igEndDisabled( ); cdecl; external CIMGUI_LIB;
+procedure igEndDragDropSource( ); cdecl; external CIMGUI_LIB;
+procedure igEndDragDropTarget( ); cdecl; external CIMGUI_LIB;
+procedure igEndFrame( ); cdecl; external CIMGUI_LIB;
+procedure igEndGroup( ); cdecl; external CIMGUI_LIB;
+procedure igEndListBox( ); cdecl; external CIMGUI_LIB;
+procedure igEndMainMenuBar( ); cdecl; external CIMGUI_LIB;
+procedure igEndMenu( ); cdecl; external CIMGUI_LIB;
+procedure igEndMenuBar( ); cdecl; external CIMGUI_LIB;
+procedure igEndPopup( ); cdecl; external CIMGUI_LIB;
+procedure igEndTabBar( ); cdecl; external CIMGUI_LIB;
+procedure igEndTabItem( ); cdecl; external CIMGUI_LIB;
+procedure igEndTable( ); cdecl; external CIMGUI_LIB;
+procedure igEndTooltip( ); cdecl; external CIMGUI_LIB;
+procedure igErrorCheckEndFrameRecover( log_callback : ImGuiErrorLogCallback; user_data : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igErrorCheckEndWindowRecover( log_callback : ImGuiErrorLogCallback; user_data : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igErrorCheckUsingSetCursorPosToExtendParentBoundaries( ); cdecl; external CIMGUI_LIB;
+procedure igFindBestWindowPosForPopup( pOut : PImVec2; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igFindBestWindowPosForPopupEx( pOut : PImVec2; ref_pos : ImVec2; size : ImVec2; last_dir : PImGuiDir; r_outer : ImRect; r_avoid : ImRect; policy : ImGuiPopupPositionPolicy ); cdecl; external CIMGUI_LIB;
+function igFindBlockingModal( window : PImGuiWindow ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igFindBottomMostVisibleWindowWithinBeginStack( window : PImGuiWindow ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igFindHoveredViewportFromPlatformWindowStack( mouse_platform_pos : ImVec2 ) : PImGuiViewportP; cdecl; external CIMGUI_LIB;
+function igFindOrCreateColumns( window : PImGuiWindow; id : ImGuiID ) : PImGuiOldColumns; cdecl; external CIMGUI_LIB;
+function igFindRenderedTextEnd( text : PChar; text_end : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igFindSettingsHandler( type_name : PChar ) : PImGuiSettingsHandler; cdecl; external CIMGUI_LIB;
+function igFindViewportByID( id : ImGuiID ) : PImGuiViewport; cdecl; external CIMGUI_LIB;
+function igFindViewportByPlatformHandle( platform_handle : Pointer ) : PImGuiViewport; cdecl; external CIMGUI_LIB;
+function igFindWindowByID( id : ImGuiID ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igFindWindowByName( name : PChar ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igFindWindowDisplayIndex( window : PImGuiWindow ) : Integer; cdecl; external CIMGUI_LIB;
+function igFindWindowSettingsByID( id : ImGuiID ) : PImGuiWindowSettings; cdecl; external CIMGUI_LIB;
+function igFindWindowSettingsByWindow( window : PImGuiWindow ) : PImGuiWindowSettings; cdecl; external CIMGUI_LIB;
+procedure igFocusItem( ); cdecl; external CIMGUI_LIB;
+procedure igFocusTopMostWindowUnderOne( under_this_window : PImGuiWindow; ignore_window : PImGuiWindow; filter_viewport : PImGuiViewport; flags : ImGuiFocusRequestFlags ); cdecl; external CIMGUI_LIB;
+procedure igFocusWindow( window : PImGuiWindow; flags : ImGuiFocusRequestFlags ); cdecl; external CIMGUI_LIB;
+procedure igGcAwakeTransientWindowBuffers( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igGcCompactTransientMiscBuffers( ); cdecl; external CIMGUI_LIB;
+procedure igGcCompactTransientWindowBuffers( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function igGetActiveID( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igGetAllocatorFunctions( p_alloc_func : PImGuiMemAllocFunc; p_free_func : PImGuiMemFreeFunc; p_user_data : PPPointer ); cdecl; external CIMGUI_LIB;
+function igGetBackgroundDrawList_Nil( ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetBackgroundDrawList_ViewportPtr( viewport : PImGuiViewport ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetClipboardText( ) : PChar; cdecl; external CIMGUI_LIB;
+function igGetColorU32_Col( idx : ImGuiCol; alpha_mul : Single ) : ImU32; cdecl; external CIMGUI_LIB;
+function igGetColorU32_Vec4( col : ImVec4 ) : ImU32; cdecl; external CIMGUI_LIB;
+function igGetColorU32_U32( col : ImU32 ) : ImU32; cdecl; external CIMGUI_LIB;
+function igGetColumnIndex( ) : Integer; cdecl; external CIMGUI_LIB;
+function igGetColumnNormFromOffset( columns : PImGuiOldColumns; offset : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igGetColumnOffset( column_index : Integer ) : Single; cdecl; external CIMGUI_LIB;
+function igGetColumnOffsetFromNorm( columns : PImGuiOldColumns; offset_norm : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igGetColumnWidth( column_index : Integer ) : Single; cdecl; external CIMGUI_LIB;
+function igGetColumnsCount( ) : Integer; cdecl; external CIMGUI_LIB;
+function igGetColumnsID( str_id : PChar; count : Integer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igGetContentRegionAvail( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetContentRegionMax( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetContentRegionMaxAbs( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetCurrentContext( ) : PImGuiContext; cdecl; external CIMGUI_LIB;
+function igGetCurrentFocusScope( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetCurrentTabBar( ) : PImGuiTabBar; cdecl; external CIMGUI_LIB;
+function igGetCurrentTable( ) : PImGuiTable; cdecl; external CIMGUI_LIB;
+function igGetCurrentWindow( ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igGetCurrentWindowRead( ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+procedure igGetCursorPos( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetCursorPosX( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetCursorPosY( ) : Single; cdecl; external CIMGUI_LIB;
+procedure igGetCursorScreenPos( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetCursorStartPos( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetDefaultFont( ) : PImFont; cdecl; external CIMGUI_LIB;
+function igGetDragDropPayload( ) : PImGuiPayload; cdecl; external CIMGUI_LIB;
+function igGetDrawData( ) : PImDrawData; cdecl; external CIMGUI_LIB;
+function igGetDrawListSharedData( ) : PImDrawListSharedData; cdecl; external CIMGUI_LIB;
+function igGetFocusID( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetFont( ) : PImFont; cdecl; external CIMGUI_LIB;
+function igGetFontSize( ) : Single; cdecl; external CIMGUI_LIB;
+procedure igGetFontTexUvWhitePixel( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetForegroundDrawList_Nil( ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetForegroundDrawList_ViewportPtr( viewport : PImGuiViewport ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetForegroundDrawList_WindowPtr( window : PImGuiWindow ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetFrameCount( ) : Integer; cdecl; external CIMGUI_LIB;
+function igGetFrameHeight( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetFrameHeightWithSpacing( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetHoveredID( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetID_Str( str_id : PChar ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetID_StrStr( str_id_begin : PChar; str_id_end : PChar ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetID_Ptr( ptr_id : Pointer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetIDWithSeed_Str( str_id_begin : PChar; str_id_end : PChar; seed : ImGuiID ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetIDWithSeed_Int( n : Integer; seed : ImGuiID ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetIO( ) : PImGuiIO; cdecl; external CIMGUI_LIB;
+function igGetInputTextState( id : ImGuiID ) : PImGuiInputTextState; cdecl; external CIMGUI_LIB;
+function igGetItemFlags( ) : ImGuiItemFlags; cdecl; external CIMGUI_LIB;
+function igGetItemID( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igGetItemRectMax( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetItemRectMin( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetItemRectSize( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetItemStatusFlags( ) : ImGuiItemStatusFlags; cdecl; external CIMGUI_LIB;
+procedure igGetKeyChordName( key_chord : ImGuiKeyChord; out_buf : PChar; out_buf_size : Integer ); cdecl; external CIMGUI_LIB;
+function igGetKeyData_ContextPtr( ctx : PImGuiContext; key : ImGuiKey ) : PImGuiKeyData; cdecl; external CIMGUI_LIB;
+function igGetKeyData_Key( key : ImGuiKey ) : PImGuiKeyData; cdecl; external CIMGUI_LIB;
+function igGetKeyIndex( key : ImGuiKey ) : ImGuiKey; cdecl; external CIMGUI_LIB;
+procedure igGetKeyMagnitude2d( pOut : PImVec2; key_left : ImGuiKey; key_right : ImGuiKey; key_up : ImGuiKey; key_down : ImGuiKey ); cdecl; external CIMGUI_LIB;
+function igGetKeyName( key : ImGuiKey ) : PChar; cdecl; external CIMGUI_LIB;
+function igGetKeyOwner( key : ImGuiKey ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetKeyOwnerData( ctx : PImGuiContext; key : ImGuiKey ) : PImGuiKeyOwnerData; cdecl; external CIMGUI_LIB;
+function igGetKeyPressedAmount( key : ImGuiKey; repeat_delay : Single; rate : Single ) : Integer; cdecl; external CIMGUI_LIB;
+function igGetMainViewport( ) : PImGuiViewport; cdecl; external CIMGUI_LIB;
+function igGetMouseClickedCount( button : ImGuiMouseButton ) : Integer; cdecl; external CIMGUI_LIB;
+function igGetMouseCursor( ) : ImGuiMouseCursor; cdecl; external CIMGUI_LIB;
+procedure igGetMouseDragDelta( pOut : PImVec2; button : ImGuiMouseButton; lock_threshold : Single ); cdecl; external CIMGUI_LIB;
+procedure igGetMousePos( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetMousePosOnOpeningCurrentPopup( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetNavTweakPressedAmount( axis : ImGuiAxis ) : Single; cdecl; external CIMGUI_LIB;
+function igGetPlatformIO( ) : PImGuiPlatformIO; cdecl; external CIMGUI_LIB;
+procedure igGetPopupAllowedExtentRect( pOut : PImRect; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function igGetScrollMaxX( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetScrollMaxY( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetScrollX( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetScrollY( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetShortcutRoutingData( key_chord : ImGuiKeyChord ) : PImGuiKeyRoutingData; cdecl; external CIMGUI_LIB;
+function igGetStateStorage( ) : PImGuiStorage; cdecl; external CIMGUI_LIB;
+function igGetStyle( ) : PImGuiStyle; cdecl; external CIMGUI_LIB;
+function igGetStyleColorName( idx : ImGuiCol ) : PChar; cdecl; external CIMGUI_LIB;
+function igGetStyleColorVec4( idx : ImGuiCol ) : PImVec4; cdecl; external CIMGUI_LIB;
+function igGetStyleVarInfo( idx : ImGuiStyleVar ) : PImGuiDataVarInfo; cdecl; external CIMGUI_LIB;
+function igGetTextLineHeight( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetTextLineHeightWithSpacing( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetTime( ) : Double; cdecl; external CIMGUI_LIB;
+function igGetTopMostAndVisiblePopupModal( ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igGetTopMostPopupModal( ) : PImGuiWindow; cdecl; external CIMGUI_LIB;
+function igGetTreeNodeToLabelSpacing( ) : Single; cdecl; external CIMGUI_LIB;
+procedure igGetTypematicRepeatRate( flags : ImGuiInputFlags; repeat_delay : PSingle; repeat_rate : PSingle ); cdecl; external CIMGUI_LIB;
+function igGetTypingSelectRequest( flags : ImGuiTypingSelectFlags ) : PImGuiTypingSelectRequest; cdecl; external CIMGUI_LIB;
+function igGetVersion( ) : PChar; cdecl; external CIMGUI_LIB;
+function igGetViewportPlatformMonitor( viewport : PImGuiViewport ) : PImGuiPlatformMonitor; cdecl; external CIMGUI_LIB;
+function igGetWindowAlwaysWantOwnTabBar( window : PImGuiWindow ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igGetWindowContentRegionMax( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igGetWindowContentRegionMin( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetWindowDockID( ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetWindowDockNode( ) : PImGuiDockNode; cdecl; external CIMGUI_LIB;
+function igGetWindowDpiScale( ) : Single; cdecl; external CIMGUI_LIB;
+function igGetWindowDrawList( ) : PImDrawList; cdecl; external CIMGUI_LIB;
+function igGetWindowHeight( ) : Single; cdecl; external CIMGUI_LIB;
+procedure igGetWindowPos( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetWindowResizeBorderID( window : PImGuiWindow; dir : ImGuiDir ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetWindowResizeCornerID( window : PImGuiWindow; n : Integer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igGetWindowScrollbarID( window : PImGuiWindow; axis : ImGuiAxis ) : ImGuiID; cdecl; external CIMGUI_LIB;
+procedure igGetWindowScrollbarRect( pOut : PImRect; window : PImGuiWindow; axis : ImGuiAxis ); cdecl; external CIMGUI_LIB;
+procedure igGetWindowSize( pOut : PImVec2 ); cdecl; external CIMGUI_LIB;
+function igGetWindowViewport( ) : PImGuiViewport; cdecl; external CIMGUI_LIB;
+function igGetWindowWidth( ) : Single; cdecl; external CIMGUI_LIB;
+function igImAbs_Int( x : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+function igImAbs_Float( x : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImAbs_double( x : Double ) : Double; cdecl; external CIMGUI_LIB;
+function igImAlphaBlendColors( col_a : ImU32; col_b : ImU32 ) : ImU32; cdecl; external CIMGUI_LIB;
+procedure igImBezierCubicCalc( pOut : PImVec2; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; t : Single ); cdecl; external CIMGUI_LIB;
+procedure igImBezierCubicClosestPoint( pOut : PImVec2; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; p : ImVec2; num_segments : Integer ); cdecl; external CIMGUI_LIB;
+procedure igImBezierCubicClosestPointCasteljau( pOut : PImVec2; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; p4 : ImVec2; p : ImVec2; tess_tol : Single ); cdecl; external CIMGUI_LIB;
+procedure igImBezierQuadraticCalc( pOut : PImVec2; p1 : ImVec2; p2 : ImVec2; p3 : ImVec2; t : Single ); cdecl; external CIMGUI_LIB;
+procedure igImBitArrayClearAllBits( arr : PImU32; bitcount : Integer ); cdecl; external CIMGUI_LIB;
+procedure igImBitArrayClearBit( arr : PImU32; n : Integer ); cdecl; external CIMGUI_LIB;
+function igImBitArrayGetStorageSizeInBytes( bitcount : Integer ) : size_t; cdecl; external CIMGUI_LIB;
+procedure igImBitArraySetBit( arr : PImU32; n : Integer ); cdecl; external CIMGUI_LIB;
+procedure igImBitArraySetBitRange( arr : PImU32; n : Integer; n2 : Integer ); cdecl; external CIMGUI_LIB;
+function igImBitArrayTestBit( arr : PImU32; n : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImCharIsBlankA( c : Char ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImCharIsBlankW( c : ImU32 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igImClamp( pOut : PImVec2; v : ImVec2; mn : ImVec2; mx : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImDot( a : ImVec2; b : ImVec2 ) : Single; cdecl; external CIMGUI_LIB;
+function igImExponentialMovingAverage( avg : Single; sample : Single; n : Integer ) : Single; cdecl; external CIMGUI_LIB;
+function igImFileClose( file_ : ImFileHandle ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImFileGetSize( file_ : ImFileHandle ) : ImU64; cdecl; external CIMGUI_LIB;
+function igImFileLoadToMemory( filename : PChar; mode : PChar; out_file_size : Psize_t; padding_bytes : Integer ) : Pointer; cdecl; external CIMGUI_LIB;
+function igImFileOpen( filename : PChar; mode : PChar ) : ImFileHandle; cdecl; external CIMGUI_LIB;
+function igImFileRead( data : Pointer; size : ImU64; count : ImU64; file_ : ImFileHandle ) : ImU64; cdecl; external CIMGUI_LIB;
+function igImFileWrite( data : Pointer; size : ImU64; count : ImU64; file_ : ImFileHandle ) : ImU64; cdecl; external CIMGUI_LIB;
+function igImFloor_Float( f : Single ) : Single; cdecl; external CIMGUI_LIB;
+procedure igImFloor_Vec2( pOut : PImVec2; v : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildFinish( atlas : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildInit( atlas : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildMultiplyCalcLookupTable( out_table : PByte; in_multiply_factor : Single ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildMultiplyRectAlpha8( table : PByte; pixels : PImU8; x : Integer; y : Integer; w : Integer; h : Integer; stride : Integer ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildPackCustomRects( atlas : PImFontAtlas; stbrp_context_opaque : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildRender32bppRectFromString( atlas : PImFontAtlas; x : Integer; y : Integer; w : Integer; h : Integer; in_str : PChar; in_marker_char : Char; in_marker_pixel_value : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildRender8bppRectFromString( atlas : PImFontAtlas; x : Integer; y : Integer; w : Integer; h : Integer; in_str : PChar; in_marker_char : Char; in_marker_pixel_value : ImU8 ); cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasBuildSetupFont( atlas : PImFontAtlas; font : PImFont; font_config : PImFontConfig; ascent : Single; descent : Single ); cdecl; external CIMGUI_LIB;
+function igImFontAtlasGetBuilderForStbTruetype( ) : PImFontBuilderIO; cdecl; external CIMGUI_LIB;
+procedure igImFontAtlasUpdateConfigDataPointers( atlas : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+function igImFormatString( buf : PChar; buf_size : size_t; fmt : PChar; args : array of const ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igImFormatStringToTempBuffer( out_buf : PPChar; out_buf_end : PPChar; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igImFormatStringToTempBufferV( out_buf : PPChar; out_buf_end : PPChar; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+function igImFormatStringV( buf : PChar; buf_size : size_t; fmt : PChar; args : array of const ) : Integer; cdecl; external CIMGUI_LIB;
+function igImHashData( data : Pointer; data_size : size_t; seed : ImGuiID ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igImHashStr( data : PChar; data_size : size_t; seed : ImGuiID ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igImInvLength( lhs : ImVec2; fail_value : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImIsFloatAboveGuaranteedIntegerPrecision( f : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImIsPowerOfTwo_Int( v : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImIsPowerOfTwo_U64( v : ImU64 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImLengthSqr_Vec2( lhs : ImVec2 ) : Single; cdecl; external CIMGUI_LIB;
+function igImLengthSqr_Vec4( lhs : ImVec4 ) : Single; cdecl; external CIMGUI_LIB;
+procedure igImLerp_Vec2Float( pOut : PImVec2; a : ImVec2; b : ImVec2; t : Single ); cdecl; external CIMGUI_LIB;
+procedure igImLerp_Vec2Vec2( pOut : PImVec2; a : ImVec2; b : ImVec2; t : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igImLerp_Vec4( pOut : PImVec4; a : ImVec4; b : ImVec4; t : Single ); cdecl; external CIMGUI_LIB;
+procedure igImLineClosestPoint( pOut : PImVec2; a : ImVec2; b : ImVec2; p : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImLinearSweep( current : Single; target : Single; speed : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImLog_Float( x : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImLog_double( x : Double ) : Double; cdecl; external CIMGUI_LIB;
+procedure igImMax( pOut : PImVec2; lhs : ImVec2; rhs : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igImMin( pOut : PImVec2; lhs : ImVec2; rhs : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImModPositive( a : Integer; b : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igImMul( pOut : PImVec2; lhs : ImVec2; rhs : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImParseFormatFindEnd( format : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImParseFormatFindStart( format : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImParseFormatPrecision( format : PChar; default_value : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igImParseFormatSanitizeForPrinting( fmt_in : PChar; fmt_out : PChar; fmt_out_size : size_t ); cdecl; external CIMGUI_LIB;
+function igImParseFormatSanitizeForScanning( fmt_in : PChar; fmt_out : PChar; fmt_out_size : size_t ) : PChar; cdecl; external CIMGUI_LIB;
+function igImParseFormatTrimDecorations( format : PChar; buf : PChar; buf_size : size_t ) : PChar; cdecl; external CIMGUI_LIB;
+function igImPow_Float( x : Single; y : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImPow_double( x : Double; y : Double ) : Double; cdecl; external CIMGUI_LIB;
+procedure igImQsort( base : Pointer; count : size_t; size_of_element : size_t; compare_func : TCompareFunc ); cdecl; external CIMGUI_LIB;
+procedure igImRotate( pOut : PImVec2; v : ImVec2; cos_a : Single; sin_a : Single ); cdecl; external CIMGUI_LIB;
+function igImRsqrt_Float( x : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImRsqrt_double( x : Double ) : Double; cdecl; external CIMGUI_LIB;
+function igImSaturate( f : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImSign_Float( x : Single ) : Single; cdecl; external CIMGUI_LIB;
+function igImSign_double( x : Double ) : Double; cdecl; external CIMGUI_LIB;
+function igImStrSkipBlank( str : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+procedure igImStrTrimBlanks( str : PChar ); cdecl; external CIMGUI_LIB;
+function igImStrbolW( buf_mid_line : PImWchar; buf_begin : PImWchar ) : PImWchar; cdecl; external CIMGUI_LIB;
+function igImStrchrRange( str_begin : PChar; str_end : PChar; c : Char ) : PChar; cdecl; external CIMGUI_LIB;
+function igImStrdup( str : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImStrdupcpy( dst : PChar; p_dst_size : Psize_t; str : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImStreolRange( str : PChar; str_end : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImStricmp( str1 : PChar; str2 : PChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImStristr( haystack : PChar; haystack_end : PChar; needle : PChar; needle_end : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImStrlenW( str : PImWchar ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igImStrncpy( dst : PChar; src : PChar; count : size_t ); cdecl; external CIMGUI_LIB;
+function igImStrnicmp( str1 : PChar; str2 : PChar; count : size_t ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextCharFromUtf8( out_char : PImU32; in_text : PChar; in_text_end : PChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextCharToUtf8( out_buf : PChar; c : ImU32 ) : PChar; cdecl; external CIMGUI_LIB;
+function igImTextCountCharsFromUtf8( in_text : PChar; in_text_end : PChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextCountUtf8BytesFromChar( in_text : PChar; in_text_end : PChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextCountUtf8BytesFromStr( in_text : PImWchar; in_text_end : PImWchar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextFindPreviousUtf8Codepoint( in_text_start : PChar; in_text_curr : PChar ) : PChar; cdecl; external CIMGUI_LIB;
+function igImTextStrFromUtf8( out_buf : PImWchar; out_buf_size : Integer; in_text : PChar; in_text_end : PChar; in_remaining : PPChar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImTextStrToUtf8( out_buf : PChar; out_buf_size : Integer; in_text : PImWchar; in_text_end : PImWchar ) : Integer; cdecl; external CIMGUI_LIB;
+function igImToUpper( c : Char ) : Char; cdecl; external CIMGUI_LIB;
+function igImTriangleArea( a : ImVec2; b : ImVec2; c : ImVec2 ) : Single; cdecl; external CIMGUI_LIB;
+procedure igImTriangleBarycentricCoords( a : ImVec2; b : ImVec2; c : ImVec2; p : ImVec2; out_u : PSingle; out_v : PSingle; out_w : PSingle ); cdecl; external CIMGUI_LIB;
+procedure igImTriangleClosestPoint( pOut : PImVec2; a : ImVec2; b : ImVec2; c : ImVec2; p : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImTriangleContainsPoint( a : ImVec2; b : ImVec2; c : ImVec2; p : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImTrunc_Float( f : Single ) : Single; cdecl; external CIMGUI_LIB;
+procedure igImTrunc_Vec2( pOut : PImVec2; v : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igImUpperPowerOfTwo( v : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igImage( user_texture_id : ImTextureID; size : ImVec2; uv0 : ImVec2; uv1 : ImVec2; tint_col : ImVec4; border_col : ImVec4 ); cdecl; external CIMGUI_LIB;
+function igImageButton( str_id : PChar; user_texture_id : ImTextureID; image_size : ImVec2; uv0 : ImVec2; uv1 : ImVec2; bg_col : ImVec4; tint_col : ImVec4 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igImageButtonEx( id : ImGuiID; texture_id : ImTextureID; image_size : ImVec2; uv0 : ImVec2; uv1 : ImVec2; bg_col : ImVec4; tint_col : ImVec4; flags : ImGuiButtonFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igIndent( indent_w : Single ); cdecl; external CIMGUI_LIB;
+procedure igInitialize( ); cdecl; external CIMGUI_LIB;
+function igInputDouble( label_ : PChar; v : PDouble; step : Double; step_fast : Double; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputFloat( label_ : PChar; v : PSingle; step : Single; step_fast : Single; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputFloat2( label_ : PChar; v : PSingle; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputFloat3( label_ : PChar; v : PSingle; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputFloat4( label_ : PChar; v : PSingle; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputInt( label_ : PChar; v : PInteger; step : Integer; step_fast : Integer; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputInt2( label_ : PChar; v : PInteger; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputInt3( label_ : PChar; v : PInteger; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputInt4( label_ : PChar; v : PInteger; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputScalar( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; p_step : Pointer; p_step_fast : Pointer; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputScalarN( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; components : Integer; p_step : Pointer; p_step_fast : Pointer; format : PChar; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputText( label_ : PChar; buf : PChar; buf_size : size_t; flags : ImGuiInputTextFlags; callback : ImGuiInputTextCallback; user_data : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igInputTextDeactivateHook( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+function igInputTextEx( label_ : PChar; hint : PChar; buf : PChar; buf_size : Integer; size_arg : ImVec2; flags : ImGuiInputTextFlags; callback : ImGuiInputTextCallback; user_data : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputTextMultiline( label_ : PChar; buf : PChar; buf_size : size_t; size : ImVec2; flags : ImGuiInputTextFlags; callback : ImGuiInputTextCallback; user_data : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInputTextWithHint( label_ : PChar; hint : PChar; buf : PChar; buf_size : size_t; flags : ImGuiInputTextFlags; callback : ImGuiInputTextCallback; user_data : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igInvisibleButton( str_id : PChar; size : ImVec2; flags : ImGuiButtonFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsActiveIdUsingNavDir( dir : ImGuiDir ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsAliasKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsAnyItemActive( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsAnyItemFocused( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsAnyItemHovered( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsAnyMouseDown( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsClippedEx( bb : ImRect; id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsDragDropActive( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsDragDropPayloadBeingAccepted( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsGamepadKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemActivated( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemActive( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemClicked( mouse_button : ImGuiMouseButton ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemDeactivated( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemDeactivatedAfterEdit( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemEdited( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemFocused( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemHovered( flags : ImGuiHoveredFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemToggledOpen( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemToggledSelection( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsItemVisible( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyChordPressed_Nil( key_chord : ImGuiKeyChord ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyChordPressed_ID( key_chord : ImGuiKeyChord; owner_id : ImGuiID; flags : ImGuiInputFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyDown_Nil( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyDown_ID( key : ImGuiKey; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyPressed_Bool( key : ImGuiKey; repeat_ : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyPressed_ID( key : ImGuiKey; owner_id : ImGuiID; flags : ImGuiInputFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyPressedMap( key : ImGuiKey; repeat_ : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyReleased_Nil( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyReleased_ID( key : ImGuiKey; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsKeyboardKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsLegacyKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseClicked_Bool( button : ImGuiMouseButton; repeat_ : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseClicked_ID( button : ImGuiMouseButton; owner_id : ImGuiID; flags : ImGuiInputFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseDoubleClicked( button : ImGuiMouseButton ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseDown_Nil( button : ImGuiMouseButton ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseDown_ID( button : ImGuiMouseButton; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseDragPastThreshold( button : ImGuiMouseButton; lock_threshold : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseDragging( button : ImGuiMouseButton; lock_threshold : Single ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseHoveringRect( r_min : ImVec2; r_max : ImVec2; clip : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMousePosValid( mouse_pos : PImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseReleased_Nil( button : ImGuiMouseButton ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsMouseReleased_ID( button : ImGuiMouseButton; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsNamedKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsNamedKeyOrModKey( key : ImGuiKey ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsPopupOpen_Str( str_id : PChar; flags : ImGuiPopupFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsPopupOpen_ID( id : ImGuiID; popup_flags : ImGuiPopupFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsRectVisible_Nil( size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsRectVisible_Vec2( rect_min : ImVec2; rect_max : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowAbove( potential_above : PImGuiWindow; potential_below : PImGuiWindow ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowAppearing( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowChildOf( window : PImGuiWindow; potential_parent : PImGuiWindow; popup_hierarchy : Boolean; dock_hierarchy : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowCollapsed( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowContentHoverable( window : PImGuiWindow; flags : ImGuiHoveredFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowDocked( ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowFocused( flags : ImGuiFocusedFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowHovered( flags : ImGuiHoveredFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowNavFocusable( window : PImGuiWindow ) : Boolean; cdecl; external CIMGUI_LIB;
+function igIsWindowWithinBeginStackOf( window : PImGuiWindow; potential_parent : PImGuiWindow ) : Boolean; cdecl; external CIMGUI_LIB;
+function igItemAdd( bb : ImRect; id : ImGuiID; nav_bb : PImRect; extra_flags : ImGuiItemFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igItemHoverable( bb : ImRect; id : ImGuiID; item_flags : ImGuiItemFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igItemSize_Vec2( size : ImVec2; text_baseline_y : Single ); cdecl; external CIMGUI_LIB;
+procedure igItemSize_Rect( bb : ImRect; text_baseline_y : Single ); cdecl; external CIMGUI_LIB;
+procedure igKeepAliveID( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igLabelText( label_ : PChar; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igLabelTextV( label_ : PChar; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+function igListBox_Str_arr( label_ : PChar; current_item : PInteger; items : PPChar; items_count : Integer; height_in_items : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igListBox_FnStrPtr( label_ : PChar; current_item : PInteger; getter : TImGuiComboItemsGetterFunc ;user_data : Pointer; items_count : Integer; height_in_items : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igLoadIniSettingsFromDisk( ini_filename : PChar ); cdecl; external CIMGUI_LIB;
+procedure igLoadIniSettingsFromMemory( ini_data : PChar; ini_size : size_t ); cdecl; external CIMGUI_LIB;
+function igLocalizeGetMsg( key : ImGuiLocKey ) : PChar; cdecl; external CIMGUI_LIB;
+procedure igLocalizeRegisterEntries( entries : PImGuiLocEntry; count : Integer ); cdecl; external CIMGUI_LIB;
+procedure igLogBegin( type_ : ImGuiLogType; auto_open_depth : Integer ); cdecl; external CIMGUI_LIB;
+procedure igLogButtons( ); cdecl; external CIMGUI_LIB;
+procedure igLogFinish( ); cdecl; external CIMGUI_LIB;
+procedure igLogRenderedText( ref_pos : PImVec2; text : PChar; text_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure igLogSetNextTextDecoration( prefix : PChar; suffix : PChar ); cdecl; external CIMGUI_LIB;
+procedure igLogText( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igLogTextV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igLogToBuffer( auto_open_depth : Integer ); cdecl; external CIMGUI_LIB;
+procedure igLogToClipboard( auto_open_depth : Integer ); cdecl; external CIMGUI_LIB;
+procedure igLogToFile( auto_open_depth : Integer; filename : PChar ); cdecl; external CIMGUI_LIB;
+procedure igLogToTTY( auto_open_depth : Integer ); cdecl; external CIMGUI_LIB;
+procedure igMarkIniSettingsDirty_Nil( ); cdecl; external CIMGUI_LIB;
+procedure igMarkIniSettingsDirty_WindowPtr( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igMarkItemEdited( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+function igMemAlloc( size : size_t ) : Pointer; cdecl; external CIMGUI_LIB;
+procedure igMemFree( ptr : Pointer ); cdecl; external CIMGUI_LIB;
+function igMenuItem_Bool( label_ : PChar; shortcut : PChar; selected : Boolean; enabled : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igMenuItem_BoolPtr( label_ : PChar; shortcut : PChar; p_selected : PBoolean; enabled : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igMenuItemEx( label_ : PChar; icon : PChar; shortcut : PChar; selected : Boolean; enabled : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igMouseButtonToKey( button : ImGuiMouseButton ) : ImGuiKey; cdecl; external CIMGUI_LIB;
+procedure igNavClearPreferredPosForAxis( axis : ImGuiAxis ); cdecl; external CIMGUI_LIB;
+procedure igNavInitRequestApplyResult( ); cdecl; external CIMGUI_LIB;
+procedure igNavInitWindow( window : PImGuiWindow; force_reinit : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestApplyResult( ); cdecl; external CIMGUI_LIB;
+function igNavMoveRequestButNoResultYet( ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestCancel( ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestForward( move_dir : ImGuiDir; clip_dir : ImGuiDir; move_flags : ImGuiNavMoveFlags; scroll_flags : ImGuiScrollFlags ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestResolveWithLastItem( result : PImGuiNavItemData ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestResolveWithPastTreeNode( result : PImGuiNavItemData; tree_node_data : PImGuiNavTreeNodeData ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestSubmit( move_dir : ImGuiDir; clip_dir : ImGuiDir; move_flags : ImGuiNavMoveFlags; scroll_flags : ImGuiScrollFlags ); cdecl; external CIMGUI_LIB;
+procedure igNavMoveRequestTryWrapping( window : PImGuiWindow; move_flags : ImGuiNavMoveFlags ); cdecl; external CIMGUI_LIB;
+procedure igNavRestoreHighlightAfterMove( ); cdecl; external CIMGUI_LIB;
+procedure igNavUpdateCurrentWindowIsScrollPushableX( ); cdecl; external CIMGUI_LIB;
+procedure igNewFrame( ); cdecl; external CIMGUI_LIB;
+procedure igNewLine( ); cdecl; external CIMGUI_LIB;
+procedure igNextColumn( ); cdecl; external CIMGUI_LIB;
+procedure igOpenPopup_Str( str_id : PChar; popup_flags : ImGuiPopupFlags ); cdecl; external CIMGUI_LIB;
+procedure igOpenPopup_ID( id : ImGuiID; popup_flags : ImGuiPopupFlags ); cdecl; external CIMGUI_LIB;
+procedure igOpenPopupEx( id : ImGuiID; popup_flags : ImGuiPopupFlags ); cdecl; external CIMGUI_LIB;
+procedure igOpenPopupOnItemClick( str_id : PChar; popup_flags : ImGuiPopupFlags ); cdecl; external CIMGUI_LIB;
+function igPlotEx( plot_type : ImGuiPlotType; label_ : PChar; values_getter : TImGuiPlotValuesGetterFunc ;data : Pointer; values_count : Integer; values_offset : Integer; overlay_text : PChar; scale_min : Single; scale_max : Single; size_arg : ImVec2 ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igPlotHistogram_FloatPtr( label_ : PChar; values : PSingle; values_count : Integer; values_offset : Integer; overlay_text : PChar; scale_min : Single; scale_max : Single; graph_size : ImVec2; stride : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPlotHistogram_FnFloatPtr( label_ : PChar; values_getter : TImGuiPlotValuesGetterFunc ;data : Pointer; values_count : Integer; values_offset : Integer; overlay_text : PChar; scale_min : Single; scale_max : Single; graph_size : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igPlotLines_FloatPtr( label_ : PChar; values : PSingle; values_count : Integer; values_offset : Integer; overlay_text : PChar; scale_min : Single; scale_max : Single; graph_size : ImVec2; stride : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPlotLines_FnFloatPtr( label_ : PChar; values_getter : TImGuiPlotValuesGetterFunc ;data : Pointer; values_count : Integer; values_offset : Integer; overlay_text : PChar; scale_min : Single; scale_max : Single; graph_size : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igPopButtonRepeat( ); cdecl; external CIMGUI_LIB;
+procedure igPopClipRect( ); cdecl; external CIMGUI_LIB;
+procedure igPopColumnsBackground( ); cdecl; external CIMGUI_LIB;
+procedure igPopFocusScope( ); cdecl; external CIMGUI_LIB;
+procedure igPopFont( ); cdecl; external CIMGUI_LIB;
+procedure igPopID( ); cdecl; external CIMGUI_LIB;
+procedure igPopItemFlag( ); cdecl; external CIMGUI_LIB;
+procedure igPopItemWidth( ); cdecl; external CIMGUI_LIB;
+procedure igPopStyleColor( count : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPopStyleVar( count : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPopTabStop( ); cdecl; external CIMGUI_LIB;
+procedure igPopTextWrapPos( ); cdecl; external CIMGUI_LIB;
+procedure igProgressBar( fraction : Single; size_arg : ImVec2; overlay : PChar ); cdecl; external CIMGUI_LIB;
+procedure igPushButtonRepeat( repeat_ : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igPushClipRect( clip_rect_min : ImVec2; clip_rect_max : ImVec2; intersect_with_current_clip_rect : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igPushColumnClipRect( column_index : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPushColumnsBackground( ); cdecl; external CIMGUI_LIB;
+procedure igPushFocusScope( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igPushFont( font : PImFont ); cdecl; external CIMGUI_LIB;
+procedure igPushID_Str( str_id : PChar ); cdecl; external CIMGUI_LIB;
+procedure igPushID_StrStr( str_id_begin : PChar; str_id_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure igPushID_Ptr( ptr_id : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igPushID_Int( int_id : Integer ); cdecl; external CIMGUI_LIB;
+procedure igPushItemFlag( option : ImGuiItemFlags; enabled : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igPushItemWidth( item_width : Single ); cdecl; external CIMGUI_LIB;
+procedure igPushMultiItemsWidths( components : Integer; width_full : Single ); cdecl; external CIMGUI_LIB;
+procedure igPushOverrideID( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igPushStyleColor_U32( idx : ImGuiCol; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igPushStyleColor_Vec4( idx : ImGuiCol; col : ImVec4 ); cdecl; external CIMGUI_LIB;
+procedure igPushStyleVar_Float( idx : ImGuiStyleVar; val : Single ); cdecl; external CIMGUI_LIB;
+procedure igPushStyleVar_Vec2( idx : ImGuiStyleVar; val : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igPushTabStop( tab_stop : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igPushTextWrapPos( wrap_local_pos_x : Single ); cdecl; external CIMGUI_LIB;
+function igRadioButton_Bool( label_ : PChar; active : Boolean ) : Boolean; cdecl; external CIMGUI_LIB;
+function igRadioButton_IntPtr( label_ : PChar; v : PInteger; v_button : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igRemoveContextHook( context : PImGuiContext; hook_to_remove : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igRemoveSettingsHandler( type_name : PChar ); cdecl; external CIMGUI_LIB;
+procedure igRender( ); cdecl; external CIMGUI_LIB;
+procedure igRenderArrow( draw_list : PImDrawList; pos : ImVec2; col : ImU32; dir : ImGuiDir; scale : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderArrowDockMenu( draw_list : PImDrawList; p_min : ImVec2; sz : Single; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igRenderArrowPointingAt( draw_list : PImDrawList; pos : ImVec2; half_sz : ImVec2; direction : ImGuiDir; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igRenderBullet( draw_list : PImDrawList; pos : ImVec2; col : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igRenderCheckMark( draw_list : PImDrawList; pos : ImVec2; col : ImU32; sz : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderColorRectWithAlphaCheckerboard( draw_list : PImDrawList; p_min : ImVec2; p_max : ImVec2; fill_col : ImU32; grid_step : Single; grid_off : ImVec2; rounding : Single; flags : ImDrawFlags ); cdecl; external CIMGUI_LIB;
+procedure igRenderDragDropTargetRect( bb : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igRenderFrame( p_min : ImVec2; p_max : ImVec2; fill_col : ImU32; border : Boolean; rounding : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderFrameBorder( p_min : ImVec2; p_max : ImVec2; rounding : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderMouseCursor( pos : ImVec2; scale : Single; mouse_cursor : ImGuiMouseCursor; col_fill : ImU32; col_border : ImU32; col_shadow : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igRenderNavHighlight( bb : ImRect; id : ImGuiID; flags : ImGuiNavHighlightFlags ); cdecl; external CIMGUI_LIB;
+procedure igRenderPlatformWindowsDefault( platform_render_arg : Pointer; renderer_render_arg : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igRenderRectFilledRangeH( draw_list : PImDrawList; rect : ImRect; col : ImU32; x_start_norm : Single; x_end_norm : Single; rounding : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderRectFilledWithHole( draw_list : PImDrawList; outer : ImRect; inner : ImRect; col : ImU32; rounding : Single ); cdecl; external CIMGUI_LIB;
+procedure igRenderText( pos : ImVec2; text : PChar; text_end : PChar; hide_text_after_hash : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igRenderTextClipped( pos_min : ImVec2; pos_max : ImVec2; text : PChar; text_end : PChar; text_size_if_known : PImVec2; align : ImVec2; clip_rect : PImRect ); cdecl; external CIMGUI_LIB;
+procedure igRenderTextClippedEx( draw_list : PImDrawList; pos_min : ImVec2; pos_max : ImVec2; text : PChar; text_end : PChar; text_size_if_known : PImVec2; align : ImVec2; clip_rect : PImRect ); cdecl; external CIMGUI_LIB;
+procedure igRenderTextEllipsis( draw_list : PImDrawList; pos_min : ImVec2; pos_max : ImVec2; clip_max_x : Single; ellipsis_max_x : Single; text : PChar; text_end : PChar; text_size_if_known : PImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igRenderTextWrapped( pos : ImVec2; text : PChar; text_end : PChar; wrap_width : Single ); cdecl; external CIMGUI_LIB;
+procedure igResetMouseDragDelta( button : ImGuiMouseButton ); cdecl; external CIMGUI_LIB;
+procedure igSameLine( offset_from_start_x : Single; spacing : Single ); cdecl; external CIMGUI_LIB;
+procedure igSaveIniSettingsToDisk( ini_filename : PChar ); cdecl; external CIMGUI_LIB;
+function igSaveIniSettingsToMemory( out_ini_size : Psize_t ) : PChar; cdecl; external CIMGUI_LIB;
+procedure igScaleWindowsInViewport( viewport : PImGuiViewportP; scale : Single ); cdecl; external CIMGUI_LIB;
+procedure igScrollToBringRectIntoView( window : PImGuiWindow; rect : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igScrollToItem( flags : ImGuiScrollFlags ); cdecl; external CIMGUI_LIB;
+procedure igScrollToRect( window : PImGuiWindow; rect : ImRect; flags : ImGuiScrollFlags ); cdecl; external CIMGUI_LIB;
+procedure igScrollToRectEx( pOut : PImVec2; window : PImGuiWindow; rect : ImRect; flags : ImGuiScrollFlags ); cdecl; external CIMGUI_LIB;
+procedure igScrollbar( axis : ImGuiAxis ); cdecl; external CIMGUI_LIB;
+function igScrollbarEx( bb : ImRect; id : ImGuiID; axis : ImGuiAxis; p_scroll_v : PImS64; avail_v : ImS64; contents_v : ImS64; flags : ImDrawFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSelectable_Bool( label_ : PChar; selected : Boolean; flags : ImGuiSelectableFlags; size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSelectable_BoolPtr( label_ : PChar; p_selected : PBoolean; flags : ImGuiSelectableFlags; size : ImVec2 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igSeparator( ); cdecl; external CIMGUI_LIB;
+procedure igSeparatorEx( flags : ImGuiSeparatorFlags; thickness : Single ); cdecl; external CIMGUI_LIB;
+procedure igSeparatorText( label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igSeparatorTextEx( id : ImGuiID; label_ : PChar; label_end : PChar; extra_width : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetActiveID( id : ImGuiID; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igSetActiveIdUsingAllKeyboardKeys( ); cdecl; external CIMGUI_LIB;
+procedure igSetAllocatorFunctions( alloc_func : ImGuiMemAllocFunc; free_func : ImGuiMemFreeFunc; user_data : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igSetClipboardText( text : PChar ); cdecl; external CIMGUI_LIB;
+procedure igSetColorEditOptions( flags : ImGuiColorEditFlags ); cdecl; external CIMGUI_LIB;
+procedure igSetColumnOffset( column_index : Integer; offset_x : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetColumnWidth( column_index : Integer; width : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetCurrentContext( ctx : PImGuiContext ); cdecl; external CIMGUI_LIB;
+procedure igSetCurrentFont( font : PImFont ); cdecl; external CIMGUI_LIB;
+procedure igSetCurrentViewport( window : PImGuiWindow; viewport : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure igSetCursorPos( local_pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igSetCursorPosX( local_x : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetCursorPosY( local_y : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetCursorScreenPos( pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igSetDragDropPayload( type_ : PChar; data : Pointer; sz : size_t; cond : ImGuiCond ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igSetFocusID( id : ImGuiID; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igSetHoveredID( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igSetItemDefaultFocus( ); cdecl; external CIMGUI_LIB;
+procedure igSetItemKeyOwner( key : ImGuiKey; flags : ImGuiInputFlags ); cdecl; external CIMGUI_LIB;
+procedure igSetItemTooltip( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igSetItemTooltipV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igSetKeyOwner( key : ImGuiKey; owner_id : ImGuiID; flags : ImGuiInputFlags ); cdecl; external CIMGUI_LIB;
+procedure igSetKeyOwnersForKeyChord( key : ImGuiKeyChord; owner_id : ImGuiID; flags : ImGuiInputFlags ); cdecl; external CIMGUI_LIB;
+procedure igSetKeyboardFocusHere( offset : Integer ); cdecl; external CIMGUI_LIB;
+procedure igSetLastItemData( item_id : ImGuiID; in_flags : ImGuiItemFlags; status_flags : ImGuiItemStatusFlags; item_rect : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igSetMouseCursor( cursor_type : ImGuiMouseCursor ); cdecl; external CIMGUI_LIB;
+procedure igSetNavID( id : ImGuiID; nav_layer : ImGuiNavLayer; focus_scope_id : ImGuiID; rect_rel : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igSetNavWindow( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igSetNextFrameWantCaptureKeyboard( want_capture_keyboard : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igSetNextFrameWantCaptureMouse( want_capture_mouse : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igSetNextItemAllowOverlap( ); cdecl; external CIMGUI_LIB;
+procedure igSetNextItemOpen( is_open : Boolean; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetNextItemSelectionUserData( selection_user_data : ImGuiSelectionUserData ); cdecl; external CIMGUI_LIB;
+procedure igSetNextItemWidth( item_width : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowBgAlpha( alpha : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowClass( window_class : PImGuiWindowClass ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowCollapsed( collapsed : Boolean; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowContentSize( size : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowDockID( dock_id : ImGuiID; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowFocus( ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowPos( pos : ImVec2; cond : ImGuiCond; pivot : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowScroll( scroll : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowSize( size : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowSizeConstraints( size_min : ImVec2; size_max : ImVec2; custom_callback : ImGuiSizeCallback; custom_callback_data : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igSetNextWindowViewport( viewport_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollFromPosX_Float( local_x : Single; center_x_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollFromPosX_WindowPtr( window : PImGuiWindow; local_x : Single; center_x_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollFromPosY_Float( local_y : Single; center_y_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollFromPosY_WindowPtr( window : PImGuiWindow; local_y : Single; center_y_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollHereX( center_x_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollHereY( center_y_ratio : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollX_Float( scroll_x : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollX_WindowPtr( window : PImGuiWindow; scroll_x : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollY_Float( scroll_y : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetScrollY_WindowPtr( window : PImGuiWindow; scroll_y : Single ); cdecl; external CIMGUI_LIB;
+function igSetShortcutRouting( key_chord : ImGuiKeyChord; owner_id : ImGuiID; flags : ImGuiInputFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igSetStateStorage( storage : PImGuiStorage ); cdecl; external CIMGUI_LIB;
+procedure igSetTabItemClosed( tab_or_docked_window_label : PChar ); cdecl; external CIMGUI_LIB;
+procedure igSetTooltip( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igSetTooltipV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowClipRectBeforeSetChannel( window : PImGuiWindow; clip_rect : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowCollapsed_Bool( collapsed : Boolean; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowCollapsed_Str( name : PChar; collapsed : Boolean; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowCollapsed_WindowPtr( window : PImGuiWindow; collapsed : Boolean; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowDock( window : PImGuiWindow; dock_id : ImGuiID; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowFocus_Nil( ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowFocus_Str( name : PChar ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowFontScale( scale : Single ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowHiddendAndSkipItemsForCurrentFrame( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowHitTestHole( window : PImGuiWindow; pos : ImVec2; size : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowPos_Vec2( pos : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowPos_Str( name : PChar; pos : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowPos_WindowPtr( window : PImGuiWindow; pos : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowSize_Vec2( size : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowSize_Str( name : PChar; size : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowSize_WindowPtr( window : PImGuiWindow; size : ImVec2; cond : ImGuiCond ); cdecl; external CIMGUI_LIB;
+procedure igSetWindowViewport( window : PImGuiWindow; viewport : PImGuiViewportP ); cdecl; external CIMGUI_LIB;
+procedure igShadeVertsLinearColorGradientKeepAlpha( draw_list : PImDrawList; vert_start_idx : Integer; vert_end_idx : Integer; gradient_p0 : ImVec2; gradient_p1 : ImVec2; col0 : ImU32; col1 : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igShadeVertsLinearUV( draw_list : PImDrawList; vert_start_idx : Integer; vert_end_idx : Integer; a : ImVec2; b : ImVec2; uv_a : ImVec2; uv_b : ImVec2; clamp : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igShadeVertsTransformPos( draw_list : PImDrawList; vert_start_idx : Integer; vert_end_idx : Integer; pivot_in : ImVec2; cos_a : Single; sin_a : Single; pivot_out : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igShortcut( key_chord : ImGuiKeyChord; owner_id : ImGuiID; flags : ImGuiInputFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igShowAboutWindow( p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igShowDebugLogWindow( p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igShowDemoWindow( p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igShowFontAtlas( atlas : PImFontAtlas ); cdecl; external CIMGUI_LIB;
+procedure igShowFontSelector( label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igShowIDStackToolWindow( p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igShowMetricsWindow( p_open : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igShowStyleEditor( ref : PImGuiStyle ); cdecl; external CIMGUI_LIB;
+function igShowStyleSelector( label_ : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igShowUserGuide( ); cdecl; external CIMGUI_LIB;
+procedure igShrinkWidths( items : PImGuiShrinkWidthItem; count : Integer; width_excess : Single ); cdecl; external CIMGUI_LIB;
+procedure igShutdown( ); cdecl; external CIMGUI_LIB;
+function igSliderAngle( label_ : PChar; v_rad : PSingle; v_degrees_min : Single; v_degrees_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderBehavior( bb : ImRect; id : ImGuiID; data_type : ImGuiDataType; p_v : Pointer; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags; out_grab_bb : PImRect ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderFloat( label_ : PChar; v : PSingle; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderFloat2( label_ : PChar; v : PSingle; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderFloat3( label_ : PChar; v : PSingle; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderFloat4( label_ : PChar; v : PSingle; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderInt( label_ : PChar; v : PInteger; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderInt2( label_ : PChar; v : PInteger; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderInt3( label_ : PChar; v : PInteger; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderInt4( label_ : PChar; v : PInteger; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderScalar( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSliderScalarN( label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; components : Integer; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igSmallButton( label_ : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igSpacing( ); cdecl; external CIMGUI_LIB;
+function igSplitterBehavior( bb : ImRect; id : ImGuiID; axis : ImGuiAxis; size1 : PSingle; size2 : PSingle; min_size1 : Single; min_size2 : Single; hover_extend : Single; hover_visibility_delay : Single; bg_col : ImU32 ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igStartMouseMovingWindow( window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igStartMouseMovingWindowOrNode( window : PImGuiWindow; node : PImGuiDockNode; undock : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igStyleColorsClassic( dst : PImGuiStyle ); cdecl; external CIMGUI_LIB;
+procedure igStyleColorsDark( dst : PImGuiStyle ); cdecl; external CIMGUI_LIB;
+procedure igStyleColorsLight( dst : PImGuiStyle ); cdecl; external CIMGUI_LIB;
+procedure igTabBarAddTab( tab_bar : PImGuiTabBar; tab_flags : ImGuiTabItemFlags; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+procedure igTabBarCloseTab( tab_bar : PImGuiTabBar; tab : PImGuiTabItem ); cdecl; external CIMGUI_LIB;
+function igTabBarFindMostRecentlySelectedTabForActiveWindow( tab_bar : PImGuiTabBar ) : PImGuiTabItem; cdecl; external CIMGUI_LIB;
+function igTabBarFindTabByID( tab_bar : PImGuiTabBar; tab_id : ImGuiID ) : PImGuiTabItem; cdecl; external CIMGUI_LIB;
+function igTabBarFindTabByOrder( tab_bar : PImGuiTabBar; order : Integer ) : PImGuiTabItem; cdecl; external CIMGUI_LIB;
+function igTabBarGetCurrentTab( tab_bar : PImGuiTabBar ) : PImGuiTabItem; cdecl; external CIMGUI_LIB;
+function igTabBarGetTabName( tab_bar : PImGuiTabBar; tab : PImGuiTabItem ) : PChar; cdecl; external CIMGUI_LIB;
+function igTabBarGetTabOrder( tab_bar : PImGuiTabBar; tab : PImGuiTabItem ) : Integer; cdecl; external CIMGUI_LIB;
+function igTabBarProcessReorder( tab_bar : PImGuiTabBar ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTabBarQueueFocus( tab_bar : PImGuiTabBar; tab : PImGuiTabItem ); cdecl; external CIMGUI_LIB;
+procedure igTabBarQueueReorder( tab_bar : PImGuiTabBar; tab : PImGuiTabItem; offset : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTabBarQueueReorderFromMousePos( tab_bar : PImGuiTabBar; tab : PImGuiTabItem; mouse_pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igTabBarRemoveTab( tab_bar : PImGuiTabBar; tab_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igTabItemBackground( draw_list : PImDrawList; bb : ImRect; flags : ImGuiTabItemFlags; col : ImU32 ); cdecl; external CIMGUI_LIB;
+function igTabItemButton( label_ : PChar; flags : ImGuiTabItemFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTabItemCalcSize_Str( pOut : PImVec2; label_ : PChar; has_close_button_or_unsaved_marker : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igTabItemCalcSize_WindowPtr( pOut : PImVec2; window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function igTabItemEx( tab_bar : PImGuiTabBar; label_ : PChar; p_open : PBoolean; flags : ImGuiTabItemFlags; docked_window : PImGuiWindow ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTabItemLabelAndCloseButton( draw_list : PImDrawList; bb : ImRect; flags : ImGuiTabItemFlags; frame_padding : ImVec2; label_ : PChar; tab_id : ImGuiID; close_button_id : ImGuiID; is_contents_visible : Boolean; out_just_closed : PBoolean; out_text_clipped : PBoolean ); cdecl; external CIMGUI_LIB;
+procedure igTableAngledHeadersRow( ); cdecl; external CIMGUI_LIB;
+procedure igTableAngledHeadersRowEx( angle : Single; label_width : Single ); cdecl; external CIMGUI_LIB;
+procedure igTableBeginApplyRequests( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableBeginCell( table : PImGuiTable; column_n : Integer ); cdecl; external CIMGUI_LIB;
+function igTableBeginContextMenuPopup( table : PImGuiTable ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTableBeginInitMemory( table : PImGuiTable; columns_count : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTableBeginRow( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableDrawBorders( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableDrawContextMenu( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableEndCell( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableEndRow( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+function igTableFindByID( id : ImGuiID ) : PImGuiTable; cdecl; external CIMGUI_LIB;
+procedure igTableFixColumnSortDirection( table : PImGuiTable; column : PImGuiTableColumn ); cdecl; external CIMGUI_LIB;
+procedure igTableGcCompactSettings( ); cdecl; external CIMGUI_LIB;
+procedure igTableGcCompactTransientBuffers_TablePtr( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableGcCompactTransientBuffers_TableTempDataPtr( table : PImGuiTableTempData ); cdecl; external CIMGUI_LIB;
+function igTableGetBoundSettings( table : PImGuiTable ) : PImGuiTableSettings; cdecl; external CIMGUI_LIB;
+procedure igTableGetCellBgRect( pOut : PImRect; table : PImGuiTable; column_n : Integer ); cdecl; external CIMGUI_LIB;
+function igTableGetColumnCount( ) : Integer; cdecl; external CIMGUI_LIB;
+function igTableGetColumnFlags( column_n : Integer ) : ImGuiTableColumnFlags; cdecl; external CIMGUI_LIB;
+function igTableGetColumnIndex( ) : Integer; cdecl; external CIMGUI_LIB;
+function igTableGetColumnName_Int( column_n : Integer ) : PChar; cdecl; external CIMGUI_LIB;
+function igTableGetColumnName_TablePtr( table : PImGuiTable; column_n : Integer ) : PChar; cdecl; external CIMGUI_LIB;
+function igTableGetColumnNextSortDirection( column : PImGuiTableColumn ) : ImGuiSortDirection; cdecl; external CIMGUI_LIB;
+function igTableGetColumnResizeID( table : PImGuiTable; column_n : Integer; instance_no : Integer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igTableGetColumnWidthAuto( table : PImGuiTable; column : PImGuiTableColumn ) : Single; cdecl; external CIMGUI_LIB;
+function igTableGetHeaderAngledMaxLabelWidth( ) : Single; cdecl; external CIMGUI_LIB;
+function igTableGetHeaderRowHeight( ) : Single; cdecl; external CIMGUI_LIB;
+function igTableGetHoveredColumn( ) : Integer; cdecl; external CIMGUI_LIB;
+function igTableGetHoveredRow( ) : Integer; cdecl; external CIMGUI_LIB;
+function igTableGetInstanceData( table : PImGuiTable; instance_no : Integer ) : PImGuiTableInstanceData; cdecl; external CIMGUI_LIB;
+function igTableGetInstanceID( table : PImGuiTable; instance_no : Integer ) : ImGuiID; cdecl; external CIMGUI_LIB;
+function igTableGetMaxColumnWidth( table : PImGuiTable; column_n : Integer ) : Single; cdecl; external CIMGUI_LIB;
+function igTableGetRowIndex( ) : Integer; cdecl; external CIMGUI_LIB;
+function igTableGetSortSpecs( ) : PImGuiTableSortSpecs; cdecl; external CIMGUI_LIB;
+procedure igTableHeader( label_ : PChar ); cdecl; external CIMGUI_LIB;
+procedure igTableHeadersRow( ); cdecl; external CIMGUI_LIB;
+procedure igTableLoadSettings( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableMergeDrawChannels( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+function igTableNextColumn( ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTableNextRow( row_flags : ImGuiTableRowFlags; min_row_height : Single ); cdecl; external CIMGUI_LIB;
+procedure igTableOpenContextMenu( column_n : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTablePopBackgroundChannel( ); cdecl; external CIMGUI_LIB;
+procedure igTablePushBackgroundChannel( ); cdecl; external CIMGUI_LIB;
+procedure igTableRemove( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableResetSettings( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableSaveSettings( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableSetBgColor( target : ImGuiTableBgTarget; color : ImU32; column_n : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTableSetColumnEnabled( column_n : Integer; v : Boolean ); cdecl; external CIMGUI_LIB;
+function igTableSetColumnIndex( column_n : Integer ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTableSetColumnSortDirection( column_n : Integer; sort_direction : ImGuiSortDirection; append_to_sort_specs : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igTableSetColumnWidth( column_n : Integer; width : Single ); cdecl; external CIMGUI_LIB;
+procedure igTableSetColumnWidthAutoAll( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableSetColumnWidthAutoSingle( table : PImGuiTable; column_n : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTableSettingsAddSettingsHandler( ); cdecl; external CIMGUI_LIB;
+function igTableSettingsCreate( id : ImGuiID; columns_count : Integer ) : PImGuiTableSettings; cdecl; external CIMGUI_LIB;
+function igTableSettingsFindByID( id : ImGuiID ) : PImGuiTableSettings; cdecl; external CIMGUI_LIB;
+procedure igTableSetupColumn( label_ : PChar; flags : ImGuiTableColumnFlags; init_width_or_weight : Single; user_id : ImGuiID ); cdecl; external CIMGUI_LIB;
+procedure igTableSetupDrawChannels( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableSetupScrollFreeze( cols : Integer; rows : Integer ); cdecl; external CIMGUI_LIB;
+procedure igTableSortSpecsBuild( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableSortSpecsSanitize( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableUpdateBorders( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableUpdateColumnsWeightFromWidth( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTableUpdateLayout( table : PImGuiTable ); cdecl; external CIMGUI_LIB;
+procedure igTeleportMousePos( pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igTempInputIsActive( id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTempInputScalar( bb : ImRect; id : ImGuiID; label_ : PChar; data_type : ImGuiDataType; p_data : Pointer; format : PChar; p_clamp_min : Pointer; p_clamp_max : Pointer ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTempInputText( bb : ImRect; id : ImGuiID; label_ : PChar; buf : PChar; buf_size : Integer; flags : ImGuiInputTextFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTestKeyOwner( key : ImGuiKey; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTestShortcutRouting( key_chord : ImGuiKeyChord; owner_id : ImGuiID ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igText( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextColored( col : ImVec4; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextColoredV( col : ImVec4; fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextDisabled( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextDisabledV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextEx( text : PChar; text_end : PChar; flags : ImGuiTextFlags ); cdecl; external CIMGUI_LIB;
+procedure igTextUnformatted( text : PChar; text_end : PChar ); cdecl; external CIMGUI_LIB;
+procedure igTextV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextWrapped( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTextWrappedV( fmt : PChar; args : array of const ); cdecl; external CIMGUI_LIB;
+procedure igTranslateWindowsInViewport( viewport : PImGuiViewportP; old_pos : ImVec2; new_pos : ImVec2 ); cdecl; external CIMGUI_LIB;
+function igTreeNode_Str( label_ : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNode_StrStr( str_id : PChar; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNode_Ptr( ptr_id : Pointer; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeBehavior( id : ImGuiID; flags : ImGuiTreeNodeFlags; label_ : PChar; label_end : PChar ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeEx_Str( label_ : PChar; flags : ImGuiTreeNodeFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeEx_StrStr( str_id : PChar; flags : ImGuiTreeNodeFlags; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeEx_Ptr( ptr_id : Pointer; flags : ImGuiTreeNodeFlags; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeExV_Str( str_id : PChar; flags : ImGuiTreeNodeFlags; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeExV_Ptr( ptr_id : Pointer; flags : ImGuiTreeNodeFlags; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTreeNodeSetOpen( id : ImGuiID; open : Boolean ); cdecl; external CIMGUI_LIB;
+function igTreeNodeUpdateNextOpen( id : ImGuiID; flags : ImGuiTreeNodeFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeV_Str( str_id : PChar; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+function igTreeNodeV_Ptr( ptr_id : Pointer; fmt : PChar; args : array of const ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igTreePop( ); cdecl; external CIMGUI_LIB;
+procedure igTreePush_Str( str_id : PChar ); cdecl; external CIMGUI_LIB;
+procedure igTreePush_Ptr( ptr_id : Pointer ); cdecl; external CIMGUI_LIB;
+procedure igTreePushOverrideID( id : ImGuiID ); cdecl; external CIMGUI_LIB;
+function igTypingSelectFindBestLeadingMatch( req : PImGuiTypingSelectRequest; items_count : Integer; get_item_name_func : TImGuiComboItemsGetterFunc ;user_data : Pointer ) : Integer; cdecl; external CIMGUI_LIB;
+function igTypingSelectFindMatch( req : PImGuiTypingSelectRequest; items_count : Integer; get_item_name_func : TImGuiComboItemsGetterFunc ;user_data : Pointer; nav_item_idx : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+function igTypingSelectFindNextSingleCharMatch( req : PImGuiTypingSelectRequest; items_count : Integer; get_item_name_func : TImGuiComboItemsGetterFunc ;user_data : Pointer; nav_item_idx : Integer ) : Integer; cdecl; external CIMGUI_LIB;
+procedure igUnindent( indent_w : Single ); cdecl; external CIMGUI_LIB;
+procedure igUpdateHoveredWindowAndCaptureFlags( ); cdecl; external CIMGUI_LIB;
+procedure igUpdateInputEvents( trickle_fast_inputs : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igUpdateMouseMovingWindowEndFrame( ); cdecl; external CIMGUI_LIB;
+procedure igUpdateMouseMovingWindowNewFrame( ); cdecl; external CIMGUI_LIB;
+procedure igUpdatePlatformWindows( ); cdecl; external CIMGUI_LIB;
+procedure igUpdateWindowParentAndRootLinks( window : PImGuiWindow; flags : ImGuiWindowFlags; parent_window : PImGuiWindow ); cdecl; external CIMGUI_LIB;
+function igVSliderFloat( label_ : PChar; size : ImVec2; v : PSingle; v_min : Single; v_max : Single; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igVSliderInt( label_ : PChar; size : ImVec2; v : PInteger; v_min : Integer; v_max : Integer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+function igVSliderScalar( label_ : PChar; size : ImVec2; data_type : ImGuiDataType; p_data : Pointer; p_min : Pointer; p_max : Pointer; format : PChar; flags : ImGuiSliderFlags ) : Boolean; cdecl; external CIMGUI_LIB;
+procedure igValue_Bool( prefix : PChar; b : Boolean ); cdecl; external CIMGUI_LIB;
+procedure igValue_Int( prefix : PChar; v : Integer ); cdecl; external CIMGUI_LIB;
+procedure igValue_Uint( prefix : PChar; v : ImU32 ); cdecl; external CIMGUI_LIB;
+procedure igValue_Float( prefix : PChar; v : Single; float_format : PChar ); cdecl; external CIMGUI_LIB;
+procedure igWindowPosRelToAbs( pOut : PImVec2; window : PImGuiWindow; p : ImVec2 ); cdecl; external CIMGUI_LIB;
+procedure igWindowRectAbsToRel( pOut : PImRect; window : PImGuiWindow; r : ImRect ); cdecl; external CIMGUI_LIB;
+procedure igWindowRectRelToAbs( pOut : PImRect; window : PImGuiWindow; r : ImRect ); cdecl; external CIMGUI_LIB;
+
+// From mORMot2 "mormot.lib.static.pas"
+type
+  /// define SetFpuFlags/ResetFpuFlags context
+  // - external libraries coded in C are likely to disable FPU exceptions,
+  // whereas Delphi/FPC code expects FPU exceptions to be raised ASAP
+  // - ffLibrary is used before calling an external library
+  // - ffPascal before calling pascal code from an external library callback
+  TFpuFlags = (
+    ffLibrary,
+    ffPascal);
+
+{$ifdef CPUINTEL}
+var
+  /// direct efficient x87 / SSE2 FPU flags for rounding and exceptions
+  _FPUFLAGS: array[TFpuFlags] of cardinal = (
+    {$ifdef CPU64}
+      $1FA0, $1920);
+    {$else}
+      $137F, $1372);
+    {$endif CPU64}
+
+{$else}
+var
+  /// on non Intel/AMD, use slower but cross-platform RTL Math unit
+  // - defined as var for runtime customization
+  _FPUFLAGS: array[TFpuFlags] of TFPUExceptionMask = (
+    // ffLibrary
+    [exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision],
+    // ffPascal
+    [exDenormalized, exUnderflow, exPrecision]);
+
+{$endif CPUINTEL}
+
+
+/// mask/unmask all FPU exceptions, according to the running CPU
+// - returns the previous exception flags, for ResetFpuFlags() call
+// - x87 flags are $1372 for pascal, or $137F for library
+// - sse flags are $1920 for pascal, or $1FA0 for library
+// - on non Intel/AMD CPUs, will use TFPUExceptionMask from the RTL Math unit
+// - do nothing and return -1 if the supplied flags are the one already set
+function SetFpuFlags(flags: TFpuFlags = ffLibrary): cardinal;
+
+/// restore the FPU exceptions flags as overriden by SetFpuFlags()
+// - do nothing if the saved flags are the one already set, i.e. -1
+procedure ResetFpuFlags(saved: cardinal);
+
+implementation
+  uses
+    math;
+
+{ ********************** Cross-Platform FPU Exceptions Masking }
+const
+  _FPUFLAGSIDEM = cardinal(-1); // fake value used for faster nested calls
+
+function _GetFlags: cardinal;
+  {$ifdef HASINLINE} inline; {$endif}
+begin
+  {$ifdef CPUINTEL}
+    {$ifdef CPU64}
+    result := GetMXCSR;
+    {$else}
+    result := Get8087CW;
+    {$endif CPU64}
+  {$else}
+    result := cardinal(GetExceptionMask);
+  {$endif CPUINTEL}
+end;
+
+procedure _SetFlags(flags: cardinal);
+  {$ifdef HASINLINE} inline; {$endif}
+begin
+  {$ifdef CPUINTEL}
+    {$ifdef CPU64}
+    SetMXCSR(flags);
+    {$else}
+    Set8087CW(flags);
+    {$endif CPU64}
+  {$else}
+    SetExceptionMask(TFPUExceptionMask(flags));
+  {$endif CPUINTEL}
+end;
+
+function SetFpuFlags(flags: TFpuFlags): cardinal;
+var
+  new: cardinal;
+begin
+  result := _GetFlags;
+  new := cardinal(_FPUFLAGS[flags]);
+  if new <> result then
+    _SetFlags(new)
+  else
+    result := _FPUFLAGSIDEM;
+end;
+
+procedure ResetFpuFlags(saved: cardinal);
+begin
+  if saved <> _FPUFLAGSIDEM then
+    _SetFlags(saved);
+end;
+      
+end.  

+ 2646 - 0
src/PasImGui.Enums.pas

@@ -0,0 +1,2646 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+unit PasImGui.Enums;
+
+{$IfDef FPC}
+  {$mode objfpc}{$H+}
+  {$PACKRECORDS C}
+  {$PackEnum 4}
+  {$WARN 3031 off : Values in enumeration types have to be ascending}
+{$EndIf}
+
+interface
+
+Type
+  ImGuiWindowFlags = (
+    ImGuiWindowFlags_None = 0,
+    ImGuiWindowFlags_NoTitleBar = 1 shl 0,
+    ImGuiWindowFlags_NoResize = 1 shl 1,
+    ImGuiWindowFlags_NoMove = 1 shl 2,
+    ImGuiWindowFlags_NoScrollbar = 1 shl 3,
+    ImGuiWindowFlags_NoScrollWithMouse = 1 shl 4,
+    ImGuiWindowFlags_NoCollapse = 1 shl 5,
+    ImGuiWindowFlags_AlwaysAutoResize = 1 shl 6,
+    ImGuiWindowFlags_NoBackground = 1 shl 7,
+    ImGuiWindowFlags_NoSavedSettings = 1 shl 8,
+    ImGuiWindowFlags_NoMouseInputs = 1 shl 9,
+    ImGuiWindowFlags_MenuBar = 1 shl 10,
+    ImGuiWindowFlags_HorizontalScrollbar = 1 shl 11,
+    ImGuiWindowFlags_NoFocusOnAppearing = 1 shl 12,
+    ImGuiWindowFlags_NoBringToFrontOnFocus = 1 shl 13,
+    ImGuiWindowFlags_AlwaysVerticalScrollbar = 1 shl 14,
+    ImGuiWindowFlags_AlwaysHorizontalScrollbar = 1shl 15,
+    ImGuiWindowFlags_NoNavInputs = 1 shl 16,
+    ImGuiWindowFlags_NoNavFocus = 1 shl 17,
+    ImGuiWindowFlags_UnsavedDocument = 1 shl 18,
+    ImGuiWindowFlags_NoDocking = 1 shl 19,
+    ImGuiWindowFlags_NoNav = Ord(ImGuiWindowFlags_NoNavInputs) or Ord(ImGuiWindowFlags_NoNavFocus),
+    ImGuiWindowFlags_NoDecoration = Ord(ImGuiWindowFlags_NoTitleBar) or Ord(ImGuiWindowFlags_NoResize) or Ord(ImGuiWindowFlags_NoScrollbar) or Ord(ImGuiWindowFlags_NoCollapse),
+    ImGuiWindowFlags_NoInputs = Ord(ImGuiWindowFlags_NoMouseInputs) or Ord(ImGuiWindowFlags_NoNavInputs) or Ord(ImGuiWindowFlags_NoNavFocus),
+    ImGuiWindowFlags_NavFlattened = 1 shl 23,
+    ImGuiWindowFlags_ChildWindow = 1 shl 24,
+    ImGuiWindowFlags_Tooltip = 1 shl 25,
+    ImGuiWindowFlags_Popup = 1 shl 26,
+    ImGuiWindowFlags_Modal = 1 shl 27,
+    ImGuiWindowFlags_ChildMenu = 1 shl 28,
+    ImGuiWindowFlags_DockNodeHost = 1 shl 29
+  );
+
+  ImGuiWindowDockStyleCol = (
+    ImGuiWindowDockStyleCol_Text = 0,
+    ImGuiWindowDockStyleCol_Tab = 1,
+    ImGuiWindowDockStyleCol_TabHovered = 2,
+    ImGuiWindowDockStyleCol_TabActive = 3,
+    ImGuiWindowDockStyleCol_TabUnfocused = 4,
+    ImGuiWindowDockStyleCol_TabUnfocusedActive = 5,
+    ImGuiWindowDockStyleCol_COUNT = 6
+  );
+
+  ImGuiViewportFlags = (
+    ImGuiViewportFlags_None = 0,
+    ImGuiViewportFlags_IsPlatformWindow = 1 shl 0,
+    ImGuiViewportFlags_IsPlatformMonitor = 1 shl 1,
+    ImGuiViewportFlags_OwnedByApp = 1 shl 2,
+    ImGuiViewportFlags_NoDecoration = 1 shl 3,
+    ImGuiViewportFlags_NoTaskBarIcon = 1 shl 4,
+    ImGuiViewportFlags_NoFocusOnAppearing = 1 shl 5,
+    ImGuiViewportFlags_NoFocusOnClick = 1 shl 6,
+    ImGuiViewportFlags_NoInputs = 1 shl 7,
+    ImGuiViewportFlags_NoRendererClear = 1 shl 8,
+    ImGuiViewportFlags_NoAutoMerge = 1 shl 9,
+    ImGuiViewportFlags_TopMost = 1 shl 10,
+    ImGuiViewportFlags_CanHostOtherWindows = 1 shl 11,
+    ImGuiViewportFlags_IsMinimized = 1 shl 12,
+    ImGuiViewportFlags_IsFocused = 1 shl 13
+  );
+
+  ImGuiTypingSelectFlags = (
+    ImGuiTypingSelectFlags_None = 0,
+    ImGuiTypingSelectFlags_AllowBackspace = 1 shl 0,
+    ImGuiTypingSelectFlags_AllowSingleCharMode = 1 shl 1
+  );
+
+  ImGuiTreeNodeFlags = (
+    ImGuiTreeNodeFlags_None = 0,
+    ImGuiTreeNodeFlags_Selected = 1 shl 0,
+    ImGuiTreeNodeFlags_Framed = 1 shl 1,
+    ImGuiTreeNodeFlags_AllowOverlap = 1 shl 2,
+    ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 shl 3,
+    ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 shl 4,
+    ImGuiTreeNodeFlags_DefaultOpen = 1 shl 5,
+    ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 shl 6,
+    ImGuiTreeNodeFlags_OpenOnArrow = 1 shl 7,
+    ImGuiTreeNodeFlags_Leaf = 1 shl 8,
+    ImGuiTreeNodeFlags_Bullet = 1 shl 9,
+    ImGuiTreeNodeFlags_FramePadding = 1 shl 10,
+    ImGuiTreeNodeFlags_SpanAvailWidth = 1 shl 11,
+    ImGuiTreeNodeFlags_SpanFullWidth = 1 shl 12,
+    ImGuiTreeNodeFlags_SpanAllColumns = 1 shl 13,
+    ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 shl 14,
+    ImGuiTreeNodeFlags_CollapsingHeader = Ord(ImGuiTreeNodeFlags_Framed) or Ord(ImGuiTreeNodeFlags_NoTreePushOnOpen) or Ord(ImGuiTreeNodeFlags_NoAutoOpenOnLog)
+  );
+
+  ImGuiTreeNodeFlagsPrivate = (
+    ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 shl 20,
+    ImGuiTreeNodeFlags_UpsideDownArrow = 1 shl 21
+  );
+
+  ImGuiTooltipFlags = (
+    ImGuiTooltipFlags_None = 0,
+    ImGuiTooltipFlags_OverridePrevious = 1 shl 1
+  );
+
+  ImGuiTextFlags = (
+    ImGuiTextFlags_None = 0,
+    ImGuiTextFlags_NoWidthForLargeClippedText = 1 shl 0
+  );
+
+  ImGuiTableRowFlags = (
+    ImGuiTableRowFlags_None = 0,
+    ImGuiTableRowFlags_Headers = 1 shl 0
+  );
+
+  ImGuiTableFlags = (
+    ImGuiTableFlags_None = 0,
+    ImGuiTableFlags_Resizable = 1 shl 0,
+    ImGuiTableFlags_Reorderable = 1 shl 1,
+    ImGuiTableFlags_Hideable = 1 shl 2,
+    ImGuiTableFlags_Sortable = 1 shl 3,
+    ImGuiTableFlags_NoSavedSettings = 1 shl 4,
+    ImGuiTableFlags_ContextMenuInBody = 1 shl 5,
+    ImGuiTableFlags_RowBg = 1 shl 6,
+    ImGuiTableFlags_BordersInnerH = 1 shl 7,
+    ImGuiTableFlags_BordersOuterH = 1 shl 8,
+    ImGuiTableFlags_BordersInnerV = 1 shl 9,
+    ImGuiTableFlags_BordersOuterV = 1 shl 10,
+    ImGuiTableFlags_BordersH = Ord(ImGuiTableFlags_BordersInnerH) or Ord(ImGuiTableFlags_BordersOuterH),
+    ImGuiTableFlags_BordersV = Ord(ImGuiTableFlags_BordersInnerV) or Ord(ImGuiTableFlags_BordersOuterV),
+    ImGuiTableFlags_BordersInner = Ord(ImGuiTableFlags_BordersInnerV) or Ord(ImGuiTableFlags_BordersInnerH),
+    ImGuiTableFlags_BordersOuter = Ord(ImGuiTableFlags_BordersOuterV) or Ord(ImGuiTableFlags_BordersOuterH),
+    ImGuiTableFlags_Borders = Ord(ImGuiTableFlags_BordersInner) or Ord(ImGuiTableFlags_BordersOuter),
+    ImGuiTableFlags_NoBordersInBody = 1 shl 11,
+    ImGuiTableFlags_NoBordersInBodyUntilResize = 1 shl 12,
+    ImGuiTableFlags_SizingFixedFit = 1 shl 13,
+    ImGuiTableFlags_SizingFixedSame = 2 shl 13,
+    ImGuiTableFlags_SizingStretchProp = 3 shl 13,
+    ImGuiTableFlags_SizingStretchSame = 4 shl 13,
+    ImGuiTableFlags_NoHostExtendX = 1 shl 16,
+    ImGuiTableFlags_NoHostExtendY = 1 shl 17,
+    ImGuiTableFlags_NoKeepColumnsVisible = 1 shl 18,
+    ImGuiTableFlags_PreciseWidths = 1 shl 19,
+    ImGuiTableFlags_NoClip = 1 shl 20,
+    ImGuiTableFlags_PadOuterX = 1 shl 21,
+    ImGuiTableFlags_NoPadOuterX = 1 shl 22,
+    ImGuiTableFlags_NoPadInnerX = 1 shl 23,
+    ImGuiTableFlags_ScrollX = 1 shl 24,
+    ImGuiTableFlags_ScrollY = 1 shl 25,
+    ImGuiTableFlags_SortMulti = 1 shl 26,
+    ImGuiTableFlags_SortTristate = 1 shl 27,
+    ImGuiTableFlags_HighlightHoveredColumn = 1 shl 28,
+    ImGuiTableFlags_SizingMask_ = Ord(ImGuiTableFlags_SizingFixedFit) or Ord(ImGuiTableFlags_SizingFixedSame) or Ord(ImGuiTableFlags_SizingStretchProp) or Ord(ImGuiTableFlags_SizingStretchSame)
+  );
+
+  ImGuiTableColumnFlags = (
+    ImGuiTableColumnFlags_None = 0,
+    ImGuiTableColumnFlags_Disabled = 1 shl 0,
+    ImGuiTableColumnFlags_DefaultHide = 1 shl 1,
+    ImGuiTableColumnFlags_DefaultSort = 1 shl 2,
+    ImGuiTableColumnFlags_WidthStretch = 1 shl 3,
+    ImGuiTableColumnFlags_WidthFixed = 1 shl 4,
+    ImGuiTableColumnFlags_NoResize = 1 shl 5,
+    ImGuiTableColumnFlags_NoReorder = 1 shl 6,
+    ImGuiTableColumnFlags_NoHide = 1 shl 7,
+    ImGuiTableColumnFlags_NoClip = 1 shl 8,
+    ImGuiTableColumnFlags_NoSort = 1 shl 9,
+    ImGuiTableColumnFlags_NoSortAscending = 1 shl 10,
+    ImGuiTableColumnFlags_NoSortDescending = 1 shl 11,
+    ImGuiTableColumnFlags_NoHeaderLabel = 1 shl 12,
+    ImGuiTableColumnFlags_NoHeaderWidth = 1 shl 13,
+    ImGuiTableColumnFlags_PreferSortAscending = 1 shl 14,
+    ImGuiTableColumnFlags_PreferSortDescending = 1 shl 15,
+    ImGuiTableColumnFlags_IndentEnable = 1 shl 16,
+    ImGuiTableColumnFlags_IndentDisable = 1 shl 17,
+    ImGuiTableColumnFlags_AngledHeader = 1 shl 18,
+    ImGuiTableColumnFlags_IsEnabled = 1 shl 24,
+    ImGuiTableColumnFlags_IsVisible = 1 shl 25,
+    ImGuiTableColumnFlags_IsSorted = 1 shl 26,
+    ImGuiTableColumnFlags_IsHovered = 1 shl 27,
+    ImGuiTableColumnFlags_WidthMask_ = Ord(ImGuiTableColumnFlags_WidthStretch) or Ord(ImGuiTableColumnFlags_WidthFixed),
+    ImGuiTableColumnFlags_IndentMask_ = Ord(ImGuiTableColumnFlags_IndentEnable) or Ord(ImGuiTableColumnFlags_IndentDisable),
+    ImGuiTableColumnFlags_StatusMask_ = Ord(ImGuiTableColumnFlags_IsEnabled) or Ord(ImGuiTableColumnFlags_IsVisible) or Ord(ImGuiTableColumnFlags_IsSorted) or Ord(ImGuiTableColumnFlags_IsHovered),
+    ImGuiTableColumnFlags_NoDirectResize_ = 1 shl 30
+  );
+
+  ImGuiTableBgTarget = (
+    ImGuiTableBgTarget_None = 0,
+    ImGuiTableBgTarget_RowBg0 = 1,
+    ImGuiTableBgTarget_RowBg1 = 2,
+    ImGuiTableBgTarget_CellBg = 3
+  );
+
+  ImGuiTabItemFlags = (
+    ImGuiTabItemFlags_None = 0,
+    ImGuiTabItemFlags_UnsavedDocument = 1 shl 0,
+    ImGuiTabItemFlags_SetSelected = 1 shl 1,
+    ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 shl 2,
+    ImGuiTabItemFlags_NoPushId = 1 shl 3,
+    ImGuiTabItemFlags_NoTooltip = 1 shl 4,
+    ImGuiTabItemFlags_NoReorder = 1 shl 5,
+    ImGuiTabItemFlags_Leading = 1 shl 6,
+    ImGuiTabItemFlags_Trailing = 1 shl 7
+  );
+
+  ImGuiTabItemFlagsPrivate = (
+    ImGuiTabItemFlags_SectionMask_ = Ord(ImGuiTabItemFlags_Leading) or Ord(ImGuiTabItemFlags_Trailing),
+    ImGuiTabItemFlags_NoCloseButton = 1 shl 20,
+    ImGuiTabItemFlags_Button = 1 shl 21,
+    ImGuiTabItemFlags_Unsorted = 1 shl 22
+  );
+
+  ImGuiTabBarFlags = (
+    ImGuiTabBarFlags_None = 0,
+    ImGuiTabBarFlags_Reorderable = 1 shl 0,
+    ImGuiTabBarFlags_AutoSelectNewTabs = 1 shl 1,
+    ImGuiTabBarFlags_TabListPopupButton = 1 shl 2,
+    ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 shl 3,
+    ImGuiTabBarFlags_NoTabListScrollingButtons = 1 shl 4,
+    ImGuiTabBarFlags_NoTooltip = 1 shl 5,
+    ImGuiTabBarFlags_FittingPolicyResizeDown = 1 shl 6,
+    ImGuiTabBarFlags_FittingPolicyScroll = 1 shl 7,
+    ImGuiTabBarFlags_FittingPolicyMask_ = Ord(ImGuiTabBarFlags_FittingPolicyResizeDown) or Ord(ImGuiTabBarFlags_FittingPolicyScroll),
+    ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown
+  );
+
+  ImGuiTabBarFlagsPrivate = (
+    ImGuiTabBarFlags_DockNode = 1 shl 20,
+    ImGuiTabBarFlags_IsFocused = 1 shl 21,
+    ImGuiTabBarFlags_SaveSettings = 1 shl 22
+  );
+
+  ImGuiStyleVar = (
+    ImGuiStyleVar_Alpha = 0,
+    ImGuiStyleVar_DisabledAlpha = 1,
+    ImGuiStyleVar_WindowPadding = 2,
+    ImGuiStyleVar_WindowRounding = 3,
+    ImGuiStyleVar_WindowBorderSize = 4,
+    ImGuiStyleVar_WindowMinSize = 5,
+    ImGuiStyleVar_WindowTitleAlign = 6,
+    ImGuiStyleVar_ChildRounding = 7,
+    ImGuiStyleVar_ChildBorderSize = 8,
+    ImGuiStyleVar_PopupRounding = 9,
+    ImGuiStyleVar_PopupBorderSize = 10,
+    ImGuiStyleVar_FramePadding = 11,
+    ImGuiStyleVar_FrameRounding = 12,
+    ImGuiStyleVar_FrameBorderSize = 13,
+    ImGuiStyleVar_ItemSpacing = 14,
+    ImGuiStyleVar_ItemInnerSpacing = 15,
+    ImGuiStyleVar_IndentSpacing = 16,
+    ImGuiStyleVar_CellPadding = 17,
+    ImGuiStyleVar_ScrollbarSize = 18,
+    ImGuiStyleVar_ScrollbarRounding = 19,
+    ImGuiStyleVar_GrabMinSize = 20,
+    ImGuiStyleVar_GrabRounding = 21,
+    ImGuiStyleVar_TabRounding = 22,
+    ImGuiStyleVar_TabBarBorderSize = 23,
+    ImGuiStyleVar_ButtonTextAlign = 24,
+    ImGuiStyleVar_SelectableTextAlign = 25,
+    ImGuiStyleVar_SeparatorTextBorderSize = 26,
+    ImGuiStyleVar_SeparatorTextAlign = 27,
+    ImGuiStyleVar_SeparatorTextPadding = 28,
+    ImGuiStyleVar_DockingSeparatorSize = 29,
+    ImGuiStyleVar_COUNT = 30
+  );
+
+  ImGuiSortDirection = (
+    ImGuiSortDirection_None = 0,
+    ImGuiSortDirection_Ascending = 1,
+    ImGuiSortDirection_Descending = 2
+  );
+
+  ImGuiSliderFlags = (
+    ImGuiSliderFlags_None = 0,
+    ImGuiSliderFlags_AlwaysClamp = 1 shl 4,
+    ImGuiSliderFlags_Logarithmic = 1 shl 5,
+    ImGuiSliderFlags_NoRoundToFormat = 1 shl 6,
+    ImGuiSliderFlags_NoInput = 1 shl 7,
+    ImGuiSliderFlags_InvalidMask_ = $7000000F
+  );
+
+  ImGuiSliderFlagsPrivate = (
+    ImGuiSliderFlags_Vertical = 1 shl 20,
+    ImGuiSliderFlags_ReadOnly = 1 shl 21
+  );
+
+  ImGuiSeparatorFlags = (
+    ImGuiSeparatorFlags_None = 0,
+    ImGuiSeparatorFlags_Horizontal = 1 shl 0,
+    ImGuiSeparatorFlags_Vertical = 1 shl 1,
+    ImGuiSeparatorFlags_SpanAllColumns = 1 shl 2
+  );
+
+  ImGuiSelectableFlags = (
+    ImGuiSelectableFlags_None = 0,
+    ImGuiSelectableFlags_DontClosePopups = 1 shl 0,
+    ImGuiSelectableFlags_SpanAllColumns = 1 shl 1,
+    ImGuiSelectableFlags_AllowDoubleClick = 1 shl 2,
+    ImGuiSelectableFlags_Disabled = 1 shl 3,
+    ImGuiSelectableFlags_AllowOverlap = 1 shl 4
+  );
+
+  ImGuiSelectableFlagsPrivate = (
+    ImGuiSelectableFlags_NoHoldingActiveID = 1 shl 20,
+    ImGuiSelectableFlags_SelectOnNav = 1 shl 21,
+    ImGuiSelectableFlags_SelectOnClick = 1 shl 22,
+    ImGuiSelectableFlags_SelectOnRelease = 1 shl 23,
+    ImGuiSelectableFlags_SpanAvailWidth = 1 shl 24,
+    ImGuiSelectableFlags_SetNavIdOnHover = 1 shl 25,
+    ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 shl 26,
+    ImGuiSelectableFlags_NoSetKeyOwner = 1 shl 27
+  );
+
+  ImGuiScrollFlags = (
+    ImGuiScrollFlags_None = 0,
+    ImGuiScrollFlags_KeepVisibleEdgeX = 1 shl 0,
+    ImGuiScrollFlags_KeepVisibleEdgeY = 1 shl 1,
+    ImGuiScrollFlags_KeepVisibleCenterX = 1 shl 2,
+    ImGuiScrollFlags_KeepVisibleCenterY = 1 shl 3,
+    ImGuiScrollFlags_AlwaysCenterX = 1 shl 4,
+    ImGuiScrollFlags_AlwaysCenterY = 1 shl 5,
+    ImGuiScrollFlags_NoScrollParent = 1 shl 6,
+    ImGuiScrollFlags_MaskX_ = Ord(ImGuiScrollFlags_KeepVisibleEdgeX) or Ord(ImGuiScrollFlags_KeepVisibleCenterX) or Ord(ImGuiScrollFlags_AlwaysCenterX),
+    ImGuiScrollFlags_MaskY_ = Ord(ImGuiScrollFlags_KeepVisibleEdgeY) or Ord(ImGuiScrollFlags_KeepVisibleCenterY) or Ord(ImGuiScrollFlags_AlwaysCenterY)
+  );
+
+  ImGuiPopupPositionPolicy = (
+    ImGuiPopupPositionPolicy_Default = 0,
+    ImGuiPopupPositionPolicy_ComboBox = 1,
+    ImGuiPopupPositionPolicy_Tooltip = 2
+  );
+
+  ImGuiPopupFlags = (
+    ImGuiPopupFlags_None = 0,
+    ImGuiPopupFlags_MouseButtonLeft = 0,
+    ImGuiPopupFlags_MouseButtonRight = 1,
+    ImGuiPopupFlags_MouseButtonMiddle = 2,
+    ImGuiPopupFlags_MouseButtonMask_ = $1F,
+    ImGuiPopupFlags_MouseButtonDefault_ = 1,
+    ImGuiPopupFlags_NoOpenOverExistingPopup = 1 shl 5,
+    ImGuiPopupFlags_NoOpenOverItems = 1 shl 6,
+    ImGuiPopupFlags_AnyPopupId = 1 shl 7,
+    ImGuiPopupFlags_AnyPopupLevel = 1 shl 8,
+    ImGuiPopupFlags_AnyPopup = Ord(ImGuiPopupFlags_AnyPopupId) or Ord(ImGuiPopupFlags_AnyPopupLevel)
+  );
+
+  ImGuiPlotType = (
+    ImGuiPlotType_Lines = 0,
+    ImGuiPlotType_Histogram = 1
+  );
+
+  ImGuiOldColumnFlags = (
+    ImGuiOldColumnFlags_None = 0,
+    ImGuiOldColumnFlags_NoBorder = 1 shl 0,
+    ImGuiOldColumnFlags_NoResize = 1 shl 1,
+    ImGuiOldColumnFlags_NoPreserveWidths = 1 shl 2,
+    ImGuiOldColumnFlags_NoForceWithinWindow = 1 shl 3,
+    ImGuiOldColumnFlags_GrowParentContentsSize = 1 shl 4
+  );
+
+  ImGuiNextWindowDataFlags = (
+    ImGuiNextWindowDataFlags_None = 0,
+    ImGuiNextWindowDataFlags_HasPos = 1 shl 0,
+    ImGuiNextWindowDataFlags_HasSize = 1 shl 1,
+    ImGuiNextWindowDataFlags_HasContentSize = 1 shl 2,
+    ImGuiNextWindowDataFlags_HasCollapsed = 1 shl 3,
+    ImGuiNextWindowDataFlags_HasSizeConstraint = 1 shl 4,
+    ImGuiNextWindowDataFlags_HasFocus = 1 shl 5,
+    ImGuiNextWindowDataFlags_HasBgAlpha = 1 shl 6,
+    ImGuiNextWindowDataFlags_HasScroll = 1 shl 7,
+    ImGuiNextWindowDataFlags_HasChildFlags = 1 shl 8,
+    ImGuiNextWindowDataFlags_HasViewport = 1 shl 9,
+    ImGuiNextWindowDataFlags_HasDock = 1 shl 10,
+    ImGuiNextWindowDataFlags_HasWindowClass = 1 shl 11
+  );
+
+  ImGuiNextItemDataFlags = (
+    ImGuiNextItemDataFlags_None = 0,
+    ImGuiNextItemDataFlags_HasWidth = 1 shl 0,
+    ImGuiNextItemDataFlags_HasOpen = 1 shl 1
+  );
+
+  ImGuiNavMoveFlags = (
+    ImGuiNavMoveFlags_None = 0,
+    ImGuiNavMoveFlags_LoopX = 1 shl 0,
+    ImGuiNavMoveFlags_LoopY = 1 shl 1,
+    ImGuiNavMoveFlags_WrapX = 1 shl 2,
+    ImGuiNavMoveFlags_WrapY = 1 shl 3,
+    ImGuiNavMoveFlags_WrapMask_ = Ord(ImGuiNavMoveFlags_LoopX) or Ord(ImGuiNavMoveFlags_LoopY) or Ord(ImGuiNavMoveFlags_WrapX) or Ord(ImGuiNavMoveFlags_WrapY),
+    ImGuiNavMoveFlags_AllowCurrentNavId = 1 shl 4,
+    ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 shl 5,
+    ImGuiNavMoveFlags_ScrollToEdgeY = 1 shl 6,
+    ImGuiNavMoveFlags_Forwarded = 1 shl 7,
+    ImGuiNavMoveFlags_DebugNoResult = 1 shl 8,
+    ImGuiNavMoveFlags_FocusApi = 1 shl 9,
+    ImGuiNavMoveFlags_IsTabbing = 1 shl 10,
+    ImGuiNavMoveFlags_IsPageMove = 1 shl 11,
+    ImGuiNavMoveFlags_Activate = 1 shl 12,
+    ImGuiNavMoveFlags_NoSelect = 1 shl 13,
+    ImGuiNavMoveFlags_NoSetNavHighlight = 1 shl 14
+  );
+
+  ImGuiNavLayer = (
+    ImGuiNavLayer_Main = 0,
+    ImGuiNavLayer_Menu = 1,
+    ImGuiNavLayer_COUNT = 2
+  );
+
+  ImGuiNavInput = (
+    ImGuiNavInput_Activate = 0,
+    ImGuiNavInput_Cancel = 1,
+    ImGuiNavInput_Input = 2,
+    ImGuiNavInput_Menu = 3,
+    ImGuiNavInput_DpadLeft = 4,
+    ImGuiNavInput_DpadRight = 5,
+    ImGuiNavInput_DpadUp = 6,
+    ImGuiNavInput_DpadDown = 7,
+    ImGuiNavInput_LStickLeft = 8,
+    ImGuiNavInput_LStickRight = 9,
+    ImGuiNavInput_LStickUp = 10,
+    ImGuiNavInput_LStickDown = 11,
+    ImGuiNavInput_FocusPrev = 12,
+    ImGuiNavInput_FocusNext = 13,
+    ImGuiNavInput_TweakSlow = 14,
+    ImGuiNavInput_TweakFast = 15,
+    ImGuiNavInput_COUNT = 16
+  );
+
+  ImGuiNavHighlightFlags = (
+    ImGuiNavHighlightFlags_None = 0,
+    ImGuiNavHighlightFlags_TypeDefault = 1 shl 0,
+    ImGuiNavHighlightFlags_TypeThin = 1 shl 1,
+    ImGuiNavHighlightFlags_AlwaysDraw = 1 shl 2,
+    ImGuiNavHighlightFlags_NoRounding = 1 shl 3
+  );
+
+  ImGuiMouseSource = (
+    ImGuiMouseSource_Mouse = 0,
+    ImGuiMouseSource_TouchScreen = 1,
+    ImGuiMouseSource_Pen = 2,
+    ImGuiMouseSource_COUNT = 3
+  );
+
+  ImGuiMouseCursor = (
+    ImGuiMouseCursor_None = -1,
+    ImGuiMouseCursor_Arrow = 0,
+    ImGuiMouseCursor_TextInput = 1,
+    ImGuiMouseCursor_ResizeAll = 2,
+    ImGuiMouseCursor_ResizeNS = 3,
+    ImGuiMouseCursor_ResizeEW = 4,
+    ImGuiMouseCursor_ResizeNESW = 5,
+    ImGuiMouseCursor_ResizeNWSE = 6,
+    ImGuiMouseCursor_Hand = 7,
+    ImGuiMouseCursor_NotAllowed = 8,
+    ImGuiMouseCursor_COUNT = 9
+  );
+
+  ImGuiMouseButton = (
+    ImGuiMouseButton_Left = 0,
+    ImGuiMouseButton_Right = 1,
+    ImGuiMouseButton_Middle = 2,
+    ImGuiMouseButton_COUNT = 5
+  );
+
+  ImGuiLogType = (
+    ImGuiLogType_None = 0,
+    ImGuiLogType_TTY = 1,
+    ImGuiLogType_File = 2,
+    ImGuiLogType_Buffer = 3,
+    ImGuiLogType_Clipboard = 4
+  );
+
+  ImGuiLocKey = (
+    ImGuiLocKey_VersionStr = 0,
+    ImGuiLocKey_TableSizeOne = 1,
+    ImGuiLocKey_TableSizeAllFit = 2,
+    ImGuiLocKey_TableSizeAllDefault = 3,
+    ImGuiLocKey_TableResetOrder = 4,
+    ImGuiLocKey_WindowingMainMenuBar = 5,
+    ImGuiLocKey_WindowingPopup = 6,
+    ImGuiLocKey_WindowingUntitled = 7,
+    ImGuiLocKey_DockingHideTabBar = 8,
+    ImGuiLocKey_DockingHoldShiftToDock = 9,
+    ImGuiLocKey_DockingDragToUndockOrMoveNode = 10,
+    ImGuiLocKey_COUNT = 11
+  );
+
+  ImGuiLayoutType = (
+    ImGuiLayoutType_Horizontal = 0,
+    ImGuiLayoutType_Vertical = 1
+  );
+
+  ImGuiKey = (
+    ImGuiKey_None = 0,
+    ImGuiKey_Tab = 512,
+    ImGuiKey_LeftArrow = 513,
+    ImGuiKey_RightArrow = 514,
+    ImGuiKey_UpArrow = 515,
+    ImGuiKey_DownArrow = 516,
+    ImGuiKey_PageUp = 517,
+    ImGuiKey_PageDown = 518,
+    ImGuiKey_Home = 519,
+    ImGuiKey_End = 520,
+    ImGuiKey_Insert = 521,
+    ImGuiKey_Delete = 522,
+    ImGuiKey_Backspace = 523,
+    ImGuiKey_Space = 524,
+    ImGuiKey_Enter = 525,
+    ImGuiKey_Escape = 526,
+    ImGuiKey_LeftCtrl = 527,
+    ImGuiKey_LeftShift = 528,
+    ImGuiKey_LeftAlt = 529,
+    ImGuiKey_LeftSuper = 530,
+    ImGuiKey_RightCtrl = 531,
+    ImGuiKey_RightShift = 532,
+    ImGuiKey_RightAlt = 533,
+    ImGuiKey_RightSuper = 534,
+    ImGuiKey_Menu = 535,
+    ImGuiKey_0 = 536,
+    ImGuiKey_1 = 537,
+    ImGuiKey_2 = 538,
+    ImGuiKey_3 = 539,
+    ImGuiKey_4 = 540,
+    ImGuiKey_5 = 541,
+    ImGuiKey_6 = 542,
+    ImGuiKey_7 = 543,
+    ImGuiKey_8 = 544,
+    ImGuiKey_9 = 545,
+    ImGuiKey_A = 546,
+    ImGuiKey_B = 547,
+    ImGuiKey_C = 548,
+    ImGuiKey_D = 549,
+    ImGuiKey_E = 550,
+    ImGuiKey_F = 551,
+    ImGuiKey_G = 552,
+    ImGuiKey_H = 553,
+    ImGuiKey_I = 554,
+    ImGuiKey_J = 555,
+    ImGuiKey_K = 556,
+    ImGuiKey_L = 557,
+    ImGuiKey_M = 558,
+    ImGuiKey_N = 559,
+    ImGuiKey_O = 560,
+    ImGuiKey_P = 561,
+    ImGuiKey_Q = 562,
+    ImGuiKey_R = 563,
+    ImGuiKey_S = 564,
+    ImGuiKey_T = 565,
+    ImGuiKey_U = 566,
+    ImGuiKey_V = 567,
+    ImGuiKey_W = 568,
+    ImGuiKey_X = 569,
+    ImGuiKey_Y = 570,
+    ImGuiKey_Z = 571,
+    ImGuiKey_F1 = 572,
+    ImGuiKey_F2 = 573,
+    ImGuiKey_F3 = 574,
+    ImGuiKey_F4 = 575,
+    ImGuiKey_F5 = 576,
+    ImGuiKey_F6 = 577,
+    ImGuiKey_F7 = 578,
+    ImGuiKey_F8 = 579,
+    ImGuiKey_F9 = 580,
+    ImGuiKey_F10 = 581,
+    ImGuiKey_F11 = 582,
+    ImGuiKey_F12 = 583,
+    ImGuiKey_F13 = 584,
+    ImGuiKey_F14 = 585,
+    ImGuiKey_F15 = 586,
+    ImGuiKey_F16 = 587,
+    ImGuiKey_F17 = 588,
+    ImGuiKey_F18 = 589,
+    ImGuiKey_F19 = 590,
+    ImGuiKey_F20 = 591,
+    ImGuiKey_F21 = 592,
+    ImGuiKey_F22 = 593,
+    ImGuiKey_F23 = 594,
+    ImGuiKey_F24 = 595,
+    ImGuiKey_Apostrophe = 596,
+    ImGuiKey_Comma = 597,
+    ImGuiKey_Minus = 598,
+    ImGuiKey_Period = 599,
+    ImGuiKey_Slash = 600,
+    ImGuiKey_Semicolon = 601,
+    ImGuiKey_Equal = 602,
+    ImGuiKey_LeftBracket = 603,
+    ImGuiKey_Backslash = 604,
+    ImGuiKey_RightBracket = 605,
+    ImGuiKey_GraveAccent = 606,
+    ImGuiKey_CapsLock = 607,
+    ImGuiKey_ScrollLock = 608,
+    ImGuiKey_NumLock = 609,
+    ImGuiKey_PrintScreen = 610,
+    ImGuiKey_Pause = 611,
+    ImGuiKey_Keypad0 = 612,
+    ImGuiKey_Keypad1 = 613,
+    ImGuiKey_Keypad2 = 614,
+    ImGuiKey_Keypad3 = 615,
+    ImGuiKey_Keypad4 = 616,
+    ImGuiKey_Keypad5 = 617,
+    ImGuiKey_Keypad6 = 618,
+    ImGuiKey_Keypad7 = 619,
+    ImGuiKey_Keypad8 = 620,
+    ImGuiKey_Keypad9 = 621,
+    ImGuiKey_KeypadDecimal = 622,
+    ImGuiKey_KeypadDivide = 623,
+    ImGuiKey_KeypadMultiply = 624,
+    ImGuiKey_KeypadSubtract = 625,
+    ImGuiKey_KeypadAdd = 626,
+    ImGuiKey_KeypadEnter = 627,
+    ImGuiKey_KeypadEqual = 628,
+    ImGuiKey_AppBack = 629,
+    ImGuiKey_AppForward = 630,
+    ImGuiKey_GamepadStart = 631,
+    ImGuiKey_GamepadBack = 632,
+    ImGuiKey_GamepadFaceLeft = 633,
+    ImGuiKey_GamepadFaceRight = 634,
+    ImGuiKey_GamepadFaceUp = 635,
+    ImGuiKey_GamepadFaceDown = 636,
+    ImGuiKey_GamepadDpadLeft = 637,
+    ImGuiKey_GamepadDpadRight = 638,
+    ImGuiKey_GamepadDpadUp = 639,
+    ImGuiKey_GamepadDpadDown = 640,
+    ImGuiKey_GamepadL1 = 641,
+    ImGuiKey_GamepadR1 = 642,
+    ImGuiKey_GamepadL2 = 643,
+    ImGuiKey_GamepadR2 = 644,
+    ImGuiKey_GamepadL3 = 645,
+    ImGuiKey_GamepadR3 = 646,
+    ImGuiKey_GamepadLStickLeft = 647,
+    ImGuiKey_GamepadLStickRight = 648,
+    ImGuiKey_GamepadLStickUp = 649,
+    ImGuiKey_GamepadLStickDown = 650,
+    ImGuiKey_GamepadRStickLeft = 651,
+    ImGuiKey_GamepadRStickRight = 652,
+    ImGuiKey_GamepadRStickUp = 653,
+    ImGuiKey_GamepadRStickDown = 654,
+    ImGuiKey_MouseLeft = 655,
+    ImGuiKey_MouseRight = 656,
+    ImGuiKey_MouseMiddle = 657,
+    ImGuiKey_MouseX1 = 658,
+    ImGuiKey_MouseX2 = 659,
+    ImGuiKey_MouseWheelX = 660,
+    ImGuiKey_MouseWheelY = 661,
+    ImGuiKey_ReservedForModCtrl = 662,
+    ImGuiKey_ReservedForModShift = 663,
+    ImGuiKey_ReservedForModAlt = 664,
+    ImGuiKey_ReservedForModSuper = 665,
+    ImGuiKey_COUNT = 666,
+    ImGuiMod_None = 0,
+    ImGuiMod_Ctrl = 1 shl 12,
+    ImGuiMod_Shift = 1 shl 13,
+    ImGuiMod_Alt = 1 shl 14,
+    ImGuiMod_Super = 1 shl 15,
+    ImGuiMod_Shortcut = 1 shl 11,
+    ImGuiMod_Mask_ = $F800,
+    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
+  );
+
+  ImGuiItemStatusFlags = (
+    ImGuiItemStatusFlags_None = 0,
+    ImGuiItemStatusFlags_HoveredRect = 1 shl 0,
+    ImGuiItemStatusFlags_HasDisplayRect = 1 shl 1,
+    ImGuiItemStatusFlags_Edited = 1 shl 2,
+    ImGuiItemStatusFlags_ToggledSelection = 1 shl 3,
+    ImGuiItemStatusFlags_ToggledOpen = 1 shl 4,
+    ImGuiItemStatusFlags_HasDeactivated = 1 shl 5,
+    ImGuiItemStatusFlags_Deactivated = 1 shl 6,
+    ImGuiItemStatusFlags_HoveredWindow = 1 shl 7,
+    ImGuiItemStatusFlags_FocusedByTabbing = 1 shl 8,
+    ImGuiItemStatusFlags_Visible = 1 shl 9
+  );
+
+  ImGuiItemFlags = (
+    ImGuiItemFlags_None = 0,
+    ImGuiItemFlags_NoTabStop = 1 shl 0,
+    ImGuiItemFlags_ButtonRepeat = 1 shl 1,
+    ImGuiItemFlags_Disabled = 1 shl 2,
+    ImGuiItemFlags_NoNav = 1 shl 3,
+    ImGuiItemFlags_NoNavDefaultFocus = 1 shl 4,
+    ImGuiItemFlags_SelectableDontClosePopup = 1 shl 5,
+    ImGuiItemFlags_MixedValue = 1 shl 6,
+    ImGuiItemFlags_ReadOnly = 1 shl 7,
+    ImGuiItemFlags_NoWindowHoverableCheck = 1 shl 8,
+    ImGuiItemFlags_AllowOverlap = 1 shl 9,
+    ImGuiItemFlags_Inputable = 1 shl 10,
+    ImGuiItemFlags_HasSelectionUserData = 1 shl 11
+  );
+
+  ImGuiInputTextFlags = (
+    ImGuiInputTextFlags_None = 0,
+    ImGuiInputTextFlags_CharsDecimal = 1 shl 0,
+    ImGuiInputTextFlags_CharsHexadecimal = 1 shl 1,
+    ImGuiInputTextFlags_CharsUppercase = 1 shl 2,
+    ImGuiInputTextFlags_CharsNoBlank = 1 shl 3,
+    ImGuiInputTextFlags_AutoSelectAll = 1 shl 4,
+    ImGuiInputTextFlags_EnterReturnsTrue = 1 shl 5,
+    ImGuiInputTextFlags_CallbackCompletion = 1 shl 6,
+    ImGuiInputTextFlags_CallbackHistory = 1 shl 7,
+    ImGuiInputTextFlags_CallbackAlways = 1 shl 8,
+    ImGuiInputTextFlags_CallbackCharFilter = 1 shl 9,
+    ImGuiInputTextFlags_AllowTabInput = 1 shl 10,
+    ImGuiInputTextFlags_CtrlEnterForNewLine = 1 shl 11,
+    ImGuiInputTextFlags_NoHorizontalScroll = 1 shl 12,
+    ImGuiInputTextFlags_AlwaysOverwrite = 1 shl 13,
+    ImGuiInputTextFlags_ReadOnly = 1 shl 14,
+    ImGuiInputTextFlags_Password = 1 shl 15,
+    ImGuiInputTextFlags_NoUndoRedo = 1 shl 16,
+    ImGuiInputTextFlags_CharsScientific = 1 shl 17,
+    ImGuiInputTextFlags_CallbackResize = 1 shl 18,
+    ImGuiInputTextFlags_CallbackEdit = 1 shl 19,
+    ImGuiInputTextFlags_EscapeClearsAll = 1 shl 20
+  );
+
+  ImGuiInputTextFlagsPrivate = (
+    ImGuiInputTextFlags_Multiline = 1 shl 26,
+    ImGuiInputTextFlags_NoMarkEdited = 1 shl 27,
+    ImGuiInputTextFlags_MergedItem = 1 shl 28
+  );
+
+  ImGuiInputSource = (
+    ImGuiInputSource_None = 0,
+    ImGuiInputSource_Mouse = 1,
+    ImGuiInputSource_Keyboard = 2,
+    ImGuiInputSource_Gamepad = 3,
+    ImGuiInputSource_Clipboard = 4,
+    ImGuiInputSource_COUNT = 5
+  );
+
+  ImGuiInputFlags = (
+    ImGuiInputFlags_None = 0,
+    ImGuiInputFlags_Repeat = 1 shl 0,
+    ImGuiInputFlags_RepeatRateDefault = 1 shl 1,
+    ImGuiInputFlags_RepeatRateNavMove = 1 shl 2,
+    ImGuiInputFlags_RepeatRateNavTweak = 1 shl 3,
+    ImGuiInputFlags_RepeatRateMask_ = Ord(ImGuiInputFlags_RepeatRateDefault) or Ord(ImGuiInputFlags_RepeatRateNavMove) or Ord(ImGuiInputFlags_RepeatRateNavTweak),
+    ImGuiInputFlags_CondHovered = 1 shl 4,
+    ImGuiInputFlags_CondActive = 1 shl 5,
+    ImGuiInputFlags_CondDefault_ = Ord(ImGuiInputFlags_CondHovered) or Ord(ImGuiInputFlags_CondActive),
+    ImGuiInputFlags_CondMask_ = Ord(ImGuiInputFlags_CondHovered) or Ord(ImGuiInputFlags_CondActive),
+    ImGuiInputFlags_LockThisFrame = 1 shl 6,
+    ImGuiInputFlags_LockUntilRelease = 1 shl 7,
+    ImGuiInputFlags_RouteFocused = 1 shl 8,
+    ImGuiInputFlags_RouteGlobalLow = 1 shl 9,
+    ImGuiInputFlags_RouteGlobal = 1 shl 10,
+    ImGuiInputFlags_RouteGlobalHigh = 1 shl 11,
+    ImGuiInputFlags_RouteMask_ = Ord(ImGuiInputFlags_RouteFocused) or Ord(ImGuiInputFlags_RouteGlobal) or Ord(ImGuiInputFlags_RouteGlobalLow) or Ord(ImGuiInputFlags_RouteGlobalHigh),
+    ImGuiInputFlags_RouteAlways = 1 shl 12,
+    ImGuiInputFlags_RouteUnlessBgFocused = 1 shl 13,
+    ImGuiInputFlags_RouteExtraMask_ = Ord(ImGuiInputFlags_RouteAlways) or Ord(ImGuiInputFlags_RouteUnlessBgFocused),
+    ImGuiInputFlags_SupportedByIsKeyPressed = Ord(ImGuiInputFlags_Repeat) or Ord(ImGuiInputFlags_RepeatRateMask_),
+    ImGuiInputFlags_SupportedByShortcut = Ord(ImGuiInputFlags_Repeat) or Ord(ImGuiInputFlags_RepeatRateMask_) or Ord(ImGuiInputFlags_RouteMask_) or Ord(ImGuiInputFlags_RouteExtraMask_),
+    ImGuiInputFlags_SupportedBySetKeyOwner = Ord(ImGuiInputFlags_LockThisFrame) or Ord(ImGuiInputFlags_LockUntilRelease),
+    ImGuiInputFlags_SupportedBySetItemKeyOwner = Ord(ImGuiInputFlags_SupportedBySetKeyOwner) or Ord(ImGuiInputFlags_CondMask_)
+  );
+
+  ImGuiInputEventType = (
+    ImGuiInputEventType_None = 0,
+    ImGuiInputEventType_MousePos = 1,
+    ImGuiInputEventType_MouseWheel = 2,
+    ImGuiInputEventType_MouseButton = 3,
+    ImGuiInputEventType_MouseViewport = 4,
+    ImGuiInputEventType_Key = 5,
+    ImGuiInputEventType_Text = 6,
+    ImGuiInputEventType_Focus = 7,
+    ImGuiInputEventType_COUNT = 8
+  );
+
+  ImGuiHoveredFlags = (
+    ImGuiHoveredFlags_None = 0,
+    ImGuiHoveredFlags_ChildWindows = 1 shl 0,
+    ImGuiHoveredFlags_RootWindow = 1 shl 1,
+    ImGuiHoveredFlags_AnyWindow = 1 shl 2,
+    ImGuiHoveredFlags_NoPopupHierarchy = 1 shl 3,
+    ImGuiHoveredFlags_DockHierarchy = 1 shl 4,
+    ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 shl 5,
+    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 shl 7,
+    ImGuiHoveredFlags_AllowWhenOverlappedByItem = 1 shl 8,
+    ImGuiHoveredFlags_AllowWhenOverlappedByWindow = 1 shl 9,
+    ImGuiHoveredFlags_AllowWhenDisabled = 1 shl 10,
+    ImGuiHoveredFlags_NoNavOverride = 1 shl 11,
+    ImGuiHoveredFlags_AllowWhenOverlapped = Ord(ImGuiHoveredFlags_AllowWhenOverlappedByItem) or Ord(ImGuiHoveredFlags_AllowWhenOverlappedByWindow),
+    ImGuiHoveredFlags_RectOnly = Ord(ImGuiHoveredFlags_AllowWhenBlockedByPopup) or Ord(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) or Ord(ImGuiHoveredFlags_AllowWhenOverlapped),
+    ImGuiHoveredFlags_RootAndChildWindows = Ord(ImGuiHoveredFlags_RootWindow) or Ord(ImGuiHoveredFlags_ChildWindows),
+    ImGuiHoveredFlags_ForTooltip = 1 shl 12,
+    ImGuiHoveredFlags_Stationary = 1 shl 13,
+    ImGuiHoveredFlags_DelayNone = 1 shl 14,
+    ImGuiHoveredFlags_DelayShort = 1 shl 15,
+    ImGuiHoveredFlags_DelayNormal = 1 shl 16,
+    ImGuiHoveredFlags_NoSharedDelay = 1 shl 17
+  );
+
+  ImGuiHoveredFlagsPrivate = (
+    ImGuiHoveredFlags_DelayMask_ = Ord(ImGuiHoveredFlags_DelayNone) or Ord(ImGuiHoveredFlags_DelayShort) or Ord(ImGuiHoveredFlags_DelayNormal) or Ord(ImGuiHoveredFlags_NoSharedDelay),
+    ImGuiHoveredFlags_AllowedMaskForIsWindowHovered = Ord(ImGuiHoveredFlags_ChildWindows) or Ord(ImGuiHoveredFlags_RootWindow) or Ord(ImGuiHoveredFlags_AnyWindow) or Ord(ImGuiHoveredFlags_NoPopupHierarchy) or Ord(ImGuiHoveredFlags_DockHierarchy) or Ord(ImGuiHoveredFlags_AllowWhenBlockedByPopup) or Ord(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) or Ord(ImGuiHoveredFlags_ForTooltip) or Ord(ImGuiHoveredFlags_Stationary),
+    ImGuiHoveredFlags_AllowedMaskForIsItemHovered = Ord(ImGuiHoveredFlags_AllowWhenBlockedByPopup) or Ord(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) or Ord(ImGuiHoveredFlags_AllowWhenOverlapped) or Ord(ImGuiHoveredFlags_AllowWhenDisabled) or Ord(ImGuiHoveredFlags_NoNavOverride) or Ord(ImGuiHoveredFlags_ForTooltip) or Ord(ImGuiHoveredFlags_Stationary) or Ord(ImGuiHoveredFlags_DelayMask_)
+  );
+
+  ImGuiFocusedFlags = (
+    ImGuiFocusedFlags_None = 0,
+    ImGuiFocusedFlags_ChildWindows = 1 shl 0,
+    ImGuiFocusedFlags_RootWindow = 1 shl 1,
+    ImGuiFocusedFlags_AnyWindow = 1 shl 2,
+    ImGuiFocusedFlags_NoPopupHierarchy = 1 shl 3,
+    ImGuiFocusedFlags_DockHierarchy = 1 shl 4,
+    ImGuiFocusedFlags_RootAndChildWindows = Ord(ImGuiFocusedFlags_RootWindow) or Ord(ImGuiFocusedFlags_ChildWindows)
+  );
+
+  ImGuiFocusRequestFlags = (
+    ImGuiFocusRequestFlags_None = 0,
+    ImGuiFocusRequestFlags_RestoreFocusedChild = 1 shl 0,
+    ImGuiFocusRequestFlags_UnlessBelowModal = 1 shl 1
+  );
+
+  ImGuiDragDropFlags = (
+    ImGuiDragDropFlags_None = 0,
+    ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 shl 0,
+    ImGuiDragDropFlags_SourceNoDisableHover = 1 shl 1,
+    ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 shl 2,
+    ImGuiDragDropFlags_SourceAllowNullID = 1 shl 3,
+    ImGuiDragDropFlags_SourceExtern = 1 shl 4,
+    ImGuiDragDropFlags_SourceAutoExpirePayload = 1 shl 5,
+    ImGuiDragDropFlags_AcceptBeforeDelivery = 1 shl 10,
+    ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 shl 11,
+    ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 shl 12,
+    ImGuiDragDropFlags_AcceptPeekOnly = Ord(ImGuiDragDropFlags_AcceptBeforeDelivery) or Ord(ImGuiDragDropFlags_AcceptNoDrawDefaultRect)
+  );
+
+  ImGuiDockNodeState = (
+    ImGuiDockNodeState_Unknown = 0,
+    ImGuiDockNodeState_HostWindowHiddenBecauseSingleWindow = 1,
+    ImGuiDockNodeState_HostWindowHiddenBecauseWindowsAreResizing = 2,
+    ImGuiDockNodeState_HostWindowVisible = 3
+  );
+
+  ImGuiDockNodeFlags = (
+    ImGuiDockNodeFlags_None = 0,
+    ImGuiDockNodeFlags_KeepAliveOnly = 1 shl 0,
+    ImGuiDockNodeFlags_NoDockingOverCentralNode = 1 shl 2,
+    ImGuiDockNodeFlags_PassthruCentralNode = 1 shl 3,
+    ImGuiDockNodeFlags_NoDockingSplit = 1 shl 4,
+    ImGuiDockNodeFlags_NoResize = 1 shl 5,
+    ImGuiDockNodeFlags_AutoHideTabBar = 1 shl 6,
+    ImGuiDockNodeFlags_NoUndocking = 1 shl 7
+  );
+
+  ImGuiDockNodeFlagsPrivate = (
+    ImGuiDockNodeFlags_DockSpace = 1 shl 10,
+    ImGuiDockNodeFlags_CentralNode = 1 shl 11,
+    ImGuiDockNodeFlags_NoTabBar = 1 shl 12,
+    ImGuiDockNodeFlags_HiddenTabBar = 1 shl 13,
+    ImGuiDockNodeFlags_NoWindowMenuButton = 1 shl 14,
+    ImGuiDockNodeFlags_NoCloseButton = 1 shl 15,
+    ImGuiDockNodeFlags_NoResizeX = 1 shl 16,
+    ImGuiDockNodeFlags_NoResizeY = 1 shl 17,
+    ImGuiDockNodeFlags_NoDockingSplitOther = 1 shl 19,
+    ImGuiDockNodeFlags_NoDockingOverMe = 1 shl 20,
+    ImGuiDockNodeFlags_NoDockingOverOther = 1 shl 21,
+    ImGuiDockNodeFlags_NoDockingOverEmpty = 1 shl 22,
+    ImGuiDockNodeFlags_NoDocking = Ord(ImGuiDockNodeFlags_NoDockingOverMe) or Ord(ImGuiDockNodeFlags_NoDockingOverOther) or Ord(ImGuiDockNodeFlags_NoDockingOverEmpty) or Ord(ImGuiDockNodeFlags_NoDockingSplit) or Ord(ImGuiDockNodeFlags_NoDockingSplitOther),
+    ImGuiDockNodeFlags_SharedFlagsInheritMask_ = not 0,
+    ImGuiDockNodeFlags_NoResizeFlagsMask_ = Ord(ImGuiDockNodeFlags_NoResize) or Ord(ImGuiDockNodeFlags_NoResizeX) or Ord(ImGuiDockNodeFlags_NoResizeY),
+    ImGuiDockNodeFlags_LocalFlagsTransferMask_ = Ord(ImGuiDockNodeFlags_NoDockingSplit) or Ord(ImGuiDockNodeFlags_NoResizeFlagsMask_) or Ord(ImGuiDockNodeFlags_AutoHideTabBar) or Ord(ImGuiDockNodeFlags_CentralNode) or Ord(ImGuiDockNodeFlags_NoTabBar) or Ord(ImGuiDockNodeFlags_HiddenTabBar) or Ord(ImGuiDockNodeFlags_NoWindowMenuButton) or Ord(ImGuiDockNodeFlags_NoCloseButton),
+    ImGuiDockNodeFlags_SavedFlagsMask_ = Ord(ImGuiDockNodeFlags_NoResizeFlagsMask_) or Ord(ImGuiDockNodeFlags_DockSpace) or Ord(ImGuiDockNodeFlags_CentralNode) or Ord(ImGuiDockNodeFlags_NoTabBar) or Ord(ImGuiDockNodeFlags_HiddenTabBar) or Ord(ImGuiDockNodeFlags_NoWindowMenuButton) or Ord(ImGuiDockNodeFlags_NoCloseButton)
+  );
+
+  ImGuiDir = (
+    ImGuiDir_None = -1,
+    ImGuiDir_Left = 0,
+    ImGuiDir_Right = 1,
+    ImGuiDir_Up = 2,
+    ImGuiDir_Down = 3,
+    ImGuiDir_COUNT = 4
+  );
+
+  ImGuiDebugLogFlags = (
+    ImGuiDebugLogFlags_None = 0,
+    ImGuiDebugLogFlags_EventActiveId = 1 shl 0,
+    ImGuiDebugLogFlags_EventFocus = 1 shl 1,
+    ImGuiDebugLogFlags_EventPopup = 1 shl 2,
+    ImGuiDebugLogFlags_EventNav = 1 shl 3,
+    ImGuiDebugLogFlags_EventClipper = 1 shl 4,
+    ImGuiDebugLogFlags_EventSelection = 1 shl 5,
+    ImGuiDebugLogFlags_EventIO = 1 shl 6,
+    ImGuiDebugLogFlags_EventDocking = 1 shl 7,
+    ImGuiDebugLogFlags_EventViewport = 1 shl 8,
+    ImGuiDebugLogFlags_EventMask_ = Ord(ImGuiDebugLogFlags_EventActiveId) or Ord(ImGuiDebugLogFlags_EventFocus) or Ord(ImGuiDebugLogFlags_EventPopup) or Ord(ImGuiDebugLogFlags_EventNav) or Ord(ImGuiDebugLogFlags_EventClipper) or Ord(ImGuiDebugLogFlags_EventSelection) or Ord(ImGuiDebugLogFlags_EventIO) or Ord(ImGuiDebugLogFlags_EventDocking) or Ord(ImGuiDebugLogFlags_EventViewport),
+    ImGuiDebugLogFlags_OutputToTTY = 1 shl 10,
+    ImGuiDebugLogFlags_OutputToTestEngine = 1 shl 11
+  );
+
+  ImGuiDataType = (
+    ImGuiDataType_S8 = 0,
+    ImGuiDataType_U8 = 1,
+    ImGuiDataType_S16 = 2,
+    ImGuiDataType_U16 = 3,
+    ImGuiDataType_S32 = 4,
+    ImGuiDataType_U32 = 5,
+    ImGuiDataType_S64 = 6,
+    ImGuiDataType_U64 = 7,
+    ImGuiDataType_Float = 8,
+    ImGuiDataType_Double = 9,
+    ImGuiDataType_COUNT = 10
+  );
+
+  ImGuiDataTypePrivate = (
+    ImGuiDataType_String = Ord(ImGuiDataType_COUNT) + (1),
+    ImGuiDataType_Pointer = Ord(ImGuiDataType_COUNT) + (1) + (1),
+    ImGuiDataType_ID = Ord(ImGuiDataType_COUNT) + (1) + (1) + (1)
+  );
+
+  ImGuiDataAuthority = (
+    ImGuiDataAuthority_Auto = 0,
+    ImGuiDataAuthority_DockNode = 1,
+    ImGuiDataAuthority_Window = 2
+  );
+
+  ImGuiContextHookType = (
+    ImGuiContextHookType_NewFramePre = 0,
+    ImGuiContextHookType_NewFramePost = 1,
+    ImGuiContextHookType_EndFramePre = 2,
+    ImGuiContextHookType_EndFramePost = 3,
+    ImGuiContextHookType_RenderPre = 4,
+    ImGuiContextHookType_RenderPost = 5,
+    ImGuiContextHookType_Shutdown = 6,
+    ImGuiContextHookType_PendingRemoval_ = 7
+  );
+
+  ImGuiConfigFlags = (
+    ImGuiConfigFlags_None = 0,
+    ImGuiConfigFlags_NavEnableKeyboard = 1 shl 0,
+    ImGuiConfigFlags_NavEnableGamepad = 1 shl 1,
+    ImGuiConfigFlags_NavEnableSetMousePos = 1 shl 2,
+    ImGuiConfigFlags_NavNoCaptureKeyboard = 1 shl 3,
+    ImGuiConfigFlags_NoMouse = 1 shl 4,
+    ImGuiConfigFlags_NoMouseCursorChange = 1 shl 5,
+    ImGuiConfigFlags_DockingEnable = 1 shl 6,
+    ImGuiConfigFlags_ViewportsEnable = 1 shl 10,
+    ImGuiConfigFlags_DpiEnableScaleViewports = 1 shl 14,
+    ImGuiConfigFlags_DpiEnableScaleFonts = 1 shl 15,
+    ImGuiConfigFlags_IsSRGB = 1 shl 20,
+    ImGuiConfigFlags_IsTouchScreen = 1 shl 21
+  );
+
+  ImGuiCond = (
+    ImGuiCond_None = 0,
+    ImGuiCond_Always = 1 shl 0,
+    ImGuiCond_Once = 1 shl 1,
+    ImGuiCond_FirstUseEver = 1 shl 2,
+    ImGuiCond_Appearing = 1 shl 3
+  );
+
+  ImGuiComboFlags = (
+    ImGuiComboFlags_None = 0,
+    ImGuiComboFlags_PopupAlignLeft = 1 shl 0,
+    ImGuiComboFlags_HeightSmall = 1 shl 1,
+    ImGuiComboFlags_HeightRegular = 1 shl 2,
+    ImGuiComboFlags_HeightLarge = 1 shl 3,
+    ImGuiComboFlags_HeightLargest = 1 shl 4,
+    ImGuiComboFlags_NoArrowButton = 1 shl 5,
+    ImGuiComboFlags_NoPreview = 1 shl 6,
+    ImGuiComboFlags_WidthFitPreview = 1 shl 7,
+    ImGuiComboFlags_HeightMask_ = Ord(ImGuiComboFlags_HeightSmall) or Ord(ImGuiComboFlags_HeightRegular) or Ord(ImGuiComboFlags_HeightLarge) or Ord(ImGuiComboFlags_HeightLargest)
+  );
+
+  ImGuiComboFlagsPrivate = (
+    ImGuiComboFlags_CustomPreview = 1 shl 20
+  );
+
+  ImGuiColorEditFlags = (
+    ImGuiColorEditFlags_None = 0,
+    ImGuiColorEditFlags_NoAlpha = 1 shl 1,
+    ImGuiColorEditFlags_NoPicker = 1 shl 2,
+    ImGuiColorEditFlags_NoOptions = 1 shl 3,
+    ImGuiColorEditFlags_NoSmallPreview = 1 shl 4,
+    ImGuiColorEditFlags_NoInputs = 1 shl 5,
+    ImGuiColorEditFlags_NoTooltip = 1 shl 6,
+    ImGuiColorEditFlags_NoLabel = 1 shl 7,
+    ImGuiColorEditFlags_NoSidePreview = 1 shl 8,
+    ImGuiColorEditFlags_NoDragDrop = 1 shl 9,
+    ImGuiColorEditFlags_NoBorder = 1 shl 10,
+    ImGuiColorEditFlags_AlphaBar = 1 shl 16,
+    ImGuiColorEditFlags_AlphaPreview = 1 shl 17,
+    ImGuiColorEditFlags_AlphaPreviewHalf = 1 shl 18,
+    ImGuiColorEditFlags_HDR = 1 shl 19,
+    ImGuiColorEditFlags_DisplayRGB = 1 shl 20,
+    ImGuiColorEditFlags_DisplayHSV = 1 shl 21,
+    ImGuiColorEditFlags_DisplayHex = 1 shl 22,
+    ImGuiColorEditFlags_Uint8 = 1 shl 23,
+    ImGuiColorEditFlags_Float = 1 shl 24,
+    ImGuiColorEditFlags_PickerHueBar = 1 shl 25,
+    ImGuiColorEditFlags_PickerHueWheel = 1 shl 26,
+    ImGuiColorEditFlags_InputRGB = 1 shl 27,
+    ImGuiColorEditFlags_InputHSV = 1 shl 28,
+    ImGuiColorEditFlags_DefaultOptions_ = Ord(ImGuiColorEditFlags_Uint8) or Ord(ImGuiColorEditFlags_DisplayRGB) or Ord(ImGuiColorEditFlags_InputRGB) or Ord(ImGuiColorEditFlags_PickerHueBar),
+    ImGuiColorEditFlags_DisplayMask_ = Ord(ImGuiColorEditFlags_DisplayRGB) or Ord(ImGuiColorEditFlags_DisplayHSV) or Ord(ImGuiColorEditFlags_DisplayHex),
+    ImGuiColorEditFlags_DataTypeMask_ = Ord(ImGuiColorEditFlags_Uint8) or Ord(ImGuiColorEditFlags_Float),
+    ImGuiColorEditFlags_PickerMask_ = Ord(ImGuiColorEditFlags_PickerHueWheel) or Ord(ImGuiColorEditFlags_PickerHueBar),
+    ImGuiColorEditFlags_InputMask_ = Ord(ImGuiColorEditFlags_InputRGB) or Ord(ImGuiColorEditFlags_InputHSV)
+  );
+
+  ImGuiCol = (
+    ImGuiCol_Text = 0,
+    ImGuiCol_TextDisabled = 1,
+    ImGuiCol_WindowBg = 2,
+    ImGuiCol_ChildBg = 3,
+    ImGuiCol_PopupBg = 4,
+    ImGuiCol_Border = 5,
+    ImGuiCol_BorderShadow = 6,
+    ImGuiCol_FrameBg = 7,
+    ImGuiCol_FrameBgHovered = 8,
+    ImGuiCol_FrameBgActive = 9,
+    ImGuiCol_TitleBg = 10,
+    ImGuiCol_TitleBgActive = 11,
+    ImGuiCol_TitleBgCollapsed = 12,
+    ImGuiCol_MenuBarBg = 13,
+    ImGuiCol_ScrollbarBg = 14,
+    ImGuiCol_ScrollbarGrab = 15,
+    ImGuiCol_ScrollbarGrabHovered = 16,
+    ImGuiCol_ScrollbarGrabActive = 17,
+    ImGuiCol_CheckMark = 18,
+    ImGuiCol_SliderGrab = 19,
+    ImGuiCol_SliderGrabActive = 20,
+    ImGuiCol_Button = 21,
+    ImGuiCol_ButtonHovered = 22,
+    ImGuiCol_ButtonActive = 23,
+    ImGuiCol_Header = 24,
+    ImGuiCol_HeaderHovered = 25,
+    ImGuiCol_HeaderActive = 26,
+    ImGuiCol_Separator = 27,
+    ImGuiCol_SeparatorHovered = 28,
+    ImGuiCol_SeparatorActive = 29,
+    ImGuiCol_ResizeGrip = 30,
+    ImGuiCol_ResizeGripHovered = 31,
+    ImGuiCol_ResizeGripActive = 32,
+    ImGuiCol_Tab = 33,
+    ImGuiCol_TabHovered = 34,
+    ImGuiCol_TabActive = 35,
+    ImGuiCol_TabUnfocused = 36,
+    ImGuiCol_TabUnfocusedActive = 37,
+    ImGuiCol_DockingPreview = 38,
+    ImGuiCol_DockingEmptyBg = 39,
+    ImGuiCol_PlotLines = 40,
+    ImGuiCol_PlotLinesHovered = 41,
+    ImGuiCol_PlotHistogram = 42,
+    ImGuiCol_PlotHistogramHovered = 43,
+    ImGuiCol_TableHeaderBg = 44,
+    ImGuiCol_TableBorderStrong = 45,
+    ImGuiCol_TableBorderLight = 46,
+    ImGuiCol_TableRowBg = 47,
+    ImGuiCol_TableRowBgAlt = 48,
+    ImGuiCol_TextSelectedBg = 49,
+    ImGuiCol_DragDropTarget = 50,
+    ImGuiCol_NavHighlight = 51,
+    ImGuiCol_NavWindowingHighlight = 52,
+    ImGuiCol_NavWindowingDimBg = 53,
+    ImGuiCol_ModalWindowDimBg = 54,
+    ImGuiCol_COUNT = 55
+  );
+
+  ImGuiChildFlags = (
+    ImGuiChildFlags_None = 0,
+    ImGuiChildFlags_Border = 1 shl 0,
+    ImGuiChildFlags_AlwaysUseWindowPadding = 1 shl 1,
+    ImGuiChildFlags_ResizeX = 1 shl 2,
+    ImGuiChildFlags_ResizeY = 1 shl 3
+  );
+
+  ImGuiButtonFlags = (
+    ImGuiButtonFlags_None = 0,
+    ImGuiButtonFlags_MouseButtonLeft = 1 shl 0,
+    ImGuiButtonFlags_MouseButtonRight = 1 shl 1,
+    ImGuiButtonFlags_MouseButtonMiddle = 1 shl 2,
+    ImGuiButtonFlags_MouseButtonMask_ = Ord(ImGuiButtonFlags_MouseButtonLeft) or Ord(ImGuiButtonFlags_MouseButtonRight) or Ord(ImGuiButtonFlags_MouseButtonMiddle),
+    ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft
+  );
+
+  ImGuiButtonFlagsPrivate = (
+    ImGuiButtonFlags_PressedOnClick = 1 shl 4,
+    ImGuiButtonFlags_PressedOnClickRelease = 1 shl 5,
+    ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 shl 6,
+    ImGuiButtonFlags_PressedOnRelease = 1 shl 7,
+    ImGuiButtonFlags_PressedOnDoubleClick = 1 shl 8,
+    ImGuiButtonFlags_PressedOnDragDropHold = 1 shl 9,
+    ImGuiButtonFlags_Repeat = 1 shl 10,
+    ImGuiButtonFlags_FlattenChildren = 1 shl 11,
+    ImGuiButtonFlags_AllowOverlap = 1 shl 12,
+    ImGuiButtonFlags_DontClosePopups = 1 shl 13,
+    ImGuiButtonFlags_AlignTextBaseLine = 1 shl 15,
+    ImGuiButtonFlags_NoKeyModifiers = 1 shl 16,
+    ImGuiButtonFlags_NoHoldingActiveId = 1 shl 17,
+    ImGuiButtonFlags_NoNavFocus = 1 shl 18,
+    ImGuiButtonFlags_NoHoveredOnFocus = 1 shl 19,
+    ImGuiButtonFlags_NoSetKeyOwner = 1 shl 20,
+    ImGuiButtonFlags_NoTestKeyOwner = 1 shl 21,
+    ImGuiButtonFlags_PressedOnMask_ = Ord(ImGuiButtonFlags_PressedOnClick) or Ord(ImGuiButtonFlags_PressedOnClickRelease) or Ord(ImGuiButtonFlags_PressedOnClickReleaseAnywhere) or Ord(ImGuiButtonFlags_PressedOnRelease) or Ord(ImGuiButtonFlags_PressedOnDoubleClick) or Ord(ImGuiButtonFlags_PressedOnDragDropHold),
+    ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease
+  );
+
+  ImGuiBackendFlags = (
+    ImGuiBackendFlags_None = 0,
+    ImGuiBackendFlags_HasGamepad = 1 shl 0,
+    ImGuiBackendFlags_HasMouseCursors = 1 shl 1,
+    ImGuiBackendFlags_HasSetMousePos = 1 shl 2,
+    ImGuiBackendFlags_RendererHasVtxOffset = 1 shl 3,
+    ImGuiBackendFlags_PlatformHasViewports = 1 shl 10,
+    ImGuiBackendFlags_HasMouseHoveredViewport = 1 shl 11,
+    ImGuiBackendFlags_RendererHasViewports = 1 shl 12
+  );
+
+  ImGuiAxis = (
+    ImGuiAxis_None = -1,
+    ImGuiAxis_X = 0,
+    ImGuiAxis_Y = 1
+  );
+
+  ImGuiActivateFlags = (
+    ImGuiActivateFlags_None = 0,
+    ImGuiActivateFlags_PreferInput = 1 shl 0,
+    ImGuiActivateFlags_PreferTweak = 1 shl 1,
+    ImGuiActivateFlags_TryToPreserveState = 1 shl 2
+  );
+
+  ImFontAtlasFlags = (
+    ImFontAtlasFlags_None = 0,
+    ImFontAtlasFlags_NoPowerOfTwoHeight = 1 shl 0,
+    ImFontAtlasFlags_NoMouseCursors = 1 shl 1,
+    ImFontAtlasFlags_NoBakedLines = 1 shl 2
+  );
+
+  ImDrawListFlags = (
+    ImDrawListFlags_None = 0,
+    ImDrawListFlags_AntiAliasedLines = 1 shl 0,
+    ImDrawListFlags_AntiAliasedLinesUseTex = 1 shl 1,
+    ImDrawListFlags_AntiAliasedFill = 1 shl 2,
+    ImDrawListFlags_AllowVtxOffset = 1 shl 3
+  );
+
+  ImDrawFlags = (
+    ImDrawFlags_None = 0,
+    ImDrawFlags_Closed = 1 shl 0,
+    ImDrawFlags_RoundCornersTopLeft = 1 shl 4,
+    ImDrawFlags_RoundCornersTopRight = 1 shl 5,
+    ImDrawFlags_RoundCornersBottomLeft = 1 shl 6,
+    ImDrawFlags_RoundCornersBottomRight = 1 shl 7,
+    ImDrawFlags_RoundCornersNone = 1 shl 8,
+    ImDrawFlags_RoundCornersTop = Ord(ImDrawFlags_RoundCornersTopLeft) or Ord(ImDrawFlags_RoundCornersTopRight),
+    ImDrawFlags_RoundCornersBottom = Ord(ImDrawFlags_RoundCornersBottomLeft) or Ord(ImDrawFlags_RoundCornersBottomRight),
+    ImDrawFlags_RoundCornersLeft = Ord(ImDrawFlags_RoundCornersBottomLeft) or Ord(ImDrawFlags_RoundCornersTopLeft),
+    ImDrawFlags_RoundCornersRight = Ord(ImDrawFlags_RoundCornersBottomRight) or Ord(ImDrawFlags_RoundCornersTopRight),
+    ImDrawFlags_RoundCornersAll = Ord(ImDrawFlags_RoundCornersTopLeft) or Ord(ImDrawFlags_RoundCornersTopRight) or Ord(ImDrawFlags_RoundCornersBottomLeft) or Ord(ImDrawFlags_RoundCornersBottomRight),
+    ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll,
+    ImDrawFlags_RoundCornersMask_ = Ord(ImDrawFlags_RoundCornersAll) or Ord(ImDrawFlags_RoundCornersNone)
+  );
+
+
+  // ImDrawFlags
+  operator and (const a,b:ImDrawFlags):ImDrawFlags;
+  operator or (const a,b:ImDrawFlags):ImDrawFlags;
+  operator not(const a: ImDrawFlags): ImDrawFlags;
+
+  // ImDrawListFlags
+  operator and (const a,b:ImDrawListFlags):ImDrawListFlags;
+  operator or (const a,b:ImDrawListFlags):ImDrawListFlags;
+  operator not(const a: ImDrawListFlags): ImDrawListFlags;
+
+  // ImFontAtlasFlags
+  operator and (const a,b:ImFontAtlasFlags):ImFontAtlasFlags;
+  operator or (const a,b:ImFontAtlasFlags):ImFontAtlasFlags;
+  operator not(const a: ImFontAtlasFlags): ImFontAtlasFlags;
+
+  // ImGuiActivateFlags
+  operator and (const a,b:ImGuiActivateFlags):ImGuiActivateFlags;
+  operator or (const a,b:ImGuiActivateFlags):ImGuiActivateFlags;
+  operator not(const a: ImGuiActivateFlags): ImGuiActivateFlags;
+
+  // ImGuiAxis
+  operator and (const a,b:ImGuiAxis):ImGuiAxis;
+  operator or (const a,b:ImGuiAxis):ImGuiAxis;
+  operator not(const a: ImGuiAxis): ImGuiAxis;
+
+  // ImGuiBackendFlags
+  operator and (const a,b:ImGuiBackendFlags):ImGuiBackendFlags;
+  operator or (const a,b:ImGuiBackendFlags):ImGuiBackendFlags;
+  operator not(const a: ImGuiBackendFlags): ImGuiBackendFlags;
+
+  // ImGuiButtonFlagsPrivate
+  operator and (const a,b:ImGuiButtonFlagsPrivate):ImGuiButtonFlagsPrivate;
+  operator or (const a,b:ImGuiButtonFlagsPrivate):ImGuiButtonFlagsPrivate;
+  operator not(const a: ImGuiButtonFlagsPrivate): ImGuiButtonFlagsPrivate;
+
+  // ImGuiButtonFlags
+  operator and (const a,b:ImGuiButtonFlags):ImGuiButtonFlags;
+  operator or (const a,b:ImGuiButtonFlags):ImGuiButtonFlags;
+  operator not(const a: ImGuiButtonFlags): ImGuiButtonFlags;
+
+  // ImGuiChildFlags
+  operator and (const a,b:ImGuiChildFlags):ImGuiChildFlags;
+  operator or (const a,b:ImGuiChildFlags):ImGuiChildFlags;
+  operator not(const a: ImGuiChildFlags): ImGuiChildFlags;
+
+  // ImGuiCol
+  operator and (const a,b:ImGuiCol):ImGuiCol;
+  operator or (const a,b:ImGuiCol):ImGuiCol;
+  operator not(const a: ImGuiCol): ImGuiCol;
+
+  // ImGuiColorEditFlags
+  operator and (const a,b:ImGuiColorEditFlags):ImGuiColorEditFlags;
+  operator or (const a,b:ImGuiColorEditFlags):ImGuiColorEditFlags;
+  operator not(const a: ImGuiColorEditFlags): ImGuiColorEditFlags;
+
+  // ImGuiComboFlagsPrivate
+  operator and (const a,b:ImGuiComboFlagsPrivate):ImGuiComboFlagsPrivate;
+  operator or (const a,b:ImGuiComboFlagsPrivate):ImGuiComboFlagsPrivate;
+  operator not(const a: ImGuiComboFlagsPrivate): ImGuiComboFlagsPrivate;
+
+  // ImGuiComboFlags
+  operator and (const a,b:ImGuiComboFlags):ImGuiComboFlags;
+  operator or (const a,b:ImGuiComboFlags):ImGuiComboFlags;
+  operator not(const a: ImGuiComboFlags): ImGuiComboFlags;
+
+  // ImGuiCond
+  operator and (const a,b:ImGuiCond):ImGuiCond;
+  operator or (const a,b:ImGuiCond):ImGuiCond;
+  operator not(const a: ImGuiCond): ImGuiCond;
+
+  // ImGuiConfigFlags
+  operator and (const a,b:ImGuiConfigFlags):ImGuiConfigFlags;
+  operator or (const a,b:ImGuiConfigFlags):ImGuiConfigFlags;
+  operator not(const a: ImGuiConfigFlags): ImGuiConfigFlags;
+
+  // ImGuiContextHookType
+  operator and (const a,b:ImGuiContextHookType):ImGuiContextHookType;
+  operator or (const a,b:ImGuiContextHookType):ImGuiContextHookType;
+  operator not(const a: ImGuiContextHookType): ImGuiContextHookType;
+
+  // ImGuiDataAuthority
+  operator and (const a,b:ImGuiDataAuthority):ImGuiDataAuthority;
+  operator or (const a,b:ImGuiDataAuthority):ImGuiDataAuthority;
+  operator not(const a: ImGuiDataAuthority): ImGuiDataAuthority;
+
+  // ImGuiDataTypePrivate
+  operator and (const a,b:ImGuiDataTypePrivate):ImGuiDataTypePrivate;
+  operator or (const a,b:ImGuiDataTypePrivate):ImGuiDataTypePrivate;
+  operator not(const a: ImGuiDataTypePrivate): ImGuiDataTypePrivate;
+
+  // ImGuiDataType
+  operator and (const a,b:ImGuiDataType):ImGuiDataType;
+  operator or (const a,b:ImGuiDataType):ImGuiDataType;
+  operator not(const a: ImGuiDataType): ImGuiDataType;
+
+  // ImGuiDebugLogFlags
+  operator and (const a,b:ImGuiDebugLogFlags):ImGuiDebugLogFlags;
+  operator or (const a,b:ImGuiDebugLogFlags):ImGuiDebugLogFlags;
+  operator not(const a: ImGuiDebugLogFlags): ImGuiDebugLogFlags;
+
+  // ImGuiDir
+  operator and (const a,b:ImGuiDir):ImGuiDir;
+  operator or (const a,b:ImGuiDir):ImGuiDir;
+  operator not(const a: ImGuiDir): ImGuiDir;
+
+  // ImGuiDockNodeFlagsPrivate
+  operator and (const a,b:ImGuiDockNodeFlagsPrivate):ImGuiDockNodeFlagsPrivate;
+  operator or (const a,b:ImGuiDockNodeFlagsPrivate):ImGuiDockNodeFlagsPrivate;
+  operator not(const a: ImGuiDockNodeFlagsPrivate): ImGuiDockNodeFlagsPrivate;
+
+  // ImGuiDockNodeFlags
+  operator and (const a,b:ImGuiDockNodeFlags):ImGuiDockNodeFlags;
+  operator or (const a,b:ImGuiDockNodeFlags):ImGuiDockNodeFlags;
+  operator not(const a: ImGuiDockNodeFlags): ImGuiDockNodeFlags;
+
+  // ImGuiDockNodeState
+  operator and (const a,b:ImGuiDockNodeState):ImGuiDockNodeState;
+  operator or (const a,b:ImGuiDockNodeState):ImGuiDockNodeState;
+  operator not(const a: ImGuiDockNodeState): ImGuiDockNodeState;
+
+  // ImGuiDragDropFlags
+  operator and (const a,b:ImGuiDragDropFlags):ImGuiDragDropFlags;
+  operator or (const a,b:ImGuiDragDropFlags):ImGuiDragDropFlags;
+  operator not(const a: ImGuiDragDropFlags): ImGuiDragDropFlags;
+
+  // ImGuiFocusRequestFlags
+  operator and (const a,b:ImGuiFocusRequestFlags):ImGuiFocusRequestFlags;
+  operator or (const a,b:ImGuiFocusRequestFlags):ImGuiFocusRequestFlags;
+  operator not(const a: ImGuiFocusRequestFlags): ImGuiFocusRequestFlags;
+
+  // ImGuiFocusedFlags
+  operator and (const a,b:ImGuiFocusedFlags):ImGuiFocusedFlags;
+  operator or (const a,b:ImGuiFocusedFlags):ImGuiFocusedFlags;
+  operator not(const a: ImGuiFocusedFlags): ImGuiFocusedFlags;
+
+  // ImGuiHoveredFlagsPrivate
+  operator and (const a,b:ImGuiHoveredFlagsPrivate):ImGuiHoveredFlagsPrivate;
+  operator or (const a,b:ImGuiHoveredFlagsPrivate):ImGuiHoveredFlagsPrivate;
+  operator not(const a: ImGuiHoveredFlagsPrivate): ImGuiHoveredFlagsPrivate;
+
+  // ImGuiHoveredFlags
+  operator and (const a,b:ImGuiHoveredFlags):ImGuiHoveredFlags;
+  operator or (const a,b:ImGuiHoveredFlags):ImGuiHoveredFlags;
+  operator not(const a: ImGuiHoveredFlags): ImGuiHoveredFlags;
+
+  // ImGuiInputEventType
+  operator and (const a,b:ImGuiInputEventType):ImGuiInputEventType;
+  operator or (const a,b:ImGuiInputEventType):ImGuiInputEventType;
+  operator not(const a: ImGuiInputEventType): ImGuiInputEventType;
+
+  // ImGuiInputFlags
+  operator and (const a,b:ImGuiInputFlags):ImGuiInputFlags;
+  operator or (const a,b:ImGuiInputFlags):ImGuiInputFlags;
+  operator not(const a: ImGuiInputFlags): ImGuiInputFlags;
+
+  // ImGuiInputSource
+  operator and (const a,b:ImGuiInputSource):ImGuiInputSource;
+  operator or (const a,b:ImGuiInputSource):ImGuiInputSource;
+  operator not(const a: ImGuiInputSource): ImGuiInputSource;
+
+  // ImGuiInputTextFlagsPrivate
+  operator and (const a,b:ImGuiInputTextFlagsPrivate):ImGuiInputTextFlagsPrivate;
+  operator or (const a,b:ImGuiInputTextFlagsPrivate):ImGuiInputTextFlagsPrivate;
+  operator not(const a: ImGuiInputTextFlagsPrivate): ImGuiInputTextFlagsPrivate;
+
+  // ImGuiInputTextFlags
+  operator and (const a,b:ImGuiInputTextFlags):ImGuiInputTextFlags;
+  operator or (const a,b:ImGuiInputTextFlags):ImGuiInputTextFlags;
+  operator not(const a: ImGuiInputTextFlags): ImGuiInputTextFlags;
+
+  // ImGuiItemFlags
+  operator and (const a,b:ImGuiItemFlags):ImGuiItemFlags;
+  operator or (const a,b:ImGuiItemFlags):ImGuiItemFlags;
+  operator not(const a: ImGuiItemFlags): ImGuiItemFlags;
+
+  // ImGuiItemStatusFlags
+  operator and (const a,b:ImGuiItemStatusFlags):ImGuiItemStatusFlags;
+  operator or (const a,b:ImGuiItemStatusFlags):ImGuiItemStatusFlags;
+  operator not(const a: ImGuiItemStatusFlags): ImGuiItemStatusFlags;
+
+  // ImGuiKey
+  operator and (const a,b:ImGuiKey):ImGuiKey;
+  operator or (const a,b:ImGuiKey):ImGuiKey;
+  operator not(const a: ImGuiKey): ImGuiKey;
+
+  // ImGuiLayoutType
+  operator and (const a,b:ImGuiLayoutType):ImGuiLayoutType;
+  operator or (const a,b:ImGuiLayoutType):ImGuiLayoutType;
+  operator not(const a: ImGuiLayoutType): ImGuiLayoutType;
+
+  // ImGuiLocKey
+  operator and (const a,b:ImGuiLocKey):ImGuiLocKey;
+  operator or (const a,b:ImGuiLocKey):ImGuiLocKey;
+  operator not(const a: ImGuiLocKey): ImGuiLocKey;
+
+  // ImGuiLogType
+  operator and (const a,b:ImGuiLogType):ImGuiLogType;
+  operator or (const a,b:ImGuiLogType):ImGuiLogType;
+  operator not(const a: ImGuiLogType): ImGuiLogType;
+
+  // ImGuiMouseButton
+  operator and (const a,b:ImGuiMouseButton):ImGuiMouseButton;
+  operator or (const a,b:ImGuiMouseButton):ImGuiMouseButton;
+  operator not(const a: ImGuiMouseButton): ImGuiMouseButton;
+
+  // ImGuiMouseCursor
+  operator and (const a,b:ImGuiMouseCursor):ImGuiMouseCursor;
+  operator or (const a,b:ImGuiMouseCursor):ImGuiMouseCursor;
+  operator not(const a: ImGuiMouseCursor): ImGuiMouseCursor;
+
+  // ImGuiMouseSource
+  operator and (const a,b:ImGuiMouseSource):ImGuiMouseSource;
+  operator or (const a,b:ImGuiMouseSource):ImGuiMouseSource;
+  operator not(const a: ImGuiMouseSource): ImGuiMouseSource;
+
+  // ImGuiNavHighlightFlags
+  operator and (const a,b:ImGuiNavHighlightFlags):ImGuiNavHighlightFlags;
+  operator or (const a,b:ImGuiNavHighlightFlags):ImGuiNavHighlightFlags;
+  operator not(const a: ImGuiNavHighlightFlags): ImGuiNavHighlightFlags;
+
+  // ImGuiNavInput
+  operator and (const a,b:ImGuiNavInput):ImGuiNavInput;
+  operator or (const a,b:ImGuiNavInput):ImGuiNavInput;
+  operator not(const a: ImGuiNavInput): ImGuiNavInput;
+
+  // ImGuiNavLayer
+  operator and (const a,b:ImGuiNavLayer):ImGuiNavLayer;
+  operator or (const a,b:ImGuiNavLayer):ImGuiNavLayer;
+  operator not(const a: ImGuiNavLayer): ImGuiNavLayer;
+
+  // ImGuiNavMoveFlags
+  operator and (const a,b:ImGuiNavMoveFlags):ImGuiNavMoveFlags;
+  operator or (const a,b:ImGuiNavMoveFlags):ImGuiNavMoveFlags;
+  operator not(const a: ImGuiNavMoveFlags): ImGuiNavMoveFlags;
+
+  // ImGuiNextItemDataFlags
+  operator and (const a,b:ImGuiNextItemDataFlags):ImGuiNextItemDataFlags;
+  operator or (const a,b:ImGuiNextItemDataFlags):ImGuiNextItemDataFlags;
+  operator not(const a: ImGuiNextItemDataFlags): ImGuiNextItemDataFlags;
+
+  // ImGuiNextWindowDataFlags
+  operator and (const a,b:ImGuiNextWindowDataFlags):ImGuiNextWindowDataFlags;
+  operator or (const a,b:ImGuiNextWindowDataFlags):ImGuiNextWindowDataFlags;
+  operator not(const a: ImGuiNextWindowDataFlags): ImGuiNextWindowDataFlags;
+
+  // ImGuiOldColumnFlags
+  operator and (const a,b:ImGuiOldColumnFlags):ImGuiOldColumnFlags;
+  operator or (const a,b:ImGuiOldColumnFlags):ImGuiOldColumnFlags;
+  operator not(const a: ImGuiOldColumnFlags): ImGuiOldColumnFlags;
+
+  // ImGuiPlotType
+  operator and (const a,b:ImGuiPlotType):ImGuiPlotType;
+  operator or (const a,b:ImGuiPlotType):ImGuiPlotType;
+  operator not(const a: ImGuiPlotType): ImGuiPlotType;
+
+  // ImGuiPopupFlags
+  operator and (const a,b:ImGuiPopupFlags):ImGuiPopupFlags;
+  operator or (const a,b:ImGuiPopupFlags):ImGuiPopupFlags;
+  operator not(const a: ImGuiPopupFlags): ImGuiPopupFlags;
+
+  // ImGuiPopupPositionPolicy
+  operator and (const a,b:ImGuiPopupPositionPolicy):ImGuiPopupPositionPolicy;
+  operator or (const a,b:ImGuiPopupPositionPolicy):ImGuiPopupPositionPolicy;
+  operator not(const a: ImGuiPopupPositionPolicy): ImGuiPopupPositionPolicy;
+
+  // ImGuiScrollFlags
+  operator and (const a,b:ImGuiScrollFlags):ImGuiScrollFlags;
+  operator or (const a,b:ImGuiScrollFlags):ImGuiScrollFlags;
+  operator not(const a: ImGuiScrollFlags): ImGuiScrollFlags;
+
+  // ImGuiSelectableFlagsPrivate
+  operator and (const a,b:ImGuiSelectableFlagsPrivate):ImGuiSelectableFlagsPrivate;
+  operator or (const a,b:ImGuiSelectableFlagsPrivate):ImGuiSelectableFlagsPrivate;
+  operator not(const a: ImGuiSelectableFlagsPrivate): ImGuiSelectableFlagsPrivate;
+
+  // ImGuiSelectableFlags
+  operator and (const a,b:ImGuiSelectableFlags):ImGuiSelectableFlags;
+  operator or (const a,b:ImGuiSelectableFlags):ImGuiSelectableFlags;
+  operator not(const a: ImGuiSelectableFlags): ImGuiSelectableFlags;
+
+  // ImGuiSeparatorFlags
+  operator and (const a,b:ImGuiSeparatorFlags):ImGuiSeparatorFlags;
+  operator or (const a,b:ImGuiSeparatorFlags):ImGuiSeparatorFlags;
+  operator not(const a: ImGuiSeparatorFlags): ImGuiSeparatorFlags;
+
+  // ImGuiSliderFlagsPrivate
+  operator and (const a,b:ImGuiSliderFlagsPrivate):ImGuiSliderFlagsPrivate;
+  operator or (const a,b:ImGuiSliderFlagsPrivate):ImGuiSliderFlagsPrivate;
+  operator not(const a: ImGuiSliderFlagsPrivate): ImGuiSliderFlagsPrivate;
+
+  // ImGuiSliderFlags
+  operator and (const a,b:ImGuiSliderFlags):ImGuiSliderFlags;
+  operator or (const a,b:ImGuiSliderFlags):ImGuiSliderFlags;
+  operator not(const a: ImGuiSliderFlags): ImGuiSliderFlags;
+
+  // ImGuiSortDirection
+  operator and (const a,b:ImGuiSortDirection):ImGuiSortDirection;
+  operator or (const a,b:ImGuiSortDirection):ImGuiSortDirection;
+  operator not(const a: ImGuiSortDirection): ImGuiSortDirection;
+
+  // ImGuiStyleVar
+  operator and (const a,b:ImGuiStyleVar):ImGuiStyleVar;
+  operator or (const a,b:ImGuiStyleVar):ImGuiStyleVar;
+  operator not(const a: ImGuiStyleVar): ImGuiStyleVar;
+
+  // ImGuiTabBarFlagsPrivate
+  operator and (const a,b:ImGuiTabBarFlagsPrivate):ImGuiTabBarFlagsPrivate;
+  operator or (const a,b:ImGuiTabBarFlagsPrivate):ImGuiTabBarFlagsPrivate;
+  operator not(const a: ImGuiTabBarFlagsPrivate): ImGuiTabBarFlagsPrivate;
+
+  // ImGuiTabBarFlags
+  operator and (const a,b:ImGuiTabBarFlags):ImGuiTabBarFlags;
+  operator or (const a,b:ImGuiTabBarFlags):ImGuiTabBarFlags;
+  operator not(const a: ImGuiTabBarFlags): ImGuiTabBarFlags;
+
+  // ImGuiTabItemFlagsPrivate
+  operator and (const a,b:ImGuiTabItemFlagsPrivate):ImGuiTabItemFlagsPrivate;
+  operator or (const a,b:ImGuiTabItemFlagsPrivate):ImGuiTabItemFlagsPrivate;
+  operator not(const a: ImGuiTabItemFlagsPrivate): ImGuiTabItemFlagsPrivate;
+
+  // ImGuiTabItemFlags
+  operator and (const a,b:ImGuiTabItemFlags):ImGuiTabItemFlags;
+  operator or (const a,b:ImGuiTabItemFlags):ImGuiTabItemFlags;
+  operator not(const a: ImGuiTabItemFlags): ImGuiTabItemFlags;
+
+  // ImGuiTableBgTarget
+  operator and (const a,b:ImGuiTableBgTarget):ImGuiTableBgTarget;
+  operator or (const a,b:ImGuiTableBgTarget):ImGuiTableBgTarget;
+  operator not(const a: ImGuiTableBgTarget): ImGuiTableBgTarget;
+
+  // ImGuiTableColumnFlags
+  operator and (const a,b:ImGuiTableColumnFlags):ImGuiTableColumnFlags;
+  operator or (const a,b:ImGuiTableColumnFlags):ImGuiTableColumnFlags;
+  operator not(const a: ImGuiTableColumnFlags): ImGuiTableColumnFlags;
+
+  // ImGuiTableFlags
+  operator and (const a,b:ImGuiTableFlags):ImGuiTableFlags;
+  operator or (const a,b:ImGuiTableFlags):ImGuiTableFlags;
+  operator not(const a: ImGuiTableFlags): ImGuiTableFlags;
+
+  // ImGuiTableRowFlags
+  operator and (const a,b:ImGuiTableRowFlags):ImGuiTableRowFlags;
+  operator or (const a,b:ImGuiTableRowFlags):ImGuiTableRowFlags;
+  operator not(const a: ImGuiTableRowFlags): ImGuiTableRowFlags;
+
+  // ImGuiTextFlags
+  operator and (const a,b:ImGuiTextFlags):ImGuiTextFlags;
+  operator or (const a,b:ImGuiTextFlags):ImGuiTextFlags;
+  operator not(const a: ImGuiTextFlags): ImGuiTextFlags;
+
+  // ImGuiTooltipFlags
+  operator and (const a,b:ImGuiTooltipFlags):ImGuiTooltipFlags;
+  operator or (const a,b:ImGuiTooltipFlags):ImGuiTooltipFlags;
+  operator not(const a: ImGuiTooltipFlags): ImGuiTooltipFlags;
+
+  // ImGuiTreeNodeFlagsPrivate
+  operator and (const a,b:ImGuiTreeNodeFlagsPrivate):ImGuiTreeNodeFlagsPrivate;
+  operator or (const a,b:ImGuiTreeNodeFlagsPrivate):ImGuiTreeNodeFlagsPrivate;
+  operator not(const a: ImGuiTreeNodeFlagsPrivate): ImGuiTreeNodeFlagsPrivate;
+
+  // ImGuiTreeNodeFlags
+  operator and (const a,b:ImGuiTreeNodeFlags):ImGuiTreeNodeFlags;
+  operator or (const a,b:ImGuiTreeNodeFlags):ImGuiTreeNodeFlags;
+  operator not(const a: ImGuiTreeNodeFlags): ImGuiTreeNodeFlags;
+
+  // ImGuiTypingSelectFlags
+  operator and (const a,b:ImGuiTypingSelectFlags):ImGuiTypingSelectFlags;
+  operator or (const a,b:ImGuiTypingSelectFlags):ImGuiTypingSelectFlags;
+  operator not(const a: ImGuiTypingSelectFlags): ImGuiTypingSelectFlags;
+
+  // ImGuiViewportFlags
+  operator and (const a,b:ImGuiViewportFlags):ImGuiViewportFlags;
+  operator or (const a,b:ImGuiViewportFlags):ImGuiViewportFlags;
+  operator not(const a: ImGuiViewportFlags): ImGuiViewportFlags;
+
+  // ImGuiWindowDockStyleCol
+  operator and (const a,b:ImGuiWindowDockStyleCol):ImGuiWindowDockStyleCol;
+  operator or (const a,b:ImGuiWindowDockStyleCol):ImGuiWindowDockStyleCol;
+  operator not(const a: ImGuiWindowDockStyleCol): ImGuiWindowDockStyleCol;
+
+  // ImGuiWindowFlags
+  operator and (const a,b:ImGuiWindowFlags):ImGuiWindowFlags;
+  operator or (const a,b:ImGuiWindowFlags):ImGuiWindowFlags;
+  operator not(const a: ImGuiWindowFlags): ImGuiWindowFlags;
+implementation
+
+// ImDrawFlags
+operator and (const a,b:ImDrawFlags):ImDrawFlags;inline;
+begin
+  Result:= ImDrawFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImDrawFlags):ImDrawFlags;inline;
+begin
+  Result:= ImDrawFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImDrawFlags): ImDrawFlags;
+begin
+  Result:= ImDrawFlags(not Ord(a));
+end;
+
+// ImDrawListFlags
+operator and (const a,b:ImDrawListFlags):ImDrawListFlags;inline;
+begin
+  Result:= ImDrawListFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImDrawListFlags):ImDrawListFlags;inline;
+begin
+  Result:= ImDrawListFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImDrawListFlags): ImDrawListFlags;
+begin
+  Result:= ImDrawListFlags(not Ord(a));
+end;
+
+// ImFontAtlasFlags
+operator and (const a,b:ImFontAtlasFlags):ImFontAtlasFlags;inline;
+begin
+  Result:= ImFontAtlasFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImFontAtlasFlags):ImFontAtlasFlags;inline;
+begin
+  Result:= ImFontAtlasFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImFontAtlasFlags): ImFontAtlasFlags;
+begin
+  Result:= ImFontAtlasFlags(not Ord(a));
+end;
+
+// ImGuiActivateFlags
+operator and (const a,b:ImGuiActivateFlags):ImGuiActivateFlags;inline;
+begin
+  Result:= ImGuiActivateFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiActivateFlags):ImGuiActivateFlags;inline;
+begin
+  Result:= ImGuiActivateFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiActivateFlags): ImGuiActivateFlags;
+begin
+  Result:= ImGuiActivateFlags(not Ord(a));
+end;
+
+// ImGuiAxis
+operator and (const a,b:ImGuiAxis):ImGuiAxis;inline;
+begin
+  Result:= ImGuiAxis(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiAxis):ImGuiAxis;inline;
+begin
+  Result:= ImGuiAxis(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiAxis): ImGuiAxis;
+begin
+  Result:= ImGuiAxis(not Ord(a));
+end;
+
+// ImGuiBackendFlags
+operator and (const a,b:ImGuiBackendFlags):ImGuiBackendFlags;inline;
+begin
+  Result:= ImGuiBackendFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiBackendFlags):ImGuiBackendFlags;inline;
+begin
+  Result:= ImGuiBackendFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiBackendFlags): ImGuiBackendFlags;
+begin
+  Result:= ImGuiBackendFlags(not Ord(a));
+end;
+
+// ImGuiButtonFlagsPrivate
+operator and (const a,b:ImGuiButtonFlagsPrivate):ImGuiButtonFlagsPrivate;inline;
+begin
+  Result:= ImGuiButtonFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiButtonFlagsPrivate):ImGuiButtonFlagsPrivate;inline;
+begin
+  Result:= ImGuiButtonFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiButtonFlagsPrivate): ImGuiButtonFlagsPrivate;
+begin
+  Result:= ImGuiButtonFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiButtonFlags
+operator and (const a,b:ImGuiButtonFlags):ImGuiButtonFlags;inline;
+begin
+  Result:= ImGuiButtonFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiButtonFlags):ImGuiButtonFlags;inline;
+begin
+  Result:= ImGuiButtonFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiButtonFlags): ImGuiButtonFlags;
+begin
+  Result:= ImGuiButtonFlags(not Ord(a));
+end;
+
+// ImGuiChildFlags
+operator and (const a,b:ImGuiChildFlags):ImGuiChildFlags;inline;
+begin
+  Result:= ImGuiChildFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiChildFlags):ImGuiChildFlags;inline;
+begin
+  Result:= ImGuiChildFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiChildFlags): ImGuiChildFlags;
+begin
+  Result:= ImGuiChildFlags(not Ord(a));
+end;
+
+// ImGuiCol
+operator and (const a,b:ImGuiCol):ImGuiCol;inline;
+begin
+  Result:= ImGuiCol(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiCol):ImGuiCol;inline;
+begin
+  Result:= ImGuiCol(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiCol): ImGuiCol;
+begin
+  Result:= ImGuiCol(not Ord(a));
+end;
+
+// ImGuiColorEditFlags
+operator and (const a,b:ImGuiColorEditFlags):ImGuiColorEditFlags;inline;
+begin
+  Result:= ImGuiColorEditFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiColorEditFlags):ImGuiColorEditFlags;inline;
+begin
+  Result:= ImGuiColorEditFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiColorEditFlags): ImGuiColorEditFlags;
+begin
+  Result:= ImGuiColorEditFlags(not Ord(a));
+end;
+
+// ImGuiComboFlagsPrivate
+operator and (const a,b:ImGuiComboFlagsPrivate):ImGuiComboFlagsPrivate;inline;
+begin
+  Result:= ImGuiComboFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiComboFlagsPrivate):ImGuiComboFlagsPrivate;inline;
+begin
+  Result:= ImGuiComboFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiComboFlagsPrivate): ImGuiComboFlagsPrivate;
+begin
+  Result:= ImGuiComboFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiComboFlags
+operator and (const a,b:ImGuiComboFlags):ImGuiComboFlags;inline;
+begin
+  Result:= ImGuiComboFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiComboFlags):ImGuiComboFlags;inline;
+begin
+  Result:= ImGuiComboFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiComboFlags): ImGuiComboFlags;
+begin
+  Result:= ImGuiComboFlags(not Ord(a));
+end;
+
+// ImGuiCond
+operator and (const a,b:ImGuiCond):ImGuiCond;inline;
+begin
+  Result:= ImGuiCond(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiCond):ImGuiCond;inline;
+begin
+  Result:= ImGuiCond(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiCond): ImGuiCond;
+begin
+  Result:= ImGuiCond(not Ord(a));
+end;
+
+// ImGuiConfigFlags
+operator and (const a,b:ImGuiConfigFlags):ImGuiConfigFlags;inline;
+begin
+  Result:= ImGuiConfigFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiConfigFlags):ImGuiConfigFlags;inline;
+begin
+  Result:= ImGuiConfigFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiConfigFlags): ImGuiConfigFlags;
+begin
+  Result:= ImGuiConfigFlags(not Ord(a));
+end;
+
+// ImGuiContextHookType
+operator and (const a,b:ImGuiContextHookType):ImGuiContextHookType;inline;
+begin
+  Result:= ImGuiContextHookType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiContextHookType):ImGuiContextHookType;inline;
+begin
+  Result:= ImGuiContextHookType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiContextHookType): ImGuiContextHookType;
+begin
+  Result:= ImGuiContextHookType(not Ord(a));
+end;
+
+// ImGuiDataAuthority
+operator and (const a,b:ImGuiDataAuthority):ImGuiDataAuthority;inline;
+begin
+  Result:= ImGuiDataAuthority(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDataAuthority):ImGuiDataAuthority;inline;
+begin
+  Result:= ImGuiDataAuthority(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDataAuthority): ImGuiDataAuthority;
+begin
+  Result:= ImGuiDataAuthority(not Ord(a));
+end;
+
+// ImGuiDataTypePrivate
+operator and (const a,b:ImGuiDataTypePrivate):ImGuiDataTypePrivate;inline;
+begin
+  Result:= ImGuiDataTypePrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDataTypePrivate):ImGuiDataTypePrivate;inline;
+begin
+  Result:= ImGuiDataTypePrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDataTypePrivate): ImGuiDataTypePrivate;
+begin
+  Result:= ImGuiDataTypePrivate(not Ord(a));
+end;
+
+// ImGuiDataType
+operator and (const a,b:ImGuiDataType):ImGuiDataType;inline;
+begin
+  Result:= ImGuiDataType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDataType):ImGuiDataType;inline;
+begin
+  Result:= ImGuiDataType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDataType): ImGuiDataType;
+begin
+  Result:= ImGuiDataType(not Ord(a));
+end;
+
+// ImGuiDebugLogFlags
+operator and (const a,b:ImGuiDebugLogFlags):ImGuiDebugLogFlags;inline;
+begin
+  Result:= ImGuiDebugLogFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDebugLogFlags):ImGuiDebugLogFlags;inline;
+begin
+  Result:= ImGuiDebugLogFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDebugLogFlags): ImGuiDebugLogFlags;
+begin
+  Result:= ImGuiDebugLogFlags(not Ord(a));
+end;
+
+// ImGuiDir
+operator and (const a,b:ImGuiDir):ImGuiDir;inline;
+begin
+  Result:= ImGuiDir(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDir):ImGuiDir;inline;
+begin
+  Result:= ImGuiDir(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDir): ImGuiDir;
+begin
+  Result:= ImGuiDir(not Ord(a));
+end;
+
+// ImGuiDockNodeFlagsPrivate
+operator and (const a,b:ImGuiDockNodeFlagsPrivate):ImGuiDockNodeFlagsPrivate;inline;
+begin
+  Result:= ImGuiDockNodeFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDockNodeFlagsPrivate):ImGuiDockNodeFlagsPrivate;inline;
+begin
+  Result:= ImGuiDockNodeFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDockNodeFlagsPrivate): ImGuiDockNodeFlagsPrivate;
+begin
+  Result:= ImGuiDockNodeFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiDockNodeFlags
+operator and (const a,b:ImGuiDockNodeFlags):ImGuiDockNodeFlags;inline;
+begin
+  Result:= ImGuiDockNodeFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDockNodeFlags):ImGuiDockNodeFlags;inline;
+begin
+  Result:= ImGuiDockNodeFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDockNodeFlags): ImGuiDockNodeFlags;
+begin
+  Result:= ImGuiDockNodeFlags(not Ord(a));
+end;
+
+// ImGuiDockNodeState
+operator and (const a,b:ImGuiDockNodeState):ImGuiDockNodeState;inline;
+begin
+  Result:= ImGuiDockNodeState(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDockNodeState):ImGuiDockNodeState;inline;
+begin
+  Result:= ImGuiDockNodeState(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDockNodeState): ImGuiDockNodeState;
+begin
+  Result:= ImGuiDockNodeState(not Ord(a));
+end;
+
+// ImGuiDragDropFlags
+operator and (const a,b:ImGuiDragDropFlags):ImGuiDragDropFlags;inline;
+begin
+  Result:= ImGuiDragDropFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiDragDropFlags):ImGuiDragDropFlags;inline;
+begin
+  Result:= ImGuiDragDropFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiDragDropFlags): ImGuiDragDropFlags;
+begin
+  Result:= ImGuiDragDropFlags(not Ord(a));
+end;
+
+// ImGuiFocusRequestFlags
+operator and (const a,b:ImGuiFocusRequestFlags):ImGuiFocusRequestFlags;inline;
+begin
+  Result:= ImGuiFocusRequestFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiFocusRequestFlags):ImGuiFocusRequestFlags;inline;
+begin
+  Result:= ImGuiFocusRequestFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiFocusRequestFlags): ImGuiFocusRequestFlags;
+begin
+  Result:= ImGuiFocusRequestFlags(not Ord(a));
+end;
+
+// ImGuiFocusedFlags
+operator and (const a,b:ImGuiFocusedFlags):ImGuiFocusedFlags;inline;
+begin
+  Result:= ImGuiFocusedFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiFocusedFlags):ImGuiFocusedFlags;inline;
+begin
+  Result:= ImGuiFocusedFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiFocusedFlags): ImGuiFocusedFlags;
+begin
+  Result:= ImGuiFocusedFlags(not Ord(a));
+end;
+
+// ImGuiHoveredFlagsPrivate
+operator and (const a,b:ImGuiHoveredFlagsPrivate):ImGuiHoveredFlagsPrivate;inline;
+begin
+  Result:= ImGuiHoveredFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiHoveredFlagsPrivate):ImGuiHoveredFlagsPrivate;inline;
+begin
+  Result:= ImGuiHoveredFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiHoveredFlagsPrivate): ImGuiHoveredFlagsPrivate;
+begin
+  Result:= ImGuiHoveredFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiHoveredFlags
+operator and (const a,b:ImGuiHoveredFlags):ImGuiHoveredFlags;inline;
+begin
+  Result:= ImGuiHoveredFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiHoveredFlags):ImGuiHoveredFlags;inline;
+begin
+  Result:= ImGuiHoveredFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiHoveredFlags): ImGuiHoveredFlags;
+begin
+  Result:= ImGuiHoveredFlags(not Ord(a));
+end;
+
+// ImGuiInputEventType
+operator and (const a,b:ImGuiInputEventType):ImGuiInputEventType;inline;
+begin
+  Result:= ImGuiInputEventType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiInputEventType):ImGuiInputEventType;inline;
+begin
+  Result:= ImGuiInputEventType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiInputEventType): ImGuiInputEventType;
+begin
+  Result:= ImGuiInputEventType(not Ord(a));
+end;
+
+// ImGuiInputFlags
+operator and (const a,b:ImGuiInputFlags):ImGuiInputFlags;inline;
+begin
+  Result:= ImGuiInputFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiInputFlags):ImGuiInputFlags;inline;
+begin
+  Result:= ImGuiInputFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiInputFlags): ImGuiInputFlags;
+begin
+  Result:= ImGuiInputFlags(not Ord(a));
+end;
+
+// ImGuiInputSource
+operator and (const a,b:ImGuiInputSource):ImGuiInputSource;inline;
+begin
+  Result:= ImGuiInputSource(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiInputSource):ImGuiInputSource;inline;
+begin
+  Result:= ImGuiInputSource(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiInputSource): ImGuiInputSource;
+begin
+  Result:= ImGuiInputSource(not Ord(a));
+end;
+
+// ImGuiInputTextFlagsPrivate
+operator and (const a,b:ImGuiInputTextFlagsPrivate):ImGuiInputTextFlagsPrivate;inline;
+begin
+  Result:= ImGuiInputTextFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiInputTextFlagsPrivate):ImGuiInputTextFlagsPrivate;inline;
+begin
+  Result:= ImGuiInputTextFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiInputTextFlagsPrivate): ImGuiInputTextFlagsPrivate;
+begin
+  Result:= ImGuiInputTextFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiInputTextFlags
+operator and (const a,b:ImGuiInputTextFlags):ImGuiInputTextFlags;inline;
+begin
+  Result:= ImGuiInputTextFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiInputTextFlags):ImGuiInputTextFlags;inline;
+begin
+  Result:= ImGuiInputTextFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiInputTextFlags): ImGuiInputTextFlags;
+begin
+  Result:= ImGuiInputTextFlags(not Ord(a));
+end;
+
+// ImGuiItemFlags
+operator and (const a,b:ImGuiItemFlags):ImGuiItemFlags;inline;
+begin
+  Result:= ImGuiItemFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiItemFlags):ImGuiItemFlags;inline;
+begin
+  Result:= ImGuiItemFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiItemFlags): ImGuiItemFlags;
+begin
+  Result:= ImGuiItemFlags(not Ord(a));
+end;
+
+// ImGuiItemStatusFlags
+operator and (const a,b:ImGuiItemStatusFlags):ImGuiItemStatusFlags;inline;
+begin
+  Result:= ImGuiItemStatusFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiItemStatusFlags):ImGuiItemStatusFlags;inline;
+begin
+  Result:= ImGuiItemStatusFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiItemStatusFlags): ImGuiItemStatusFlags;
+begin
+  Result:= ImGuiItemStatusFlags(not Ord(a));
+end;
+
+// ImGuiKey
+operator and (const a,b:ImGuiKey):ImGuiKey;inline;
+begin
+  Result:= ImGuiKey(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiKey):ImGuiKey;inline;
+begin
+  Result:= ImGuiKey(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiKey): ImGuiKey;
+begin
+  Result:= ImGuiKey(not Ord(a));
+end;
+
+// ImGuiLayoutType
+operator and (const a,b:ImGuiLayoutType):ImGuiLayoutType;inline;
+begin
+  Result:= ImGuiLayoutType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiLayoutType):ImGuiLayoutType;inline;
+begin
+  Result:= ImGuiLayoutType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiLayoutType): ImGuiLayoutType;
+begin
+  Result:= ImGuiLayoutType(not Ord(a));
+end;
+
+// ImGuiLocKey
+operator and (const a,b:ImGuiLocKey):ImGuiLocKey;inline;
+begin
+  Result:= ImGuiLocKey(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiLocKey):ImGuiLocKey;inline;
+begin
+  Result:= ImGuiLocKey(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiLocKey): ImGuiLocKey;
+begin
+  Result:= ImGuiLocKey(not Ord(a));
+end;
+
+// ImGuiLogType
+operator and (const a,b:ImGuiLogType):ImGuiLogType;inline;
+begin
+  Result:= ImGuiLogType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiLogType):ImGuiLogType;inline;
+begin
+  Result:= ImGuiLogType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiLogType): ImGuiLogType;
+begin
+  Result:= ImGuiLogType(not Ord(a));
+end;
+
+// ImGuiMouseButton
+operator and (const a,b:ImGuiMouseButton):ImGuiMouseButton;inline;
+begin
+  Result:= ImGuiMouseButton(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiMouseButton):ImGuiMouseButton;inline;
+begin
+  Result:= ImGuiMouseButton(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiMouseButton): ImGuiMouseButton;
+begin
+  Result:= ImGuiMouseButton(not Ord(a));
+end;
+
+// ImGuiMouseCursor
+operator and (const a,b:ImGuiMouseCursor):ImGuiMouseCursor;inline;
+begin
+  Result:= ImGuiMouseCursor(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiMouseCursor):ImGuiMouseCursor;inline;
+begin
+  Result:= ImGuiMouseCursor(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiMouseCursor): ImGuiMouseCursor;
+begin
+  Result:= ImGuiMouseCursor(not Ord(a));
+end;
+
+// ImGuiMouseSource
+operator and (const a,b:ImGuiMouseSource):ImGuiMouseSource;inline;
+begin
+  Result:= ImGuiMouseSource(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiMouseSource):ImGuiMouseSource;inline;
+begin
+  Result:= ImGuiMouseSource(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiMouseSource): ImGuiMouseSource;
+begin
+  Result:= ImGuiMouseSource(not Ord(a));
+end;
+
+// ImGuiNavHighlightFlags
+operator and (const a,b:ImGuiNavHighlightFlags):ImGuiNavHighlightFlags;inline;
+begin
+  Result:= ImGuiNavHighlightFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNavHighlightFlags):ImGuiNavHighlightFlags;inline;
+begin
+  Result:= ImGuiNavHighlightFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNavHighlightFlags): ImGuiNavHighlightFlags;
+begin
+  Result:= ImGuiNavHighlightFlags(not Ord(a));
+end;
+
+// ImGuiNavInput
+operator and (const a,b:ImGuiNavInput):ImGuiNavInput;inline;
+begin
+  Result:= ImGuiNavInput(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNavInput):ImGuiNavInput;inline;
+begin
+  Result:= ImGuiNavInput(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNavInput): ImGuiNavInput;
+begin
+  Result:= ImGuiNavInput(not Ord(a));
+end;
+
+// ImGuiNavLayer
+operator and (const a,b:ImGuiNavLayer):ImGuiNavLayer;inline;
+begin
+  Result:= ImGuiNavLayer(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNavLayer):ImGuiNavLayer;inline;
+begin
+  Result:= ImGuiNavLayer(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNavLayer): ImGuiNavLayer;
+begin
+  Result:= ImGuiNavLayer(not Ord(a));
+end;
+
+// ImGuiNavMoveFlags
+operator and (const a,b:ImGuiNavMoveFlags):ImGuiNavMoveFlags;inline;
+begin
+  Result:= ImGuiNavMoveFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNavMoveFlags):ImGuiNavMoveFlags;inline;
+begin
+  Result:= ImGuiNavMoveFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNavMoveFlags): ImGuiNavMoveFlags;
+begin
+  Result:= ImGuiNavMoveFlags(not Ord(a));
+end;
+
+// ImGuiNextItemDataFlags
+operator and (const a,b:ImGuiNextItemDataFlags):ImGuiNextItemDataFlags;inline;
+begin
+  Result:= ImGuiNextItemDataFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNextItemDataFlags):ImGuiNextItemDataFlags;inline;
+begin
+  Result:= ImGuiNextItemDataFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNextItemDataFlags): ImGuiNextItemDataFlags;
+begin
+  Result:= ImGuiNextItemDataFlags(not Ord(a));
+end;
+
+// ImGuiNextWindowDataFlags
+operator and (const a,b:ImGuiNextWindowDataFlags):ImGuiNextWindowDataFlags;inline;
+begin
+  Result:= ImGuiNextWindowDataFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiNextWindowDataFlags):ImGuiNextWindowDataFlags;inline;
+begin
+  Result:= ImGuiNextWindowDataFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiNextWindowDataFlags): ImGuiNextWindowDataFlags;
+begin
+  Result:= ImGuiNextWindowDataFlags(not Ord(a));
+end;
+
+// ImGuiOldColumnFlags
+operator and (const a,b:ImGuiOldColumnFlags):ImGuiOldColumnFlags;inline;
+begin
+  Result:= ImGuiOldColumnFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiOldColumnFlags):ImGuiOldColumnFlags;inline;
+begin
+  Result:= ImGuiOldColumnFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiOldColumnFlags): ImGuiOldColumnFlags;
+begin
+  Result:= ImGuiOldColumnFlags(not Ord(a));
+end;
+
+// ImGuiPlotType
+operator and (const a,b:ImGuiPlotType):ImGuiPlotType;inline;
+begin
+  Result:= ImGuiPlotType(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiPlotType):ImGuiPlotType;inline;
+begin
+  Result:= ImGuiPlotType(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiPlotType): ImGuiPlotType;
+begin
+  Result:= ImGuiPlotType(not Ord(a));
+end;
+
+// ImGuiPopupFlags
+operator and (const a,b:ImGuiPopupFlags):ImGuiPopupFlags;inline;
+begin
+  Result:= ImGuiPopupFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiPopupFlags):ImGuiPopupFlags;inline;
+begin
+  Result:= ImGuiPopupFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiPopupFlags): ImGuiPopupFlags;
+begin
+  Result:= ImGuiPopupFlags(not Ord(a));
+end;
+
+// ImGuiPopupPositionPolicy
+operator and (const a,b:ImGuiPopupPositionPolicy):ImGuiPopupPositionPolicy;inline;
+begin
+  Result:= ImGuiPopupPositionPolicy(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiPopupPositionPolicy):ImGuiPopupPositionPolicy;inline;
+begin
+  Result:= ImGuiPopupPositionPolicy(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiPopupPositionPolicy): ImGuiPopupPositionPolicy;
+begin
+  Result:= ImGuiPopupPositionPolicy(not Ord(a));
+end;
+
+// ImGuiScrollFlags
+operator and (const a,b:ImGuiScrollFlags):ImGuiScrollFlags;inline;
+begin
+  Result:= ImGuiScrollFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiScrollFlags):ImGuiScrollFlags;inline;
+begin
+  Result:= ImGuiScrollFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiScrollFlags): ImGuiScrollFlags;
+begin
+  Result:= ImGuiScrollFlags(not Ord(a));
+end;
+
+// ImGuiSelectableFlagsPrivate
+operator and (const a,b:ImGuiSelectableFlagsPrivate):ImGuiSelectableFlagsPrivate;inline;
+begin
+  Result:= ImGuiSelectableFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSelectableFlagsPrivate):ImGuiSelectableFlagsPrivate;inline;
+begin
+  Result:= ImGuiSelectableFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSelectableFlagsPrivate): ImGuiSelectableFlagsPrivate;
+begin
+  Result:= ImGuiSelectableFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiSelectableFlags
+operator and (const a,b:ImGuiSelectableFlags):ImGuiSelectableFlags;inline;
+begin
+  Result:= ImGuiSelectableFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSelectableFlags):ImGuiSelectableFlags;inline;
+begin
+  Result:= ImGuiSelectableFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSelectableFlags): ImGuiSelectableFlags;
+begin
+  Result:= ImGuiSelectableFlags(not Ord(a));
+end;
+
+// ImGuiSeparatorFlags
+operator and (const a,b:ImGuiSeparatorFlags):ImGuiSeparatorFlags;inline;
+begin
+  Result:= ImGuiSeparatorFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSeparatorFlags):ImGuiSeparatorFlags;inline;
+begin
+  Result:= ImGuiSeparatorFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSeparatorFlags): ImGuiSeparatorFlags;
+begin
+  Result:= ImGuiSeparatorFlags(not Ord(a));
+end;
+
+// ImGuiSliderFlagsPrivate
+operator and (const a,b:ImGuiSliderFlagsPrivate):ImGuiSliderFlagsPrivate;inline;
+begin
+  Result:= ImGuiSliderFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSliderFlagsPrivate):ImGuiSliderFlagsPrivate;inline;
+begin
+  Result:= ImGuiSliderFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSliderFlagsPrivate): ImGuiSliderFlagsPrivate;
+begin
+  Result:= ImGuiSliderFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiSliderFlags
+operator and (const a,b:ImGuiSliderFlags):ImGuiSliderFlags;inline;
+begin
+  Result:= ImGuiSliderFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSliderFlags):ImGuiSliderFlags;inline;
+begin
+  Result:= ImGuiSliderFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSliderFlags): ImGuiSliderFlags;
+begin
+  Result:= ImGuiSliderFlags(not Ord(a));
+end;
+
+// ImGuiSortDirection
+operator and (const a,b:ImGuiSortDirection):ImGuiSortDirection;inline;
+begin
+  Result:= ImGuiSortDirection(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiSortDirection):ImGuiSortDirection;inline;
+begin
+  Result:= ImGuiSortDirection(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiSortDirection): ImGuiSortDirection;
+begin
+  Result:= ImGuiSortDirection(not Ord(a));
+end;
+
+// ImGuiStyleVar
+operator and (const a,b:ImGuiStyleVar):ImGuiStyleVar;inline;
+begin
+  Result:= ImGuiStyleVar(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiStyleVar):ImGuiStyleVar;inline;
+begin
+  Result:= ImGuiStyleVar(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiStyleVar): ImGuiStyleVar;
+begin
+  Result:= ImGuiStyleVar(not Ord(a));
+end;
+
+// ImGuiTabBarFlagsPrivate
+operator and (const a,b:ImGuiTabBarFlagsPrivate):ImGuiTabBarFlagsPrivate;inline;
+begin
+  Result:= ImGuiTabBarFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTabBarFlagsPrivate):ImGuiTabBarFlagsPrivate;inline;
+begin
+  Result:= ImGuiTabBarFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTabBarFlagsPrivate): ImGuiTabBarFlagsPrivate;
+begin
+  Result:= ImGuiTabBarFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiTabBarFlags
+operator and (const a,b:ImGuiTabBarFlags):ImGuiTabBarFlags;inline;
+begin
+  Result:= ImGuiTabBarFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTabBarFlags):ImGuiTabBarFlags;inline;
+begin
+  Result:= ImGuiTabBarFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTabBarFlags): ImGuiTabBarFlags;
+begin
+  Result:= ImGuiTabBarFlags(not Ord(a));
+end;
+
+// ImGuiTabItemFlagsPrivate
+operator and (const a,b:ImGuiTabItemFlagsPrivate):ImGuiTabItemFlagsPrivate;inline;
+begin
+  Result:= ImGuiTabItemFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTabItemFlagsPrivate):ImGuiTabItemFlagsPrivate;inline;
+begin
+  Result:= ImGuiTabItemFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTabItemFlagsPrivate): ImGuiTabItemFlagsPrivate;
+begin
+  Result:= ImGuiTabItemFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiTabItemFlags
+operator and (const a,b:ImGuiTabItemFlags):ImGuiTabItemFlags;inline;
+begin
+  Result:= ImGuiTabItemFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTabItemFlags):ImGuiTabItemFlags;inline;
+begin
+  Result:= ImGuiTabItemFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTabItemFlags): ImGuiTabItemFlags;
+begin
+  Result:= ImGuiTabItemFlags(not Ord(a));
+end;
+
+// ImGuiTableBgTarget
+operator and (const a,b:ImGuiTableBgTarget):ImGuiTableBgTarget;inline;
+begin
+  Result:= ImGuiTableBgTarget(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTableBgTarget):ImGuiTableBgTarget;inline;
+begin
+  Result:= ImGuiTableBgTarget(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTableBgTarget): ImGuiTableBgTarget;
+begin
+  Result:= ImGuiTableBgTarget(not Ord(a));
+end;
+
+// ImGuiTableColumnFlags
+operator and (const a,b:ImGuiTableColumnFlags):ImGuiTableColumnFlags;inline;
+begin
+  Result:= ImGuiTableColumnFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTableColumnFlags):ImGuiTableColumnFlags;inline;
+begin
+  Result:= ImGuiTableColumnFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTableColumnFlags): ImGuiTableColumnFlags;
+begin
+  Result:= ImGuiTableColumnFlags(not Ord(a));
+end;
+
+// ImGuiTableFlags
+operator and (const a,b:ImGuiTableFlags):ImGuiTableFlags;inline;
+begin
+  Result:= ImGuiTableFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTableFlags):ImGuiTableFlags;inline;
+begin
+  Result:= ImGuiTableFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTableFlags): ImGuiTableFlags;
+begin
+  Result:= ImGuiTableFlags(not Ord(a));
+end;
+
+// ImGuiTableRowFlags
+operator and (const a,b:ImGuiTableRowFlags):ImGuiTableRowFlags;inline;
+begin
+  Result:= ImGuiTableRowFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTableRowFlags):ImGuiTableRowFlags;inline;
+begin
+  Result:= ImGuiTableRowFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTableRowFlags): ImGuiTableRowFlags;
+begin
+  Result:= ImGuiTableRowFlags(not Ord(a));
+end;
+
+// ImGuiTextFlags
+operator and (const a,b:ImGuiTextFlags):ImGuiTextFlags;inline;
+begin
+  Result:= ImGuiTextFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTextFlags):ImGuiTextFlags;inline;
+begin
+  Result:= ImGuiTextFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTextFlags): ImGuiTextFlags;
+begin
+  Result:= ImGuiTextFlags(not Ord(a));
+end;
+
+// ImGuiTooltipFlags
+operator and (const a,b:ImGuiTooltipFlags):ImGuiTooltipFlags;inline;
+begin
+  Result:= ImGuiTooltipFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTooltipFlags):ImGuiTooltipFlags;inline;
+begin
+  Result:= ImGuiTooltipFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTooltipFlags): ImGuiTooltipFlags;
+begin
+  Result:= ImGuiTooltipFlags(not Ord(a));
+end;
+
+// ImGuiTreeNodeFlagsPrivate
+operator and (const a,b:ImGuiTreeNodeFlagsPrivate):ImGuiTreeNodeFlagsPrivate;inline;
+begin
+  Result:= ImGuiTreeNodeFlagsPrivate(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTreeNodeFlagsPrivate):ImGuiTreeNodeFlagsPrivate;inline;
+begin
+  Result:= ImGuiTreeNodeFlagsPrivate(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTreeNodeFlagsPrivate): ImGuiTreeNodeFlagsPrivate;
+begin
+  Result:= ImGuiTreeNodeFlagsPrivate(not Ord(a));
+end;
+
+// ImGuiTreeNodeFlags
+operator and (const a,b:ImGuiTreeNodeFlags):ImGuiTreeNodeFlags;inline;
+begin
+  Result:= ImGuiTreeNodeFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTreeNodeFlags):ImGuiTreeNodeFlags;inline;
+begin
+  Result:= ImGuiTreeNodeFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTreeNodeFlags): ImGuiTreeNodeFlags;
+begin
+  Result:= ImGuiTreeNodeFlags(not Ord(a));
+end;
+
+// ImGuiTypingSelectFlags
+operator and (const a,b:ImGuiTypingSelectFlags):ImGuiTypingSelectFlags;inline;
+begin
+  Result:= ImGuiTypingSelectFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiTypingSelectFlags):ImGuiTypingSelectFlags;inline;
+begin
+  Result:= ImGuiTypingSelectFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiTypingSelectFlags): ImGuiTypingSelectFlags;
+begin
+  Result:= ImGuiTypingSelectFlags(not Ord(a));
+end;
+
+// ImGuiViewportFlags
+operator and (const a,b:ImGuiViewportFlags):ImGuiViewportFlags;inline;
+begin
+  Result:= ImGuiViewportFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiViewportFlags):ImGuiViewportFlags;inline;
+begin
+  Result:= ImGuiViewportFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiViewportFlags): ImGuiViewportFlags;
+begin
+  Result:= ImGuiViewportFlags(not Ord(a));
+end;
+
+// ImGuiWindowDockStyleCol
+operator and (const a,b:ImGuiWindowDockStyleCol):ImGuiWindowDockStyleCol;inline;
+begin
+  Result:= ImGuiWindowDockStyleCol(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiWindowDockStyleCol):ImGuiWindowDockStyleCol;inline;
+begin
+  Result:= ImGuiWindowDockStyleCol(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiWindowDockStyleCol): ImGuiWindowDockStyleCol;
+begin
+  Result:= ImGuiWindowDockStyleCol(not Ord(a));
+end;
+
+// ImGuiWindowFlags
+operator and (const a,b:ImGuiWindowFlags):ImGuiWindowFlags;inline;
+begin
+  Result:= ImGuiWindowFlags(Ord(a) and Ord(b));
+end;
+operator or (const a,b:ImGuiWindowFlags):ImGuiWindowFlags;inline;
+begin
+  Result:= ImGuiWindowFlags(Ord(a) or Ord(b));
+end;
+operator not(const a: ImGuiWindowFlags): ImGuiWindowFlags;
+begin
+  Result:= ImGuiWindowFlags(not Ord(a));
+end;
+
+End.
+

+ 2452 - 0
src/PasImGui.Types.pas

@@ -0,0 +1,2452 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+Unit PasImGui.Types;
+
+{$IfDef FPC}
+  {$mode Delphi}{$H+}
+  {$PACKRECORDS C}
+  {$PackEnum 4}
+  {$modeswitch advancedrecords}
+{$EndIf}
+
+Interface
+
+Uses
+  PasImGui.Enums;
+
+Const
+  FLT_MAX : Single = 3.40282347e+038; // This is the same as in compiled cimgui
+
+// Main Types
+Type
+  T30Bits = 0..1073741823;
+  T4Bits = 0..15;
+  T3Bits = 0..7;
+  T2Bits = 0..3;
+  T1Bit = 0..1;
+
+  size_t = NativeUInt;
+  ImS8 = Shortint;
+  ImU8 = Byte;
+  ImS16 = Smallint;
+  ImU16 = Word;
+  ImS32 = Longint;
+  ImU32 = Cardinal;
+  ImS64 = Int64;
+  ImU64 = QWord;
+  ImWchar16 = Word;
+  ImWchar32 = Cardinal;
+  ImWchar = ImWchar16;
+
+  ImTextureID = Pointer;
+  PImGuiKeyChord = ^ImGuiKeyChord;
+  PImTextureID = ^ImTextureID;
+  PImDrawIdx = ^ImDrawIdx;
+  PImGuiID = ^ImGuiID;
+  PImS8 = ^ImS8;
+  PImU8 = ^ImU8;
+  PImS16 = ^ImS16;
+  PImU16 = ^ImU16;
+  PImS32 = ^ImS32;
+  PImU32 = ^ImU32;
+  PImS64 = ^ImS64;
+  PImU64 = ^ImU64;
+
+  PPImS8  = ^PImS8;
+  PPImU8  = ^PImU8;
+  PPImS16 = ^PImS16;
+  PPImU16 = ^PImU16;
+  PPImS32 = ^PImS32;
+  PPImU32 = ^PImU32;
+  PPImS64 = ^PImS64;
+  PPImU64 = ^PImU64;
+
+  PSize_t = ^SIZE_T;
+  PImWchar16 = ^ImWchar16;
+  PImWchar32 = ^ImWchar32;
+  PImWchar = ^ImWchar;
+
+
+  PImGuiTableColumnIdx = ^ImGuiTableColumnIdx;
+  PImGuiTableDrawChannelIdx = ^ImGuiTableDrawChannelIdx;
+
+  PImGuiItemFlags = ^ImGuiItemFlags;
+
+  PImRect = ^ImRect;
+  ImPoolIdx = Integer;
+  PImGuiWindowTempData = ^ImGuiWindowTempData;
+  PImGuiWindowStackData = ^ImGuiWindowStackData;
+  PImGuiWindowSettings = ^ImGuiWindowSettings;
+  PImGuiWindowDockStyle = ^ImGuiWindowDockStyle;
+  PImGuiWindowClass = ^ImGuiWindowClass;
+  PImGuiWindow = ^ImGuiWindow;
+  PPImGuiWindow = ^PImGuiWindow;
+  PImGuiViewportP = ^ImGuiViewportP;
+  PImGuiViewport = ^ImGuiViewport;
+  PPImGuiViewport = ^PImGuiViewport;
+
+  PImGuiTypingSelectState = ^ImGuiTypingSelectState;
+  PImGuiTypingSelectRequest = ^ImGuiTypingSelectRequest;
+  PImGuiTextRange = ^ImGuiTextRange;
+  PImGuiTextIndex = ^ImGuiTextIndex;
+  PImGuiTextFilter = ^ImGuiTextFilter;
+  PImGuiTextBuffer = ^ImGuiTextBuffer;
+  PImGuiTableTempData = ^ImGuiTableTempData;
+  PImGuiTableSortSpecs = ^ImGuiTableSortSpecs;
+  PImGuiTableSettings = ^ImGuiTableSettings;
+  PImGuiTableInstanceData = ^ImGuiTableInstanceData;
+  ImGuiTableDrawChannelIdx = ImU16;
+  PImGuiTableColumnSortSpecs = ^ImGuiTableColumnSortSpecs;
+  PImGuiTableColumnSettings = ^ImGuiTableColumnSettings;
+  ImGuiTableColumnIdx = ImS16;
+  PImGuiTableColumn = ^ImGuiTableColumn;
+  PImGuiTableCellData = ^ImGuiTableCellData;
+  PImGuiTable = ^ImGuiTable;
+  PImGuiTabItem = ^ImGuiTabItem;
+  PImGuiTabBar = ^ImGuiTabBar;
+  PImGuiStyleMod = ^ImGuiStyleMod;
+  PImGuiStyle = ^ImGuiStyle;
+  PImGuiStoragePair = ^ImGuiStoragePair;
+  PImGuiStorage = ^ImGuiStorage;
+  PImGuiStackSizes = ^ImGuiStackSizes;
+  PImGuiStackLevelInfo = ^ImGuiStackLevelInfo;
+  PImGuiSizeCallbackData = ^ImGuiSizeCallbackData;
+  ImGuiSizeCallback = procedure(data : PImGuiSizeCallbackData); Cdecl;
+  PImGuiShrinkWidthItem = ^ImGuiShrinkWidthItem;
+  PImGuiSettingsHandler = ^ImGuiSettingsHandler;
+  ImGuiSelectionUserData = ImS64;
+  PImGuiPtrOrIndex = ^ImGuiPtrOrIndex;
+  PImGuiPopupData = ^ImGuiPopupData;
+  PImGuiPlatformMonitor = ^ImGuiPlatformMonitor;
+  PPImGuiPlatformMonitor = ^PImGuiPlatformMonitor;
+  PImGuiPlatformImeData = ^ImGuiPlatformImeData;
+  PImGuiPlatformIO = ^ImGuiPlatformIO;
+  PImGuiPayload = ^ImGuiPayload;
+  PImGuiOnceUponAFrame = ^ImGuiOnceUponAFrame;
+  PImGuiOldColumns = ^ImGuiOldColumns;
+  PImGuiOldColumnData = ^ImGuiOldColumnData;
+  PImGuiNextWindowData = ^ImGuiNextWindowData;
+  PImGuiNextItemData = ^ImGuiNextItemData;
+  PImGuiNavTreeNodeData = ^ImGuiNavTreeNodeData;
+  PImGuiNavItemData = ^ImGuiNavItemData;
+  PImGuiMetricsConfig = ^ImGuiMetricsConfig;
+  PImGuiMenuColumns = ^ImGuiMenuColumns;
+  PImGuiMemFreeFunc = ^ImGuiMemFreeFunc;
+  ImGuiMemFreeFunc = procedure(ptr : Pointer; user_data : Pointer); Cdecl;
+  PImGuiMemAllocFunc = ^ImGuiMemAllocFunc;
+  ImGuiMemAllocFunc = function(sz : size_t; user_data : Pointer) : Pointer; Cdecl;
+  PImGuiLocEntry = ^ImGuiLocEntry;
+  PImGuiListClipperRange = ^ImGuiListClipperRange;
+  PImGuiListClipperData = ^ImGuiListClipperData;
+  PImGuiListClipper = ^ImGuiListClipper;
+  ImGuiLayoutType = Integer;
+  PImGuiLastItemData = ^ImGuiLastItemData;
+  PImGuiKeyRoutingTable = ^ImGuiKeyRoutingTable;
+  ImGuiKeyRoutingIndex = ImS16;
+  PImGuiKeyRoutingData = ^ImGuiKeyRoutingData;
+  PImGuiKeyOwnerData = ^ImGuiKeyOwnerData;
+  PImGuiKeyData = ^ImGuiKeyData;
+  ImGuiKeyChord = Integer;
+  PImGuiInputTextState = ^ImGuiInputTextState;
+  PImGuiInputTextDeactivatedState = ^ImGuiInputTextDeactivatedState;
+  PImGuiInputTextCallbackData = ^ImGuiInputTextCallbackData;
+  ImGuiInputTextCallback = function(data : PImGuiInputTextCallbackData) : Integer; Cdecl;
+  PImGuiInputEventText = ^ImGuiInputEventText;
+  PImGuiInputEventMouseWheel = ^ImGuiInputEventMouseWheel;
+  PImGuiInputEventMouseViewport = ^ImGuiInputEventMouseViewport;
+  PImGuiInputEventMousePos = ^ImGuiInputEventMousePos;
+  PImGuiInputEventMouseButton = ^ImGuiInputEventMouseButton;
+  PImGuiInputEventKey = ^ImGuiInputEventKey;
+  PImGuiInputEventAppFocused = ^ImGuiInputEventAppFocused;
+  PImGuiInputEvent = ^ImGuiInputEvent;
+  PImGuiIO = ^ImGuiIO;
+  PImGuiIDStackTool = ^ImGuiIDStackTool;
+  ImGuiID = ImU32;
+  PImGuiGroupData = ^ImGuiGroupData;
+  ImGuiErrorLogCallback = procedure(user_data : Pointer; fmt : PChar; args : array of const); Cdecl;
+  PImGuiDockRequest = ^ImGuiDockRequest;
+  PImGuiDockNodeSettings = ^ImGuiDockNodeSettings;
+  PImGuiDockNode = ^ImGuiDockNode;
+  PImGuiDockContext = ^ImGuiDockContext;
+  ImGuiDir = Integer;
+  PImGuiDebugAllocInfo = ^ImGuiDebugAllocInfo;
+  PImGuiDebugAllocEntry = ^ImGuiDebugAllocEntry;
+  PImGuiDataVarInfo = ^ImGuiDataVarInfo;
+  PImGuiDataTypeInfo = ^ImGuiDataTypeInfo;
+  ImGuiDataType = Byte;
+  ImGuiDataAuthority = Integer;
+  PImGuiContextHook = ^ImGuiContextHook;
+  PImGuiContext = ^ImGuiContext;
+  ImGuiContextHookCallback = procedure(ctx : PImGuiContext; hook : PImGuiContextHook); Cdecl;
+  PImGuiComboPreviewData = ^ImGuiComboPreviewData;
+  PImGuiColorMod = ^ImGuiColorMod;
+  PImFontGlyphRangesBuilder = ^ImFontGlyphRangesBuilder;
+  PImFontGlyph = ^ImFontGlyph;
+  PImFontConfig = ^ImFontConfig;
+  PImFontBuilderIO = ^ImFontBuilderIO;
+  PImFontAtlasCustomRect = ^ImFontAtlasCustomRect;
+  PImFontAtlas = ^ImFontAtlas;
+  PImFont = ^ImFont;
+  ImFileHandle = ^FILE;
+  PImDrawVert = ^ImDrawVert;
+  PImDrawListSplitter = ^ImDrawListSplitter;
+  PImDrawListSharedData = ^ImDrawListSharedData;
+  PImDrawList = ^ImDrawList;
+  ImDrawIdx = ImU16;
+  PImDrawDataBuilder = ^ImDrawDataBuilder;
+  PImDrawData = ^ImDrawData;
+  PImDrawCmdHeader = ^ImDrawCmdHeader;
+  PImDrawCmd = ^ImDrawCmd;
+  PImDrawChannel = ^ImDrawChannel;
+  ImDrawCallback = procedure(parent_list : PImDrawList; cmd : PImDrawCmd); Cdecl;
+  PImColor = ^ImColor;
+  PImBitVector = ^ImBitVector;
+  ImBitArrayPtr = PImU32;
+
+  // Extras
+  PImVector_ImWchar = ^ImVector_ImWchar;
+  PImVector_ImGuiTextRange = ^ImVector_ImGuiTextRange;
+  PImVector_ImGuiWindowPtr = ^ImVector_ImGuiWindowPtr;
+  PImVector_const_charPtr = ^ImVector_const_charPtr;
+
+  // Enum Ptrs
+  PImGuiDir = ^ImGuiDir;
+
+  ImGuiComboItemGetterCallback = Function(Data: Pointer; idx: Integer;
+    out_text: PPAnsiChar): Boolean; Cdecl;
+
+  TCompareFunc = function(const A, B: Pointer): Integer;
+
+  // New CallBacks
+  TImGuiComboItemsGetterFunc = function(user_data: Pointer; idx: Integer): PAnsiChar; cdecl;
+  TImGuiPlotValuesGetterFunc = function(data: Pointer; idx: Integer): Single; cdecl;
+  ImGuiTypingSelectFunc = function(data: Pointer; idx: Integer): PAnsiChar; cdecl;
+
+  ImGuiLocEntry = record
+    Key: ImGuiLocKey;
+    Text: PAnsiChar;
+  end;
+
+  ImGuiDataTypeInfo = Record
+    Size: size_t;
+    Name: Pansichar;
+    PrintFmt: Pansichar;
+    ScanFmt: Pansichar;
+  End;
+
+  ImVector_ImU32 = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImU32;
+  End;
+  PImVector_ImU32 = ^ImVector_ImU32;
+
+  ImFontGlyphRangesBuilder = Record
+    UsedChars: ImVector_ImU32;
+  End;
+
+  ImBitVector = Record
+    Storage: ImVector_ImU32;
+  End;
+
+  ImVector_char = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PAnsiChar;
+  End;
+
+  ImGuiTextBuffer = Record
+    Buf: ImVector_char;
+  End;
+
+  ImVector_ImGuiPlatformMonitor = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiPlatformMonitor;
+  End;
+
+  ImVector_ImGuiViewportPtr = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiViewport;
+  End;
+
+  ImVector_const_charPtr = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PAnsiChar;
+  End;
+
+  ImVec1 = Record
+    x: Single;
+  End;
+  PImVec1 = ^ImVec1;
+
+  ImVec2ih = Record
+    x: Smallint;
+    y: Smallint;
+  End;
+  PImVec2ih = ^ImVec2ih;
+
+  { ImVec2 }
+  ImVec2 = Record
+    x, y: Single;
+    constructor New(const _x, _y: Single);
+  End;
+  PImVec2 = ^ImVec2;
+
+  { ImVec3 }
+  ImVec3 = record
+    x, y, z: single;
+    constructor New(const _x, _y, _z : Single);
+  end;
+  PImVec3 = ^ImVec3;
+
+  { ImVec4 }
+  ImVec4 = Record
+    x, y, z, w: Single;
+    constructor New(const _x, _y, _z, _w: Single);
+  End;
+  PImVec4 = ^ImVec4;
+
+  ImRect = Record
+    Min: ImVec2;
+    Max: ImVec2;
+  End;
+
+  ImGuiDebugAllocEntry = record
+    FrameCount: Integer;
+    AllocCount: ImS16;
+    FreeCount: ImS16;
+  end;
+
+  ImGuiDebugAllocInfo = record
+    TotalAllocCount: Integer;
+    TotalFreeCount: Integer;
+    LastEntriesIdx: ImS16;
+    LastEntriesBuf: array [0..5] of ImGuiDebugAllocEntry;
+  end;
+
+  ImGuiNextItemData = Record
+    Flags : ImGuiNextItemDataFlags;
+    ItemFlags : ImGuiItemFlags;
+    Width : Single;
+    SelectionUserData : ImGuiSelectionUserData;
+    OpenCond : ImGuiCond;
+    OpenVal : Boolean;
+  End;
+
+  ImGuiTypingSelectRequest = record
+    Flags: ImGuiTypingSelectFlags;
+    SearchBufferLen: Integer;
+    SearchBuffer: PAnsiChar;
+    SelectRequest: Boolean;
+    SingleCharMode: Boolean;
+    SingleCharSize: ImS8;
+  end;
+
+  ImGuiTypingSelectState = record
+    Request: ImGuiTypingSelectRequest;
+    SearchBuffer: array [0..63] of AnsiChar;
+    FocusScope: ImGuiID;
+    LastRequestFrame: Integer;
+    LastRequestTime: Single;
+    SingleCharModeLock: Boolean;
+  end;
+
+  ImGuiInputTextCallbackData = Record
+    Ctx: PImGuiContext;
+    EventFlag: ImGuiInputTextFlags;
+    Flags: ImGuiInputTextFlags;
+    UserData: Pointer;
+    EventChar: ImWchar;
+    EventKey: ImGuiKey;
+    Buf: Pansichar;
+    BufTextLen: Integer;
+    BufSize: Integer;
+    BufDirty: Boolean;
+    CursorPos: Integer;
+    SelectionStart: Integer;
+    SelectionEnd: Integer;
+  End;
+
+  ImGuiSizeCallbackData = Record
+    UserData: Pointer;
+    Pos: ImVec2;
+    CurrentSize: ImVec2;
+    DesiredSize: ImVec2;
+  End;
+
+  ImGuiWindowClass = Record
+    ClassId: ImGuiID;
+    ParentViewportId: ImGuiID;
+    ViewportFlagsOverrideSet: ImGuiViewportFlags;
+    ViewportFlagsOverrideClear: ImGuiViewportFlags;
+    TabItemFlagsOverrideSet: ImGuiTabItemFlags;
+    DockNodeFlagsOverrideSet: ImGuiDockNodeFlags;
+    DockingAlwaysTabBar: Boolean;
+    DockingAllowUnclassed: Boolean;
+  End;
+
+  ImGuiPayload = Record
+    Data: Pointer;
+    DataSize: Integer;
+    SourceId: ImGuiID;
+    SourceParentId: ImGuiID;
+    DataFrameCount: Integer;
+    DataType: Array [0..32] Of Char;
+    Preview: Boolean;
+    Delivery: Boolean;
+  End;
+
+  ImGuiOnceUponAFrame = Record
+    RefFrame: Integer;
+  End;
+
+  ImGuiTextRange = Record
+    b: Pansichar;
+    e: Pansichar;
+  End;
+
+  ImVector_ImGuiTextRange = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTextRange;
+  End;
+
+  ImGuiTextFilter = Record
+    InputBuf: Array [0..255] Of Ansichar;
+    Filters: ImVector_ImGuiTextRange;
+    CountGrep: Integer;
+  End;
+
+  ImGuiLastItemData = Record
+    ID: ImGuiID;
+    InFlags: ImGuiItemFlags;
+    StatusFlags: ImGuiItemStatusFlags;
+    Rect: ImRect;
+    NavRect: ImRect;
+    DisplayRect: ImRect;
+  End;
+
+  ImGuiNextWindowData = Record
+    Flags: ImGuiNextWindowDataFlags;
+    PosCond: ImGuiCond;
+    SizeCond: ImGuiCond;
+    CollapsedCond: ImGuiCond;
+    DockCond: ImGuiCond;
+    PosVal: ImVec2;
+    PosPivotVal: ImVec2;
+    SizeVal: ImVec2;
+    ContentSizeVal: ImVec2;
+    ScrollVal: ImVec2;
+    ChildFlags: ImGuiChildFlags;
+    PosUndock: Boolean;
+    CollapsedVal: Boolean;
+    SizeConstraintRect: ImRect;
+    SizeCallback: ImGuiSizeCallback;
+    SizeCallbackUserData: Pointer;
+    BgAlphaVal: Single;
+    ViewportId: ImGuiID;
+    DockId: ImGuiID;
+    WindowClass: ImGuiWindowClass;
+    MenuBarOffsetMinVal: ImVec2;
+  End;
+
+  ImGuiStackSizes = Record
+    SizeOfIDStack: Shortint;
+    SizeOfColorStack: Shortint;
+    SizeOfStyleVarStack: Shortint;
+    SizeOfFontStack: Shortint;
+    SizeOfFocusScopeStack: Shortint;
+    SizeOfGroupStack: Shortint;
+    SizeOfItemFlagsStack: Shortint;
+    SizeOfBeginPopupStack: Shortint;
+    SizeOfDisabledStack: Shortint;
+  End;
+
+
+  ImGuiWindowStackData = Record
+    Window: PImGuiWindow;
+    ParentLastItemDataBackup: ImGuiLastItemData;
+    StackSizesOnBegin: ImGuiStackSizes;
+  End;
+
+  ImVector_ImGuiWindowStackData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiWindowStackData;
+  End;
+
+  ImVector_ImGuiInputEvent = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiInputEvent;
+  End;
+  PImVector = ^ImVector;
+
+  ImVector = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiWindowStackData;
+  End;
+
+  ImGuiColorMod = Record
+    Col: ImGuiCol;
+    BackupValue: ImVec4;
+  End;
+
+  ImVector_ImGuiColorMod = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiColorMod;
+  End;
+
+  ImGuiStyleMod = Record
+    VarIdx: ImGuiStyleVar;
+    Case Integer Of
+      0: (BackupInt: Array[0..1] Of Integer);
+      1: (BackupFloat: Array[0..1] Of Single);
+  End;
+
+  ImGuiGroupData = Record
+    WindowID: ImGuiID;
+    BackupCursorPos: ImVec2;
+    BackupCursorMaxPos: ImVec2;
+    BackupIndent: ImVec1;
+    BackupGroupOffset: ImVec1;
+    BackupCurrLineSize: ImVec2;
+    BackupCurrLineTextBaseOffset: Single;
+    BackupActiveIdIsAlive: ImGuiID;
+    BackupActiveIdPreviousFrameIsAlive: Boolean;
+    BackupHoveredIdIsAlive: Boolean;
+    EmitItem: Boolean;
+  End;
+
+  ImGuiPopupData = Record
+    PopupId: ImGuiID;
+    Window: PImGuiWindow;
+    BackupNavWindow: PImGuiWindow;
+    ParentNavLayer: Integer;
+    OpenFrameCount: Integer;
+    OpenParentId: ImGuiID;
+    OpenPopupPos: ImVec2;
+    OpenMousePos: ImVec2;
+  End;
+
+
+  ImGuiNavTreeNodeData = Record
+    ID: ImGuiID;
+    InFlags: ImGuiItemFlags;
+    NavRect: ImRect;
+  End;
+
+  ImVector_ImGuiStyleMod = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiStyleMod;
+  End;
+  PImVector_ImGuiStyleMod = ^ImVector_ImGuiStyleMod;
+
+  ImVector_ImGuiID = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiID;
+  End;
+  PImVector_ImGuiID = ^ImVector_ImGuiID;
+
+  ImVector_ImGuiItemFlags = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiItemFlags;
+  End;
+  PImVector_ImGuiItemFlags = ^ImVector_ImGuiItemFlags;
+
+  ImVector_ImGuiGroupData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiGroupData;
+  End;
+  PImVector_ImGuiGroupData = ^ImVector_ImGuiGroupData;
+
+  ImVector_ImGuiPopupData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiPopupData;
+  End;
+  PImVector_ImGuiPopupData = ^ImVector_ImGuiPopupData;
+
+  ImVector_ImGuiNavTreeNodeData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiNavTreeNodeData;
+  End;
+  PImVector_ImGuiNavTreeNodeData = ^ImVector_ImGuiNavTreeNodeData;
+
+  ImVector_ImGuiViewportPPtr = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiViewportP;
+  End;
+  PImVector_ImGuiViewportPPtr = ^ImVector_ImGuiViewportPPtr;
+
+  ImVector_unsigned_char = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: Pbyte;
+  End;
+  PImVector_unsigned_char = ^ImVector_unsigned_char;
+
+  ImGuiListClipperRange = Record
+    Min: Integer;
+    Max: Integer;
+    PosToIndexConvert: Boolean;
+    PosToIndexOffsetMin: ImS8;
+    PosToIndexOffsetMax: ImS8;
+  End;
+
+  ImVector_ImGuiListClipperRange = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiListClipperRange;
+  End;
+  PImVector_ImGuiListClipperRange = ^ImVector_ImGuiListClipperRange;
+
+
+  ImGuiStoragePair = Record
+    key: ImGuiID;
+    Case Integer Of
+      0: (val_i: Integer);
+      1: (val_f: Single);
+      2: (val_p: Pointer);
+  End;
+
+
+  ImVector_ImGuiStoragePair = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiStoragePair;
+  End;
+
+  ImGuiStorage = Record
+    Data: ImVector_ImGuiStoragePair;
+  End;
+
+  ImGuiListClipper = Record
+    Ctx: PImGuiContext;
+    DisplayStart: Integer;
+    DisplayEnd: Integer;
+    ItemsCount: Integer;
+    ItemsHeight: Single;
+    StartPosY: Single;
+    TempData: Pointer;
+  End;
+
+
+  ImColor = Record
+    Value: ImVec4;
+  End;
+
+  ImGuiListClipperData = Record
+    ListClipper: PImGuiListClipper;
+    LossynessOffset: Single;
+    StepNo: Integer;
+    ItemsFrozen: Integer;
+    Ranges: ImVector_ImGuiListClipperRange;
+  End;
+
+  ImVector_ImGuiListClipperData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiListClipperData;
+  End;
+
+  ImDrawCmd = Record
+    ClipRect: ImVec4;
+    TextureId: ImTextureID;
+    VtxOffset: Cardinal;
+    IdxOffset: Cardinal;
+    ElemCount: Cardinal;
+    UserCallback: ImDrawCallback;
+    UserCallbackData: Pointer;
+  End;
+
+
+  ImDrawVert = Record
+    pos: ImVec2;
+    uv: ImVec2;
+    col: ImU32;
+  End;
+
+  ImDrawCmdHeader = Record
+    ClipRect: ImVec4;
+    TextureId: ImTextureID;
+    VtxOffset: Cardinal;
+  End;
+
+  ImVector_ImDrawCmd = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImDrawCmd;
+  End;
+
+  ImVector_ImDrawIdx = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImDrawIdx;
+  End;
+
+  ImDrawChannel = Record
+    _CmdBuffer: ImVector_ImDrawCmd;
+    _IdxBuffer: ImVector_ImDrawIdx;
+  End;
+
+  ImVector_ImDrawChannel = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImDrawChannel;
+  End;
+
+  ImDrawListSplitter = Record
+    _Current: Integer;
+    _Count: Integer;
+    _Channels: ImVector_ImDrawChannel;
+  End;
+
+
+  ImGuiDataVarInfo = Record
+    Type_: ImGuiDataType;
+    Count: ImU32;
+    Offset: ImU32;
+  End;
+
+  ImGuiWindowDockStyle = Record
+    Colors: Array[0..ImGuiWindowDockStyleCol_COUNT - 1] Of ImU32;
+  End;
+
+  ImVector_ImGuiDockRequest = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiDockRequest;
+  End;
+  PImVector_ImGuiDockRequest = ^ImVector_ImGuiDockRequest;
+
+  ImVector_ImGuiDockNodeSettings = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiDockNodeSettings;
+  End;
+  PImVector_ImGuiDockNodeSettings = ^ImVector_ImGuiDockNodeSettings;
+
+  ImGuiDockContext = Record
+    Nodes: ImGuiStorage;
+    Requests: ImVector_ImGuiDockRequest;
+    NodesSettings: ImVector_ImGuiDockNodeSettings;
+    WantFullRebuild: Boolean;
+  End;
+
+  ImGuiTableColumnSettings = Bitpacked Record
+    WidthOrWeight: Single;
+    UserID: ImGuiID;
+    Index: ImGuiTableColumnIdx;
+    DisplayOrder: ImGuiTableColumnIdx;
+    SortOrder: ImGuiTableColumnIdx;
+    SortDirection: T2Bits; // Use 2 bits for the SortDirection
+    IsEnabled: T1Bit; // Use 1 bit for IsEnabled
+    IsStretch: T1Bit; // Use 1 bit for IsStretch
+  End;
+
+  ImGuiTableTempData = Record
+    TableIndex: Integer;
+    LastTimeActive: Single;
+    UserOuterSize: ImVec2;
+    DrawSplitter: ImDrawListSplitter;
+    HostBackupWorkRect: ImRect;
+    HostBackupParentWorkRect: ImRect;
+    HostBackupPrevLineSize: ImVec2;
+    HostBackupCurrLineSize: ImVec2;
+    HostBackupCursorMaxPos: ImVec2;
+    HostBackupColumnsOffset: ImVec1;
+    HostBackupItemWidth: Single;
+    HostBackupItemWidthStackSize: Integer;
+  End;
+
+
+  ImGuiTabItem = Record
+    ID: ImGuiID;
+    Flags: ImGuiTabItemFlags;
+    Window: PImGuiWindow;
+    LastFrameVisible: Integer;
+    LastFrameSelected: Integer;
+    Offset: Single;
+    Width: Single;
+    ContentWidth: Single;
+    RequestedWidth: Single;
+    NameOffset: ImS32;
+    BeginOrder: ImS16;
+    IndexDuringLayout: ImS16;
+    WantClose: Boolean;
+  End;
+
+  ImVector_ImGuiTabItem = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTabItem;
+  End;
+
+  ImGuiTabBar = Record
+    Tabs: ImVector_ImGuiTabItem;
+    Flags: ImGuiTabBarFlags;
+    ID: ImGuiID;
+    SelectedTabId: ImGuiID;
+    NextSelectedTabId: ImGuiID;
+    VisibleTabId: ImGuiID;
+    CurrFrameVisible: Integer;
+    PrevFrameVisible: Integer;
+    BarRect: ImRect;
+    CurrTabsContentsHeight: Single;
+    PrevTabsContentsHeight: Single;
+    WidthAllTabs: Single;
+    WidthAllTabsIdeal: Single;
+    ScrollingAnim: Single;
+    ScrollingTarget: Single;
+    ScrollingTargetDistToVisibility: Single;
+    ScrollingSpeed: Single;
+    ScrollingRectMinX: Single;
+    ScrollingRectMaxX: Single;
+    ReorderRequestTabId: ImGuiID;
+    ReorderRequestOffset: ImS16;
+    BeginCount: ImS8;
+    WantLayout: Boolean;
+    VisibleTabWasSubmitted: Boolean;
+    TabsAddedNew: Boolean;
+    TabsActiveCount: ImS16;
+    LastTabItemIdx: ImS16;
+    ItemSpacingY: Single;
+    FramePadding: ImVec2;
+    BackupCursorPos: ImVec2;
+    TabsNames: ImGuiTextBuffer;
+  End;
+
+  ImGuiTableColumn = bitpacked Record
+    Flags: ImGuiTableColumnFlags;
+    WidthGiven: Single;
+    MinX: Single;
+    MaxX: Single;
+    WidthRequest: Single;
+    WidthAuto: Single;
+    StretchWeight: Single;
+    InitStretchWeightOrWidth: Single;
+    ClipRect: ImRect;
+    UserID: ImGuiID;
+    WorkMinX: Single;
+    WorkMaxX: Single;
+    ItemWidth: Single;
+    ContentMaxXFrozen: Single;
+    ContentMaxXUnfrozen: Single;
+    ContentMaxXHeadersUsed: Single;
+    ContentMaxXHeadersIdeal: Single;
+    NameOffset: ImS16;
+    DisplayOrder: ImGuiTableColumnIdx;
+    IndexWithinEnabledSet: ImGuiTableColumnIdx;
+    PrevEnabledColumn: ImGuiTableColumnIdx;
+    NextEnabledColumn: ImGuiTableColumnIdx;
+    SortOrder: ImGuiTableColumnIdx;
+    DrawChannelCurrent: ImGuiTableDrawChannelIdx;
+    DrawChannelFrozen: ImGuiTableDrawChannelIdx;
+    DrawChannelUnfrozen: ImGuiTableDrawChannelIdx;
+    IsEnabled: Boolean;
+    IsUserEnabled: Boolean;
+    IsUserEnabledNextFrame: Boolean;
+    IsVisibleX: Boolean;
+    IsVisibleY: Boolean;
+    IsRequestOutput: Boolean;
+    IsSkipItems: Boolean;
+    IsPreserveWidthAuto: Boolean;
+    NavLayerCurrent: ImS8;
+    AutoFitQueue: ImU8;
+    CannotSkipItemsQueue: ImU8;
+    SortDirection: T2Bits;
+    SortDirectionsAvailCount: T2Bits;
+    SortDirectionsAvailMask: T4Bits;
+    SortDirectionsAvailList: ImU8;
+  End;
+
+
+  ImGuiTableCellData = Record
+    BgColor: ImU32;
+    Column: ImGuiTableColumnIdx;
+  End;
+
+
+  ImGuiTableInstanceData = Record
+    TableInstanceID: ImGuiID;
+    LastOuterHeight: Single;
+    LastFirstRowHeight: Single;
+    LastFrozenHeight: Single;
+    HoveredRowLast: Integer;
+    HoveredRowNext: Integer;
+  End;
+
+
+  ImSpan_ImGuiTableColumn = Record
+    Data: PImGuiTableColumn;
+    DataEnd: PImGuiTableColumn;
+  End;
+
+
+  ImSpan_ImGuiTableColumnIdx = Record
+    Data: PImGuiTableColumnIdx;
+    DataEnd: PImGuiTableColumnIdx;
+  End;
+
+
+  ImSpan_ImGuiTableCellData = Record
+    Data: PImGuiTableCellData;
+    DataEnd: PImGuiTableCellData;
+  End;
+
+
+  ImVector_ImGuiTableInstanceData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTableInstanceData;
+  End;
+
+
+  ImVector_ImGuiTableColumnSortSpecs = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTableColumnSortSpecs;
+  End;
+
+
+  ImGuiTableColumnSortSpecs = Record
+    ColumnUserID: ImGuiID;
+    ColumnIndex: ImS16;
+    SortOrder: ImS16;
+    SortDirection: ImGuiSortDirection;
+  End;
+
+  ImGuiTableSortSpecs = Record
+    Specs: PImGuiTableColumnSortSpecs;
+    SpecsCount: Integer;
+    SpecsDirty: Boolean;
+  End;
+
+  ImGuiTable = Record
+    ID: ImGuiID;
+    Flags: ImGuiTableFlags;
+    RawData: Pointer;
+    TempData: PImGuiTableTempData;
+    Columns: ImSpan_ImGuiTableColumn;
+    DisplayOrderToIndex: ImSpan_ImGuiTableColumnIdx;
+    RowCellData: ImSpan_ImGuiTableCellData;
+    EnabledMaskByDisplayOrder: ImBitArrayPtr;
+    EnabledMaskByIndex: ImBitArrayPtr;
+    VisibleMaskByIndex: ImBitArrayPtr;
+    SettingsLoadedFlags: ImGuiTableFlags;
+    SettingsOffset: Integer;
+    LastFrameActive: Integer;
+    ColumnsCount: Integer;
+    CurrentRow: Integer;
+    CurrentColumn: Integer;
+    InstanceCurrent: ImS16;
+    InstanceInteracted: ImS16;
+    RowPosY1: Single;
+    RowPosY2: Single;
+    RowMinHeight: Single;
+    RowCellPaddingY: Single;
+    RowTextBaseline: Single;
+    RowIndentOffsetX: Single;
+    RowFlags: ImGuiTableRowFlags;
+    LastRowFlags: ImGuiTableRowFlags;
+    RowBgColorCounter: Integer;
+    RowBgColor: Array[0..1] Of ImU32;
+    BorderColorStrong: ImU32;
+    BorderColorLight: ImU32;
+    BorderX1: Single;
+    BorderX2: Single;
+    HostIndentX: Single;
+    MinColumnWidth: Single;
+    OuterPaddingX: Single;
+    CellPaddingX: Single;
+    CellSpacingX1: Single;
+    CellSpacingX2: Single;
+    InnerWidth: Single;
+    ColumnsGivenWidth: Single;
+    ColumnsAutoFitWidth: Single;
+    ColumnsStretchSumWeights: Single;
+    ResizedColumnNextWidth: Single;
+    ResizeLockMinContentsX2: Single;
+    RefScale: Single;
+    OuterRect: ImRect;
+    InnerRect: ImRect;
+    WorkRect: ImRect;
+    InnerClipRect: ImRect;
+    BgClipRect: ImRect;
+    Bg0ClipRectForDrawCmd: ImRect;
+    Bg2ClipRectForDrawCmd: ImRect;
+    HostClipRect: ImRect;
+    HostBackupInnerClipRect: ImRect;
+    OuterWindow: PImGuiWindow;
+    InnerWindow: PImGuiWindow;
+    ColumnsNames: ImGuiTextBuffer;
+    DrawSplitter: PImDrawListSplitter;
+    InstanceDataFirst: ImGuiTableInstanceData;
+    InstanceDataExtra: ImVector_ImGuiTableInstanceData;
+    SortSpecsSingle: ImGuiTableColumnSortSpecs;
+    SortSpecsMulti: ImVector_ImGuiTableColumnSortSpecs;
+    SortSpecs: ImGuiTableSortSpecs;
+    SortSpecsCount: ImGuiTableColumnIdx;
+    ColumnsEnabledCount: ImGuiTableColumnIdx;
+    ColumnsEnabledFixedCount: ImGuiTableColumnIdx;
+    DeclColumnsCount: ImGuiTableColumnIdx;
+    HoveredColumnBody: ImGuiTableColumnIdx;
+    HoveredColumnBorder: ImGuiTableColumnIdx;
+    AutoFitSingleColumn: ImGuiTableColumnIdx;
+    ResizedColumn: ImGuiTableColumnIdx;
+    LastResizedColumn: ImGuiTableColumnIdx;
+    HeldHeaderColumn: ImGuiTableColumnIdx;
+    ReorderColumn: ImGuiTableColumnIdx;
+    ReorderColumnDir: ImGuiTableColumnIdx;
+    LeftMostEnabledColumn: ImGuiTableColumnIdx;
+    RightMostEnabledColumn: ImGuiTableColumnIdx;
+    LeftMostStretchedColumn: ImGuiTableColumnIdx;
+    RightMostStretchedColumn: ImGuiTableColumnIdx;
+    ContextPopupColumn: ImGuiTableColumnIdx;
+    FreezeRowsRequest: ImGuiTableColumnIdx;
+    FreezeRowsCount: ImGuiTableColumnIdx;
+    FreezeColumnsRequest: ImGuiTableColumnIdx;
+    FreezeColumnsCount: ImGuiTableColumnIdx;
+    RowCellDataCurrent: ImGuiTableColumnIdx;
+    DummyDrawChannel: ImGuiTableDrawChannelIdx;
+    Bg2DrawChannelCurrent: ImGuiTableDrawChannelIdx;
+    Bg2DrawChannelUnfrozen: ImGuiTableDrawChannelIdx;
+    IsLayoutLocked: Boolean;
+    IsInsideRow: Boolean;
+    IsInitializing: Boolean;
+    IsSortSpecsDirty: Boolean;
+    IsUsingHeaders: Boolean;
+    IsContextPopupOpen: Boolean;
+    IsSettingsRequestLoad: Boolean;
+    IsSettingsDirty: Boolean;
+    IsDefaultDisplayOrder: Boolean;
+    IsResetAllRequest: Boolean;
+    IsResetDisplayOrderRequest: Boolean;
+    IsUnfrozenRows: Boolean;
+    IsDefaultSizingPolicy: Boolean;
+    HasScrollbarYCurr: Boolean;
+    HasScrollbarYPrev: Boolean;
+    MemoryCompacted: Boolean;
+    HostSkipItems: Boolean;
+  End;
+
+  ImGuiWindowSettings = Record
+    ID: ImGuiID;
+    Pos: ImVec2ih;
+    Size: ImVec2ih;
+    ViewportPos: ImVec2ih;
+    ViewportId: ImGuiID;
+    DockId: ImGuiID;
+    ClassId: ImGuiID;
+    DockOrder: Shortint;
+    Collapsed: Boolean;
+    WantApply: Boolean;
+    WantDelete: Boolean;
+  End;
+
+
+  ImGuiSettingsHandler = Record
+    TypeName : PChar;
+    TypeHash : ImGuiID;
+    ClearAllFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler) : Pointer;
+    ReadInitFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler) : Pointer;
+    ReadOpenFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler; name : PChar) : Pointer;
+    ReadLineFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler; entry : Pointer; line : PChar) : Pointer;
+    ApplyAllFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler) : Pointer;
+    WriteAllFn : function(ctx : PImGuiContext; handler : PImGuiSettingsHandler; out_buf : PImGuiTextBuffer) : Pointer;
+    UserData : Pointer;
+  End;
+
+  ImVector_ImGuiTableTempData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTableTempData;
+  End;
+
+  ImVector_ImGuiTable = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTable;
+  End;
+
+  ImPool_ImGuiTable = Record
+    Buf: ImVector_ImGuiTable;
+    Map: ImGuiStorage;
+    FreeIdx: ImPoolIdx;
+    AliveCount: ImPoolIdx;
+  End;
+
+  ImVector_ImGuiTabBar = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiTabBar;
+  End;
+
+  ImPool_ImGuiTabBar = Record
+    Buf: ImVector_ImGuiTabBar;
+    Map: ImGuiStorage;
+    FreeIdx: ImPoolIdx;
+    AliveCount: ImPoolIdx;
+  End;
+
+  ImVector_ImGuiPtrOrIndex = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiPtrOrIndex;
+  End;
+
+  ImVector_ImGuiShrinkWidthItem = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiShrinkWidthItem;
+  End;
+
+  ImVector_ImGuiSettingsHandler = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiSettingsHandler;
+  End;
+
+  ImGuiShrinkWidthItem = Record
+    Index: Integer;
+    Width: Single;
+    InitialWidth: Single;
+  End;
+
+  ImChunkStream_ImGuiWindowSettings = Record
+    Buf: ImVector_char;
+  End;
+
+  ImChunkStream_ImGuiTableSettings = Record
+    Buf: ImVector_char;
+  End;
+
+  ImGuiTableSettings = Record
+    ID: ImGuiID;
+    SaveFlags: ImGuiTableFlags;
+    RefScale: Single;
+    ColumnsCount: ImGuiTableColumnIdx;
+    ColumnsCountMax: ImGuiTableColumnIdx;
+    WantApply: Boolean;
+  End;
+
+  ImGuiPtrOrIndex = Record
+    Ptr: Pointer;
+    Index: Integer;
+  End;
+
+  ImVector_ImGuiContextHook = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiContextHook;
+  End;
+
+
+  ImGuiStyle = Record
+    Alpha : Single;
+    DisabledAlpha : Single;
+    WindowPadding : ImVec2;
+    WindowRounding : Single;
+    WindowBorderSize : Single;
+    WindowMinSize : ImVec2;
+    WindowTitleAlign : ImVec2;
+    WindowMenuButtonPosition : ImGuiDir;
+    ChildRounding : Single;
+    ChildBorderSize : Single;
+    PopupRounding : Single;
+    PopupBorderSize : Single;
+    FramePadding : ImVec2;
+    FrameRounding : Single;
+    FrameBorderSize : Single;
+    ItemSpacing : ImVec2;
+    ItemInnerSpacing : ImVec2;
+    CellPadding : ImVec2;
+    TouchExtraPadding : ImVec2;
+    IndentSpacing : Single;
+    ColumnsMinSpacing : Single;
+    ScrollbarSize : Single;
+    ScrollbarRounding : Single;
+    GrabMinSize : Single;
+    GrabRounding : Single;
+    LogSliderDeadzone : Single;
+    TabRounding : Single;
+    TabBorderSize : Single;
+    TabMinWidthForCloseButton : Single;
+    TabBarBorderSize : Single;
+    TableAngledHeadersAngle : Single;
+    ColorButtonPosition : ImGuiDir;
+    ButtonTextAlign : ImVec2;
+    SelectableTextAlign : ImVec2;
+    SeparatorTextBorderSize : Single;
+    SeparatorTextAlign : ImVec2;
+    SeparatorTextPadding : ImVec2;
+    DisplayWindowPadding : ImVec2;
+    DisplaySafeAreaPadding : ImVec2;
+    DockingSeparatorSize : Single;
+    MouseCursorScale : Single;
+    AntiAliasedLines : Boolean;
+    AntiAliasedLinesUseTex : Boolean;
+    AntiAliasedFill : Boolean;
+    CurveTessellationTol : Single;
+    CircleTessellationMaxError : Single;
+    Colors : Array[0..55 - 1] of ImVec4;
+    HoverStationaryDelay : Single;
+    HoverDelayShort : Single;
+    HoverDelayNormal : Single;
+    HoverFlagsForTooltipMouse : ImGuiHoveredFlags;
+    HoverFlagsForTooltipNav : ImGuiHoveredFlags;
+  End;
+
+  ImGuiKeyData = Record
+    Down: Boolean;
+    DownDuration: Single;
+    DownDurationPrev: Single;
+    AnalogValue: Single;
+  End;
+
+  ImVector_ImWchar = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImWchar;
+  End;
+
+  ImVector_ImDrawVert = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImDrawVert;
+  End;
+
+  ImVector_ImVec4 = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImVec4;
+  End;
+
+  ImVector_ImTextureID = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImTextureID;
+  End;
+
+  ImVector_ImVec2 = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImVec2;
+  End;
+
+
+  ImGuiIO = Record
+    ConfigFlags : ImGuiConfigFlags;
+    BackendFlags : ImGuiBackendFlags;
+    DisplaySize : ImVec2;
+    DeltaTime : Single;
+    IniSavingRate : Single;
+    IniFilename : PChar;
+    LogFilename : PChar;
+    UserData : Pointer;
+    Fonts : PImFontAtlas;
+    FontGlobalScale : Single;
+    FontAllowUserScaling : Boolean;
+    FontDefault : PImFont;
+    DisplayFramebufferScale : ImVec2;
+    ConfigDockingNoSplit : Boolean;
+    ConfigDockingWithShift : Boolean;
+    ConfigDockingAlwaysTabBar : Boolean;
+    ConfigDockingTransparentPayload : Boolean;
+    ConfigViewportsNoAutoMerge : Boolean;
+    ConfigViewportsNoTaskBarIcon : Boolean;
+    ConfigViewportsNoDecoration : Boolean;
+    ConfigViewportsNoDefaultParent : Boolean;
+    MouseDrawCursor : Boolean;
+    ConfigMacOSXBehaviors : Boolean;
+    ConfigInputTrickleEventQueue : Boolean;
+    ConfigInputTextCursorBlink : Boolean;
+    ConfigInputTextEnterKeepActive : Boolean;
+    ConfigDragClickToInputText : Boolean;
+    ConfigWindowsResizeFromEdges : Boolean;
+    ConfigWindowsMoveFromTitleBarOnly : Boolean;
+    ConfigMemoryCompactTimer : Single;
+    MouseDoubleClickTime : Single;
+    MouseDoubleClickMaxDist : Single;
+    MouseDragThreshold : Single;
+    KeyRepeatDelay : Single;
+    KeyRepeatRate : Single;
+    ConfigDebugBeginReturnValueOnce : Boolean;
+    ConfigDebugBeginReturnValueLoop : Boolean;
+    ConfigDebugIgnoreFocusLoss : Boolean;
+    ConfigDebugIniSettings : Boolean;
+    BackendPlatformName : PChar;
+    BackendRendererName : PChar;
+    BackendPlatformUserData : Pointer;
+    BackendRendererUserData : Pointer;
+    BackendLanguageUserData : Pointer;
+    GetClipboardTextFn : function(user_data : Pointer) : PChar; Cdecl;
+    SetClipboardTextFn : procedure(user_data : Pointer; text : PChar); Cdecl;
+    ClipboardUserData : Pointer;
+    SetPlatformImeDataFn : procedure(viewport : PImGuiViewport; data : PImGuiPlatformImeData); Cdecl;
+    PlatformLocaleDecimalPoint : ImWchar;
+    WantCaptureMouse : Boolean;
+    WantCaptureKeyboard : Boolean;
+    WantTextInput : Boolean;
+    WantSetMousePos : Boolean;
+    WantSaveIniSettings : Boolean;
+    NavActive : Boolean;
+    NavVisible : Boolean;
+    Framerate : Single;
+    MetricsRenderVertices : Integer;
+    MetricsRenderIndices : Integer;
+    MetricsRenderWindows : Integer;
+    MetricsActiveWindows : Integer;
+    MouseDelta : ImVec2;
+    KeyMap : Array[0..666 - 1] of Integer;
+    KeysDown : Array[0..666 - 1] of Boolean;
+    NavInputs : Array[0..16 - 1] of Single;
+    _UnusedPadding : Pointer;
+    Ctx : PImGuiContext;
+    MousePos : ImVec2;
+    MouseDown : Array[0..5 - 1] of Boolean;
+    MouseWheel : Single;
+    MouseWheelH : Single;
+    MouseSource : ImGuiMouseSource;
+    MouseHoveredViewport : ImGuiID;
+    KeyCtrl : Boolean;
+    KeyShift : Boolean;
+    KeyAlt : Boolean;
+    KeySuper : Boolean;
+    KeyMods : ImGuiKeyChord;
+    KeysData : Array[0..666 - 1] of ImGuiKeyData;
+    WantCaptureMouseUnlessPopupClose : Boolean;
+    MousePosPrev : ImVec2;
+    MouseClickedPos : Array[0..5 - 1] of ImVec2;
+    MouseClickedTime : Array[0..5 - 1] of Double;
+    MouseClicked : Array[0..5 - 1] of Boolean;
+    MouseDoubleClicked : Array[0..5 - 1] of Boolean;
+    MouseClickedCount : Array[0..5 - 1] of ImU16;
+    MouseClickedLastCount : Array[0..5 - 1] of ImU16;
+    MouseReleased : Array[0..5 - 1] of Boolean;
+    MouseDownOwned : Array[0..5 - 1] of Boolean;
+    MouseDownOwnedUnlessPopupClose : Array[0..5 - 1] of Boolean;
+    MouseWheelRequestAxisSwap : Boolean;
+    MouseDownDuration : Array[0..5 - 1] of Single;
+    MouseDownDurationPrev : Array[0..5 - 1] of Single;
+    MouseDragMaxDistanceAbs : Array[0..5 - 1] of ImVec2;
+    MouseDragMaxDistanceSqr : Array[0..5 - 1] of Single;
+    PenPressure : Single;
+    AppFocusLost : Boolean;
+    AppAcceptingEvents : Boolean;
+    BackendUsingLegacyKeyArrays : ImS8;
+    BackendUsingLegacyNavInputArray : Boolean;
+    InputQueueSurrogate : ImWchar16;
+    InputQueueCharacters : ImVector_ImWchar;
+  End;
+
+
+  ImVector_ImFontPtr = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImFont;
+  End;
+
+  ImVector_ImFontAtlasCustomRect = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImFontAtlasCustomRect;
+  End;
+
+  ImVector_ImFontConfig = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImFontConfig;
+  End;
+
+  ImFontAtlas = Record
+    Flags: ImFontAtlasFlags;
+    TexID: ImTextureID;
+    TexDesiredWidth: Integer;
+    TexGlyphPadding: Integer;
+    Locked: Boolean;
+    UserData: Pointer;
+    TexReady: Boolean;
+    TexPixelsUseColors: Boolean;
+    TexPixelsAlpha8: Pbyte;
+    TexPixelsRGBA32: PCardinal;
+    TexWidth: Integer;
+    TexHeight: Integer;
+    TexUvScale: ImVec2;
+    TexUvWhitePixel: ImVec2;
+    Fonts: ImVector_ImFontPtr;
+    CustomRects: ImVector_ImFontAtlasCustomRect;
+    ConfigData: ImVector_ImFontConfig;
+    TexUvLines: Array [0..63] Of ImVec4;
+    FontBuilderIO: PImFontBuilderIO;
+    FontBuilderFlags: Cardinal;
+    PackIdMouseCursors: Integer;
+    PackIdLines: Integer;
+  End;
+
+  ImFontBuilderIO = Record
+    FontBuilder_Build: Function(atlas: PImFontAtlas): Boolean; Cdecl;
+  End;
+
+
+  ImVector_float = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PSingle;
+  End;
+
+  ImVector_ImFontGlyph = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImFontGlyph;
+  End;
+
+  ImFont = Record
+    IndexAdvanceX: ImVector_float;
+    FallbackAdvanceX: Single;
+    FontSize: Single;
+    IndexLookup: ImVector_ImWchar;
+    Glyphs: ImVector_ImFontGlyph;
+    FallbackGlyph: PImFontGlyph;
+    ContainerAtlas: PImFontAtlas;
+    ConfigData: PImFontConfig;
+    ConfigDataCount: ImS16;
+    FallbackChar: ImWchar;
+    EllipsisChar: ImWchar;
+    EllipsisCharCount: ImS16;
+    EllipsisWidth: Single;
+    EllipsisCharStep: Single;
+    DirtyLookupTables: Boolean;
+    Scale: Single;
+    Ascent: Single;
+    Descent: Single;
+    MetricsTotalSurface: Integer;
+    Used4kPagesMap: Array[0..2 - 1] of ImU8;
+  End;
+
+  ImGuiViewport = Record
+    ID: ImGuiID;
+    Flags: ImGuiViewportFlags;
+    Pos: ImVec2;
+    Size: ImVec2;
+    WorkPos: ImVec2;
+    WorkSize: ImVec2;
+    DpiScale: Single;
+    ParentViewportId: ImGuiID;
+    DrawData: PImDrawData;
+    RendererUserData: Pointer;
+    PlatformUserData: Pointer;
+    PlatformHandle: Pointer;
+    PlatformHandleRaw: Pointer;
+    PlatformWindowCreated: Boolean;
+    PlatformRequestMove: Boolean;
+    PlatformRequestResize: Boolean;
+    PlatformRequestClose: Boolean;
+  End;
+
+  ImGuiPlatformMonitor = Record
+    MainPos: ImVec2;
+    MainSize: ImVec2;
+    WorkPos: ImVec2;
+    WorkSize: ImVec2;
+    DpiScale: Single;
+    PlatformHandle: Pointer;
+  End;
+
+  ImGuiPlatformImeData = Record
+    WantVisible: Boolean;
+    InputPos: ImVec2;
+    InputLineHeight: Single;
+  End;
+
+  ImVector_ImDrawList = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImDrawList;
+  End;
+  ImVector_ImDrawListPtr = ^ImVector_ImDrawList;
+  PImVector_ImDrawListPtr = ^ImVector_ImDrawListPtr;
+
+  ImDrawData = Record
+    Valid: Boolean;
+    CmdListsCount: Integer;
+    TotalIdxCount: Integer;
+    TotalVtxCount: Integer;
+    CmdLists: ImVector_ImDrawList;
+    DisplayPos: ImVec2;
+    DisplaySize: ImVec2;
+    FramebufferScale: ImVec2;
+    OwnerViewport: PImGuiViewport;
+  End;
+
+  ImGuiPlatformIO = Record
+    Platform_CreateWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_DestroyWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_ShowWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_SetWindowPos : procedure(viewport : PImGuiViewport; pos : ImVec2); Cdecl;
+    Platform_GetWindowPos : function(viewport : PImGuiViewport) : ImVec2; Cdecl;
+    Platform_SetWindowSize : procedure(viewport : PImGuiViewport; size : ImVec2); Cdecl;
+    Platform_GetWindowSize : function(viewport : PImGuiViewport) : ImVec2; Cdecl;
+    Platform_SetWindowFocus : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_GetWindowFocus : function(viewport : PImGuiViewport) : Boolean; Cdecl;
+    Platform_GetWindowMinimized : function(viewport : PImGuiViewport) : Boolean; Cdecl;
+    Platform_SetWindowTitle : procedure(viewport : PImGuiViewport; title : PChar); Cdecl;
+    Platform_SetWindowAlpha : procedure(viewport : PImGuiViewport; alpha : Single); Cdecl;
+    Platform_UpdateWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_RenderWindow : procedure(viewport : PImGuiViewport; render_arg : Pointer); Cdecl;
+    Platform_SwapBuffers : procedure(viewport : PImGuiViewport; render_arg : Pointer); Cdecl;
+    Platform_GetWindowDpiScale : function(viewport : PImGuiViewport) : Single; Cdecl;
+    Platform_OnChangedViewport : procedure(viewport : PImGuiViewport); Cdecl;
+    Platform_CreateVkSurface : function(viewport : PImGuiViewport; vk_inst : ImU64; vk_allocators : Pointer; out_vk_surface : PImU64) : Integer; Cdecl;
+    Renderer_CreateWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Renderer_DestroyWindow : procedure(viewport : PImGuiViewport); Cdecl;
+    Renderer_SetWindowSize : procedure(viewport : PImGuiViewport; size : ImVec2); Cdecl;
+    Renderer_RenderWindow : procedure(viewport : PImGuiViewport; render_arg : Pointer); Cdecl;
+    Renderer_SwapBuffers : procedure(viewport : PImGuiViewport; render_arg : Pointer); Cdecl;
+    Monitors : ImVector_ImGuiPlatformMonitor;
+    Viewports : ImVector_ImGuiViewportPtr;
+  End;
+
+  ImDrawListSharedData = Record
+    TexUvWhitePixel: ImVec2;
+    Font: PImFont;
+    FontSize: Single;
+    CurveTessellationTol: Single;
+    CircleSegmentMaxError: Single;
+    ClipRectFullscreen: ImVec4;
+    InitialFlags: ImDrawListFlags;
+    TempBuffer: ImVector_ImVec2;
+    ArcFastVtx: Array[0..48 - 1] of ImVec2;
+    ArcFastRadiusCutoff: Single;
+    CircleSegmentCounts: Array[0..64 - 1] of ImU8;
+    TexUvLines: PImVec4;
+  End;
+
+  ImGuiContextHook = Record
+    HookId: ImGuiID;
+    Type_: ImGuiContextHookType;
+    Owner: ImGuiID;
+    Callback: ImGuiContextHookCallback;
+    UserData: Pointer;
+  End;
+
+  ImGuiInputEventMousePos = Record
+    PosX, PosY: Single;
+    MouseSource: ImGuiMouseSource;
+  End;
+
+  ImGuiInputEventMouseWheel = Record
+    WheelX, WheelY: Single;
+    MouseSource: ImGuiMouseSource;
+  End;
+
+  ImGuiInputEventMouseButton = Record
+    Button: Integer;
+    Down: Boolean;
+    MouseSource: ImGuiMouseSource;
+  End;
+
+  ImGuiInputEventMouseViewport = Record
+    HoveredViewportID: ImGuiID;
+  End;
+
+  ImGuiInputEventKey = Record
+    Key: ImGuiKey;
+    Down: Boolean;
+    AnalogValue: Single;
+  End;
+
+  ImGuiInputEventText = Record
+    Char: Cardinal;
+  End;
+
+  ImGuiInputEventAppFocused = Record
+    Focused: Boolean;
+  End;
+
+  ImGuiInputEvent = Record
+    Type_: ImGuiInputEventType;
+    Source: ImGuiInputSource;
+    EventId: ImU32;
+    union: Record
+      Case Integer Of
+        0: (MousePos: ImGuiInputEventMousePos);
+        1: (MouseWheel: ImGuiInputEventMouseWheel);
+        2: (MouseButton: ImGuiInputEventMouseButton);
+        3: (MouseViewport: ImGuiInputEventMouseViewport);
+        4: (Key: ImGuiInputEventKey);
+        5: (Text: ImGuiInputEventText);
+        6: (AppFocused: ImGuiInputEventAppFocused);
+    End;
+    AddedByTestEngine: Boolean;
+  End;
+
+  ImGuiMenuColumns = Record
+    TotalWidth: Cardinal;
+    NextTotalWidth: Cardinal;
+    Spacing: Word;
+    OffsetIcon: Word;
+    OffsetLabel: Word;
+    OffsetShortcut: Word;
+    OffsetMark: Word;
+    Widths: Array [0..3] Of Word;
+  End;
+
+  ImVector_ImGuiWindowPtr = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiWindow;
+  End;
+
+  ImGuiDockNode = Bitpacked Record
+    ID: ImGuiID;
+    SharedFlags: ImGuiDockNodeFlags;
+    LocalFlags: ImGuiDockNodeFlags;
+    LocalFlagsInWindows: ImGuiDockNodeFlags;
+    MergedFlags: ImGuiDockNodeFlags;
+    State: ImGuiDockNodeState;
+    ParentNode: PImGuiDockNode;
+    ChildNodes: Array [0..1] Of PImGuiDockNode;
+    Windows: ImVector_ImGuiWindowPtr;
+    TabBar: PImGuiTabBar;
+    Pos: ImVec2;
+    Size: ImVec2;
+    SizeRef: ImVec2;
+    SplitAxis: ImGuiAxis;
+    WindowClass: ImGuiWindowClass;
+    LastBgColor: ImU32;
+    HostWindow: PImGuiWindow;
+    VisibleWindow: PImGuiWindow;
+    CentralNode: PImGuiDockNode;
+    OnlyNodeWithWindows: PImGuiDockNode;
+    CountNodeWithWindows: Integer;
+    LastFrameAlive: Integer;
+    LastFrameActive: Integer;
+    LastFrameFocused: Integer;
+    LastFocusedNodeId: ImGuiID;
+    SelectedTabId: ImGuiID;
+    WantCloseTabId: ImGuiID;
+    RefViewportId: ImGuiID;
+    AuthorityForPos: T3Bits;
+    AuthorityForSize: T3Bits;
+    AuthorityForViewport: T3Bits;
+    IsVisible: T1Bit;
+    IsFocused: T1Bit;
+    IsBgDrawnThisFrame: T1Bit;
+    HasCloseButton: T1Bit;
+    HasWindowMenuButton: T1Bit;
+    HasCentralNodeChild: T1Bit;
+    WantCloseAll: T1Bit;
+    WantLockSizeOnce: T1Bit;
+    WantMouseMove: T1Bit;
+    WantHiddenTabBarUpdate: T1Bit;
+    WantHiddenTabBarToggle: T1Bit;
+  End;
+
+  ImGuiWindowTempData = Record
+    CursorPos: ImVec2;
+    CursorPosPrevLine: ImVec2;
+    CursorStartPos: ImVec2;
+    CursorMaxPos: ImVec2;
+    IdealMaxPos: ImVec2;
+    CurrLineSize: ImVec2;
+    PrevLineSize: ImVec2;
+    CurrLineTextBaseOffset: Single;
+    PrevLineTextBaseOffset: Single;
+    IsSameLine: Boolean;
+    IsSetPos: Boolean;
+    Indent: ImVec1;
+    ColumnsOffset: ImVec1;
+    GroupOffset: ImVec1;
+    CursorStartPosLossyness: ImVec2;
+    NavLayerCurrent: ImGuiNavLayer;
+    NavLayersActiveMask: Smallint;
+    NavLayersActiveMaskNext: Smallint;
+    NavIsScrollPushableX: Boolean;
+    NavHideHighlightOneFrame: Boolean;
+    NavWindowHasScrollY: Boolean;
+    MenuBarAppending: Boolean;
+    MenuBarOffset: ImVec2;
+    MenuColumns: ImGuiMenuColumns;
+    TreeDepth: Integer;
+    TreeJumpToParentOnPopMask: Cardinal;
+    ChildWindows: ImVector_ImGuiWindowPtr;
+    StateStorage: PImGuiStorage;
+    CurrentColumns: PImGuiOldColumns;
+    CurrentTableIdx: Integer;
+    LayoutType: ImGuiLayoutType;
+    ParentLayoutType: ImGuiLayoutType;
+    ItemWidth: Single;
+    TextWrapPos: Single;
+    ItemWidthStack: ImVector_float;
+    TextWrapPosStack: ImVector_float;
+  End;
+
+  ImVector_ImGuiOldColumns = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiOldColumns;
+  End;
+
+  ImDrawList = Record
+    CmdBuffer: ImVector_ImDrawCmd;
+    IdxBuffer: ImVector_ImDrawIdx;
+    VtxBuffer: ImVector_ImDrawVert;
+    Flags: ImDrawListFlags;
+    _VtxCurrentIdx: Cardinal;
+    _Data: PImDrawListSharedData;
+    _OwnerName: PChar;
+    _VtxWritePtr: PImDrawVert;
+    _IdxWritePtr: PImDrawIdx;
+    _ClipRectStack: ImVector_ImVec4;
+    _TextureIdStack: ImVector_ImTextureID;
+    _Path: ImVector_ImVec2;
+    _CmdHeader: ImDrawCmdHeader;
+    _Splitter: ImDrawListSplitter;
+    _FringeScale: Single;
+  End;
+
+  ImGuiWindow = Record
+    Ctx: PImGuiContext;
+    Name: Pansichar;
+    ID: ImGuiID;
+    Flags, FlagsPreviousFrame: ImGuiWindowFlags;
+    WindowClass: ImGuiWindowClass;
+    Viewport: PImGuiViewportP;
+    ViewportId: ImGuiID;
+    ViewportPos: ImVec2;
+    ViewportAllowPlatformMonitorExtend: Integer;
+    Pos, Size, SizeFull: ImVec2;
+    ContentSize, ContentSizeIdeal, ContentSizeExplicit: ImVec2;
+    WindowPadding: ImVec2;
+    WindowRounding, WindowBorderSize: Single;
+    DecoOuterSizeX1, DecoOuterSizeY1, DecoOuterSizeX2, DecoOuterSizeY2: Single;
+    DecoInnerSizeX1, DecoInnerSizeY1: Single;
+    NameBufLen: Integer;
+    MoveId, TabId, ChildId: ImGuiID;
+    Scroll, ScrollMax, ScrollTarget, ScrollTargetCenterRatio,
+    ScrollTargetEdgeSnapDist: ImVec2;
+    ScrollbarSizes: ImVec2;
+    ScrollbarX, ScrollbarY: Boolean;
+    ViewportOwned, Active, WasActive, WriteAccessed: Boolean;
+    Collapsed, WantCollapseToggle, SkipItems, Appearing, Hidden,
+    IsFallbackWindow: Boolean;
+    IsExplicitChild, HasCloseButton: Boolean;
+    ResizeBorderHeld: Shortint;
+    BeginCount, BeginCountPreviousFrame, BeginOrderWithinParent,
+    BeginOrderWithinContext: Shortint;
+    FocusOrder: Shortint;
+    PopupId: ImGuiID;
+    AutoFitFramesX, AutoFitFramesY, AutoFitChildAxises: Shortint;
+    AutoFitOnlyGrows: Boolean;
+    AutoPosLastDirection: ImGuiDir;
+    HiddenFramesCanSkipItems, HiddenFramesCannotSkipItems,
+    HiddenFramesForRenderOnly, DisableInputsFrames: Shortint;
+    SetWindowPosAllowFlags, SetWindowSizeAllowFlags, SetWindowCollapsedAllowFlags,
+    SetWindowDockAllowFlags: ImGuiCond;
+    SetWindowPosVal, SetWindowPosPivot: ImVec2;
+    IDStack: ImVector_ImGuiID;
+    DC: ImGuiWindowTempData;
+    OuterRectClipped, InnerRect, InnerClipRect, WorkRect, ParentWorkRect: ImRect;
+    ClipRect, ContentRegionRect: ImRect;
+    HitTestHoleSize, HitTestHoleOffset: ImVec2ih;
+    LastFrameActive, LastFrameJustFocused: Integer;
+    LastTimeActive, ItemWidthDefault: Single;
+    StateStorage: ImGuiStorage;
+    ColumnsStorage: ImVector_ImGuiOldColumns;
+    FontWindowScale, FontDpiScale: Single;
+    SettingsOffset: Integer;
+    DrawList: PImDrawList;
+    DrawListInst: ImDrawList;
+    ParentWindow, ParentWindowInBeginStack: PImGuiWindow;
+    RootWindow, RootWindowPopupTree, RootWindowDockTree: PImGuiWindow;
+    RootWindowForTitleBarHighlight, RootWindowForNav: PImGuiWindow;
+    NavLastChildNavWindow: PImGuiWindow;
+    NavLastIds: Array[0..ImGuiNavLayer_COUNT - 1] Of ImGuiID;
+    NavRectRel: Array[0..ImGuiNavLayer_COUNT - 1] Of ImRect;
+    NavPreferredScoringPosRel: Array[0..ImGuiNavLayer_COUNT - 1] Of ImVec2;
+    NavRootFocusScopeId: ImGuiID;
+    MemoryDrawListIdxCapacity, MemoryDrawListVtxCapacity: Integer;
+    MemoryCompacted: Boolean;
+    DockIsActive, DockNodeIsVisible, DockTabIsVisible, DockTabWantClose: Boolean;
+    DockOrder: Shortint;
+    DockStyle: ImGuiWindowDockStyle;
+    DockNode, DockNodeAsHost: PImGuiDockNode;
+    DockId: ImGuiID;
+    DockTabItemStatusFlags: ImGuiItemStatusFlags;
+    DockTabItemRect: ImRect;
+  End;
+
+
+  ImDrawDataBuilder = Record
+    Layers: Array[0..1] Of PImVector_ImDrawListPtr;
+    LayerData1: ImVector_ImDrawListPtr;
+  End;
+
+  ImGuiViewportP = Record
+    _ImGuiViewport: ImGuiViewport;
+    Window: PImGuiWindow;
+    Idx: Integer;
+    LastFrameActive: Integer;
+    LastFocusedStampCount: Integer;
+    LastNameHash: ImGuiID;
+    LastPos: ImVec2;
+    Alpha: Single;
+    LastAlpha: Single;
+    LastFocusedHadNavWindow: Boolean;
+    PlatformMonitor: Shortint;
+    BgFgDrawListsLastFrame: Array[0..1] Of Integer;
+    BgFgDrawLists: Array[0..1] Of PImDrawList;
+    DrawDataP: ImDrawData;
+    DrawDataBuilder: ImDrawDataBuilder;
+    LastPlatformPos: ImVec2;
+    LastPlatformSize: ImVec2;
+    LastRendererSize: ImVec2;
+    WorkOffsetMin: ImVec2;
+    WorkOffsetMax: ImVec2;
+    BuildWorkOffsetMin: ImVec2;
+    BuildWorkOffsetMax: ImVec2;
+  End;
+
+  ImGuiKeyRoutingData = Record
+    NextEntryIndex: ImGuiKeyRoutingIndex;
+    Mods: ImU16;
+    RoutingNextScore: ImU8;
+    RoutingCurr: ImGuiID;
+    RoutingNext: ImGuiID;
+  End;
+
+  ImVector_ImGuiKeyRoutingData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiKeyRoutingData;
+  End;
+  PImVector_ImGuiKeyRoutingData = ^ImVector_ImGuiKeyRoutingData;
+
+  ImGuiKeyRoutingTable = Record
+    Index: Array[0..ImGuiKey_NamedKey_COUNT - 1] Of ImGuiKeyRoutingIndex;
+    Entries: ImVector_ImGuiKeyRoutingData;
+    EntriesNext: ImVector_ImGuiKeyRoutingData;
+  End;
+
+  ImGuiKeyOwnerData = Record
+    OwnerCurr: ImGuiID;
+    OwnerNext: ImGuiID;
+    LockThisFrame: Boolean;
+    LockUntilRelease: Boolean;
+  End;
+
+
+  ImGuiNavItemData = Record
+    Window: PImGuiWindow;
+    ID: ImGuiID;
+    FocusScopeId: ImGuiID;
+    RectRel: ImRect;
+    InFlags: ImGuiItemFlags;
+    SelectionUserData: ImGuiSelectionUserData;
+    DistBox: Single;
+    DistCenter: Single;
+    DistAxial: Single;
+  End;
+
+  StbUndoRecord = Record
+    where: Integer;
+    insert_length: Integer;
+    delete_length: Integer;
+    char_storage: Integer;
+  End;
+  PStbUndoRecord = ^StbUndoRecord;
+
+  StbUndoState = Record
+    undo_rec: Array[0..99 - 1] of StbUndoRecord;
+    undo_char: Array[0..999 - 1] of ImWchar;
+    undo_point: ImS16;
+    redo_point: ImS16;
+    undo_char_point: Integer;
+    redo_char_point: Integer;
+  End;
+  PStbUndoState = ^StbUndoState;
+
+  STB_TexteditState = Record
+    cursor: Integer;
+    select_start: Integer;
+    select_end: Integer;
+    insert_mode: ImU8;
+    row_count_per_page: Integer;
+    cursor_at_end_of_line: ImU8;
+    initialized: ImU8;
+    has_preferred_x: ImU8;
+    single_line: ImU8;
+    padding1: ImU8;
+    padding2: ImU8;
+    padding3: ImU8;
+    preferred_x: Single;
+    undostate: StbUndoState;
+  End;
+  PSTB_TexteditState = ^STB_TexteditState;
+
+  ImGuiInputTextState = Record
+    Ctx: PImGuiContext;
+    ID: ImGuiID;
+    CurLenW: Integer;
+    CurLenA: Integer;
+    TextW: ImVector_ImWchar;
+    TextA: ImVector_char;
+    InitialTextA: ImVector_char;
+    TextAIsValid: Boolean;
+    BufCapacityA: Integer;
+    ScrollX: Single;
+    Stb: STB_TexteditState;
+    CursorAnim: Single;
+    CursorFollow: Boolean;
+    SelectedAllMouseLock: Boolean;
+    Edited: Boolean;
+    Flags: ImGuiInputTextFlags;
+  End;
+
+  ImGuiInputTextDeactivatedState = Record
+    ID: ImGuiID;
+    TextA: ImVector_char;
+  End;
+
+  ImGuiComboPreviewData = Record
+    PreviewRect: ImRect;
+    BackupCursorPos: ImVec2;
+    BackupCursorMaxPos: ImVec2;
+    BackupCursorPosPrevLine: ImVec2;
+    BackupPrevLineTextBaseOffset: Single;
+    BackupLayout: ImGuiLayoutType;
+  End;
+
+  { ImGuiDockRequest }
+
+  ImGuiDockRequestType = (
+    ImGuiDockRequestType_None = 0,
+    ImGuiDockRequestType_Dock,
+    ImGuiDockRequestType_Undock,
+    ImGuiDockRequestType_Split  // Split is the same as Dock but without a DockPayload
+  );
+
+  ImGuiDockRequest = Record
+    Type_: ImGuiDockRequestType;
+    DockTargetWindow: PImGuiWindow;   // Destination/Target Window to dock into
+    DockTargetNode: PImGuiDockNode;   // Destination/Target Node to dock into
+    DockPayload: PImGuiWindow;        // Source/Payload window to dock
+    DockSplitDir: ImGuiDir;
+    DockSplitRatio: Single;
+    DockSplitOuter: Boolean;
+    UndockTargetWindow: PImGuiWindow;
+    UndockTargetNode: PImGuiDockNode;
+    constructor New(_DockSplitRatio: Single);
+  End;
+
+
+  ImVector_int = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PInteger;
+  End;
+
+  ImGuiTextIndex = Record
+    LineOffsets: ImVector_int;
+    EndOffset: Integer;
+  End;
+
+  ImGuiMetricsConfig = Record
+    ShowDebugLog: Boolean;
+    ShowIDStackTool: Boolean;
+    ShowWindowsRects: Boolean;
+    ShowWindowsBeginOrder: Boolean;
+    ShowTablesRects: Boolean;
+    ShowDrawCmdMesh: Boolean;
+    ShowDrawCmdBoundingBoxes: Boolean;
+    ShowAtlasTintedWithTextColor: Boolean;
+    ShowDockingNodes: Boolean;
+    ShowWindowsRectsType: Integer;
+    ShowTablesRectsType: Integer;
+  End;
+
+  ImGuiStackLevelInfo = Record
+    ID: ImGuiID;
+    QueryFrameCount: ImS8;
+    QuerySuccess: Boolean;
+    DataType: ImGuiDataType;
+    Desc: Array[0..57 - 1] of Char;
+  End;
+
+  ImVector_ImGuiStackLevelInfo = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiStackLevelInfo;
+  End;
+  PImVector_ImGuiStackLevelInfo = ^ImVector_ImGuiStackLevelInfo;
+
+  ImGuiStackTool = Record
+    LastActiveFrame: Integer;
+    StackLevel: Integer;
+    QueryId: ImGuiID;
+    Results: ImVector_ImGuiStackLevelInfo;
+    CopyToClipboardOnCtrlC: Boolean;
+    CopyToClipboardLastTime: Single;
+  End;
+  PImGuiStackTool = ^ImGuiStackTool;
+
+  ImGuiIDStackTool = record
+    LastActiveFrame: Integer;
+    StackLevel: Integer;
+    QueryId: ImGuiID;
+    Results: ImVector_ImGuiStackLevelInfo;
+    CopyToClipboardOnCtrlC: Boolean;
+    CopyToClipboardLastTime: Single;
+  end;
+
+  ImGuiContext = Record
+    Initialized : Boolean;
+    FontAtlasOwnedByContext : Boolean;
+    IO : ImGuiIO;
+    PlatformIO : ImGuiPlatformIO;
+    Style : ImGuiStyle;
+    ConfigFlagsCurrFrame : ImGuiConfigFlags;
+    ConfigFlagsLastFrame : ImGuiConfigFlags;
+    Font : PImFont;
+    FontSize : Single;
+    FontBaseSize : Single;
+    DrawListSharedData : ImDrawListSharedData;
+
+    Time : Double;
+    FrameCount : Integer;
+    FrameCountEnded : Integer;
+    FrameCountPlatformEnded : Integer;
+    FrameCountRendered : Integer;
+    WithinFrameScope : Boolean;
+    WithinFrameScopeWithImplicitWindow : Boolean;
+    WithinEndChild : Boolean;
+    GcCompactAll : Boolean;
+    TestEngineHookItems : Boolean;
+    TestEngine : Pointer;
+
+    InputEventsQueue : ImVector_ImGuiInputEvent;
+    InputEventsTrail : ImVector_ImGuiInputEvent;
+    InputEventsNextMouseSource : ImGuiMouseSource;
+
+    InputEventsNextEventId : ImU32;
+
+    Windows : ImVector_ImGuiWindowPtr;
+    WindowsFocusOrder : ImVector_ImGuiWindowPtr;
+    WindowsTempSortBuffer : ImVector_ImGuiWindowPtr;
+    CurrentWindowStack : ImVector_ImGuiWindowStackData;
+    WindowsById : ImGuiStorage;
+    WindowsActiveCount : Integer;
+    WindowsHoverPadding : ImVec2;
+    CurrentWindow : PImGuiWindow;
+    HoveredWindow : PImGuiWindow;
+    HoveredWindowUnderMovingWindow : PImGuiWindow;
+    MovingWindow : PImGuiWindow;
+    WheelingWindow : PImGuiWindow;
+    WheelingWindowRefMousePos : ImVec2;
+    WheelingWindowStartFrame : Integer;
+    WheelingWindowScrolledFrame : Integer;
+    WheelingWindowReleaseTimer : Single;
+    WheelingWindowWheelRemainder : ImVec2;
+    WheelingAxisAvg : ImVec2;
+    DebugHookIdInfo : ImGuiID;
+    HoveredId : ImGuiID;
+
+    HoveredIdPreviousFrame : ImGuiID;
+    HoveredIdAllowOverlap : Boolean;
+    HoveredIdDisabled : Boolean;
+    HoveredIdTimer : Single;
+    HoveredIdNotActiveTimer : Single;
+    ActiveId : ImGuiID;
+    ActiveIdIsAlive : ImGuiID;
+    ActiveIdTimer : Single;
+    ActiveIdIsJustActivated : Boolean;
+    ActiveIdAllowOverlap : Boolean;
+    ActiveIdNoClearOnFocusLoss : Boolean;
+    ActiveIdHasBeenPressedBefore : Boolean;
+    ActiveIdHasBeenEditedBefore : Boolean;
+    ActiveIdHasBeenEditedThisFrame : Boolean;
+    ActiveIdClickOffset : ImVec2;
+    ActiveIdWindow : PImGuiWindow;
+    ActiveIdSource : ImGuiInputSource;
+    ActiveIdMouseButton : Integer;
+    ActiveIdPreviousFrame : ImGuiID;
+    ActiveIdPreviousFrameIsAlive : Boolean;
+    ActiveIdPreviousFrameHasBeenEditedBefore : Boolean;
+    ActiveIdPreviousFrameWindow : PImGuiWindow;
+    LastActiveId : ImGuiID;
+
+    LastActiveIdTimer : Single;
+    KeysOwnerData : Array[0..154 - 1] of ImGuiKeyOwnerData;
+    KeysRoutingTable : ImGuiKeyRoutingTable;
+    ActiveIdUsingNavDirMask : ImU32;
+    ActiveIdUsingAllKeyboardKeys : Boolean;
+    ActiveIdUsingNavInputMask : ImU32;
+    CurrentFocusScopeId : ImGuiID;
+    CurrentItemFlags : ImGuiItemFlags;
+    DebugLocateId : ImGuiID;
+    NextItemData : ImGuiNextItemData;
+    LastItemData : ImGuiLastItemData;
+    NextWindowData : ImGuiNextWindowData;
+    DebugShowGroupRects : Boolean;
+    ColorStack : ImVector_ImGuiColorMod;
+
+    StyleVarStack : ImVector_ImGuiStyleMod;
+    FontStack : ImVector_ImFontPtr;
+    FocusScopeStack : ImVector_ImGuiID;
+    ItemFlagsStack : ImVector_ImGuiItemFlags;
+    GroupStack : ImVector_ImGuiGroupData;
+    OpenPopupStack : ImVector_ImGuiPopupData;
+    BeginPopupStack : ImVector_ImGuiPopupData;
+    NavTreeNodeStack : ImVector_ImGuiNavTreeNodeData;
+    BeginMenuCount : Integer;
+    Viewports : ImVector_ImGuiViewportPPtr;
+    CurrentDpiScale : Single;
+    CurrentViewport : PImGuiViewportP;
+    MouseViewport : PImGuiViewportP;
+    MouseLastHoveredViewport : PImGuiViewportP;
+    PlatformLastFocusedViewportId : ImGuiID;
+    FallbackMonitor : ImGuiPlatformMonitor;
+    ViewportCreatedCount : Integer;
+    PlatformWindowsCreatedCount : Integer;
+    ViewportFocusedStampCount : Integer;
+    NavWindow : PImGuiWindow;
+    NavId : ImGuiID;
+
+    NavFocusScopeId : ImGuiID;
+    NavActivateId : ImGuiID;
+    NavActivateDownId : ImGuiID;
+    NavActivatePressedId : ImGuiID;
+    NavActivateFlags : ImGuiActivateFlags;
+    NavJustMovedToId : ImGuiID;
+    NavJustMovedToFocusScopeId : ImGuiID;
+    NavJustMovedToKeyMods : ImGuiKeyChord;
+    NavNextActivateId : ImGuiID;
+    NavNextActivateFlags : ImGuiActivateFlags;
+    NavInputSource : ImGuiInputSource;
+    NavLayer : ImGuiNavLayer;
+    NavLastValidSelectionUserData : ImGuiSelectionUserData;
+    NavIdIsAlive : Boolean;
+    NavMousePosDirty : Boolean;
+    NavDisableHighlight : Boolean;
+    NavDisableMouseHover : Boolean;
+    NavAnyRequest : Boolean;
+    NavInitRequest : Boolean;
+    NavInitRequestFromMove : Boolean;
+    NavInitResult : ImGuiNavItemData;
+
+    NavMoveSubmitted : Boolean;
+    NavMoveScoringItems : Boolean;
+    NavMoveForwardToNextFrame : Boolean;
+    NavMoveFlags : ImGuiNavMoveFlags;
+    NavMoveScrollFlags : ImGuiScrollFlags;
+    NavMoveKeyMods : ImGuiKeyChord;
+    NavMoveDir : ImGuiDir;
+    NavMoveDirForDebug : ImGuiDir;
+    NavMoveClipDir : ImGuiDir;
+    NavScoringRect : ImRect;
+    NavScoringNoClipRect : ImRect;
+    NavScoringDebugCount : Integer;
+    NavTabbingDir : Integer;
+    NavTabbingCounter : Integer;
+    NavMoveResultLocal : ImGuiNavItemData;
+    NavMoveResultLocalVisible : ImGuiNavItemData;
+    NavMoveResultOther : ImGuiNavItemData;
+    NavTabbingResultFirst : ImGuiNavItemData;
+    ConfigNavWindowingKeyNext : ImGuiKeyChord;
+    ConfigNavWindowingKeyPrev : ImGuiKeyChord;
+    NavWindowingTarget : PImGuiWindow;
+    NavWindowingTargetAnim : PImGuiWindow;
+    NavWindowingListWindow : PImGuiWindow;
+    NavWindowingTimer : Single;
+    NavWindowingHighlightAlpha : Single;
+    NavWindowingToggleLayer : Boolean;
+    NavWindowingAccumDeltaPos : ImVec2;
+    NavWindowingAccumDeltaSize : ImVec2;
+    DimBgRatio : Single;
+
+    DragDropActive : Boolean;
+    DragDropWithinSource : Boolean;
+    DragDropWithinTarget : Boolean;
+    DragDropSourceFlags : ImGuiDragDropFlags;
+    DragDropSourceFrameCount : Integer;
+    DragDropMouseButton : Integer;
+    DragDropPayload : ImGuiPayload;
+    DragDropTargetRect : ImRect;
+    DragDropTargetId : ImGuiID;
+    DragDropAcceptFlags : ImGuiDragDropFlags;
+    DragDropAcceptIdCurrRectSurface : Single;
+    DragDropAcceptIdCurr : ImGuiID;
+    DragDropAcceptIdPrev : ImGuiID;
+    DragDropAcceptFrameCount : Integer;
+    DragDropHoldJustPressedId : ImGuiID;
+    DragDropPayloadBufHeap : ImVector_unsigned_char;
+    DragDropPayloadBufLocal : Array[0..16 - 1] of ImU8;
+    ClipperTempDataStacked : Integer;
+    ClipperTempData : ImVector_ImGuiListClipperData;
+    CurrentTable : PImGuiTable;
+    TablesTempDataStacked : Integer;
+    TablesTempData : ImVector_ImGuiTableTempData;
+
+    Tables : ImPool_ImGuiTable;
+    TablesLastTimeActive : ImVector_float;
+    DrawChannelsTempMergeBuffer : ImVector_ImDrawChannel;
+    CurrentTabBar : PImGuiTabBar;
+    TabBars : ImPool_ImGuiTabBar;
+    CurrentTabBarStack : ImVector_ImGuiPtrOrIndex;
+    ShrinkWidthBuffer : ImVector_ImGuiShrinkWidthItem;
+    HoverItemDelayId : ImGuiID;
+    HoverItemDelayIdPreviousFrame : ImGuiID;
+    HoverItemDelayTimer : Single;
+    HoverItemDelayClearTimer : Single;
+    HoverItemUnlockedStationaryId : ImGuiID;
+    HoverWindowUnlockedStationaryId : ImGuiID;
+    MouseCursor : ImGuiMouseCursor;
+    MouseStationaryTimer : Single;
+    MouseLastValidPos : ImVec2;
+    InputTextState : ImGuiInputTextState;
+    InputTextDeactivatedState : ImGuiInputTextDeactivatedState;
+
+    InputTextPasswordFont : ImFont;
+    TempInputId : ImGuiID;
+    ColorEditOptions : ImGuiColorEditFlags;
+    ColorEditCurrentID : ImGuiID;
+    ColorEditSavedID : ImGuiID;
+    ColorEditSavedHue : Single;
+    ColorEditSavedSat : Single;
+    ColorEditSavedColor : ImU32;
+    ColorPickerRef : ImVec4;
+    ComboPreviewData : ImGuiComboPreviewData;
+    WindowResizeBorderExpectedRect : ImRect;
+    WindowResizeRelativeMode : Boolean;
+    SliderGrabClickOffset : Single;
+    SliderCurrentAccum : Single;
+    SliderCurrentAccumDirty : Boolean;
+    DragCurrentAccumDirty : Boolean;
+    DragCurrentAccum : Single;
+    DragSpeedDefaultRatio : Single;
+    ScrollbarClickDeltaToGrabCenter : Single;
+    DisabledAlphaBackup : Single;
+    DisabledStackSize : ImS16;
+    LockMarkEdited : ImS16;
+    TooltipOverrideCount : ImS16;
+
+    ClipboardHandlerData : ImVector_char;
+    MenusIdSubmittedThisFrame : ImVector_ImGuiID;
+    TypingSelectState : ImGuiTypingSelectState;
+    PlatformImeData : ImGuiPlatformImeData;
+    PlatformImeDataPrev : ImGuiPlatformImeData;
+    PlatformImeViewport : ImGuiID;
+    DockContext : ImGuiDockContext;
+    DockNodeWindowMenuHandler : procedure(ctx : PImGuiContext; node : PImGuiDockNode; tab_bar : PImGuiTabBar); Cdecl;
+    SettingsLoaded : Boolean;
+    SettingsDirtyTimer : Single;
+    SettingsIniData : ImGuiTextBuffer;
+    SettingsHandlers : ImVector_ImGuiSettingsHandler;
+    SettingsWindows : ImChunkStream_ImGuiWindowSettings;
+    SettingsTables : ImChunkStream_ImGuiTableSettings;
+    Hooks : ImVector_ImGuiContextHook;
+    HookIdNext : ImGuiID;
+    LocalizationTable : Array[0..11 - 1] of PChar;
+
+    LogEnabled : Boolean;
+    LogType : ImGuiLogType;
+    LogFile : ImFileHandle;
+    LogBuffer : ImGuiTextBuffer;
+    LogNextPrefix : PChar;
+    LogNextSuffix : PChar;
+    LogLinePosY : Single;
+    LogLineFirstItem : Boolean;
+    LogDepthRef : Integer;
+    LogDepthToExpand : Integer;
+    LogDepthToExpandDefault : Integer;
+    DebugLogFlags : ImGuiDebugLogFlags;
+    DebugLogBuf : ImGuiTextBuffer;
+    DebugLogIndex : ImGuiTextIndex;
+    DebugLogClipperAutoDisableFrames : ImU8;
+    DebugLocateFrames : ImU8;
+    DebugBeginReturnValueCullDepth : ImS8;
+    DebugItemPickerActive : Boolean;
+    DebugItemPickerMouseButton : ImU8;
+    DebugItemPickerBreakId : ImGuiID;
+    DebugMetricsConfig : ImGuiMetricsConfig;
+    DebugIDStackTool : ImGuiIDStackTool;
+    DebugAllocInfo : ImGuiDebugAllocInfo;
+
+    DebugHoveredDockNode : PImGuiDockNode;
+    FramerateSecPerFrame : Array[0..60 - 1] of Single;
+    FramerateSecPerFrameIdx : Integer;
+    FramerateSecPerFrameCount : Integer;
+    FramerateSecPerFrameAccum : Single;
+    WantCaptureMouseNextFrame : Integer;
+    WantCaptureKeyboardNextFrame : Integer;
+    WantTextInputNextFrame : Integer;
+    TempBuffer : ImVector_char;
+  End;
+
+
+  ImFontAtlasCustomRect = Record
+    Width: ImU16;
+    Height: ImU16;
+    X: ImU16;
+    Y: ImU16;
+    GlyphID: ImU32;
+    GlyphAdvanceX: Single;
+    GlyphOffset: ImVec2;
+    Font: PImFont;
+  End;
+
+
+  ImFontConfig = Record
+    FontData: Pointer;
+    FontDataSize: Integer;
+    FontDataOwnedByAtlas: Boolean;
+    FontNo: Integer;
+    SizePixels: Single;
+    OversampleH: Integer;
+    OversampleV: Integer;
+    PixelSnapH: Boolean;
+    GlyphExtraSpacing: ImVec2;
+    GlyphOffset: ImVec2;
+    GlyphRanges: PImWchar;
+    GlyphMinAdvanceX: Single;
+    GlyphMaxAdvanceX: Single;
+    MergeMode: Boolean;
+    FontBuilderFlags: ImU32;
+    RasterizerMultiply: Single;
+    EllipsisChar: ImWchar;
+    Name: Array[0..40 - 1] of Char;
+    DstFont: PImFont;
+  End;
+
+
+  ImGuiOldColumnData = Record
+    OffsetNorm: Single;
+    OffsetNormBeforeResize: Single;
+    Flags: ImGuiOldColumnFlags;
+    ClipRect: ImRect;
+  End;
+
+
+  ImVector_ImGuiOldColumnData = Record
+    Size: Integer;
+    Capacity: Integer;
+    Data: PImGuiOldColumnData;
+  End;
+
+  ImGuiOldColumns = Record
+    ID: ImGuiID;
+    Flags: ImGuiOldColumnFlags;
+    IsFirstFrame: Boolean;
+    IsBeingResized: Boolean;
+    Current: Integer;
+    Count: Integer;
+    OffMinX, OffMaxX: Single;
+    LineMinY, LineMaxY: Single;
+    HostCursorPosY: Single;
+    HostCursorMaxPosX: Single;
+    HostInitialClipRect: ImRect;
+    HostBackupClipRect: ImRect;
+    HostBackupParentWorkRect: ImRect;
+    Columns: ImVector_ImGuiOldColumnData;
+    Splitter: ImDrawListSplitter;
+  End;
+
+  { ImGuiDockNodeSettings }
+
+  ImGuiDockNodeSettings = Record
+    ID: ImGuiID;
+    ParentNodeId: ImGuiID;
+    ParentWindowId: ImGuiID;
+    SelectedTabId: ImGuiID;
+    SplitAxis: Shortint;
+    Depth: Byte;
+    Flags: ImGuiDockNodeFlags;
+    Pos: ImVec2ih;
+    Size: ImVec2ih;
+    SizeRef: ImVec2ih;
+    constructor New(SplitAxis_: ImGuiAxis);
+  End;
+
+  ImFontGlyph = bitpacked Record
+    Colored: T1Bit;
+    Visible: T1Bit;
+    Codepoint: T30Bits;
+    AdvanceX: Single;
+    X0, Y0, X1, Y1: Single;
+    U0, V0, U1, V1: Single;
+  End;
+
+Implementation
+
+{ ImVec2 }
+
+constructor ImVec2.New(const _x, _y: Single);
+Begin
+  Self.x := _x;
+  Self.y := _y;
+End;
+
+{ ImVec3 }
+
+constructor ImVec3.New(const _x, _y, _z: Single);
+begin
+  Self.x := _x;
+  Self.y := _y;
+  Self.z := _z;
+end;
+
+{ ImVec4 }
+
+constructor ImVec4.New(const _x, _y, _z, _w: Single);
+begin
+  Self.x := _x;
+  Self.y := _y;
+  Self.z := _z;
+  Self.w := _w;
+end;
+
+{ ImGuiDockRequest }
+
+constructor ImGuiDockRequest.New(_DockSplitRatio : Single);
+Begin
+  FillChar(Self, SizeOf(ImGuiDockRequest), 0);
+  Self.DockSplitRatio := _DockSplitRatio;
+End;
+
+{ ImGuiDockNodeSettings }
+
+constructor ImGuiDockNodeSettings.New(SplitAxis_ : ImGuiAxis);
+Begin
+  FillChar(Self, SizeOf(ImGuiDockNodeSettings), 0);
+  Self.SplitAxis := Shortint(SplitAxis_); // Initialize with your default value
+End;
+
+End.
+
+

+ 4142 - 0
src/PasImGui.pas

@@ -0,0 +1,4142 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+Unit PasImGui;
+{$IfDef FPC}
+  {$mode objfpc}{$H+}
+  {$ModeSwitch advancedrecords}
+  {$modeswitch typehelpers}
+  {.$Define INLINE} {There's a bug in FPC Trunk version when we inline helper functions}
+{$EndIf}
+
+
+Interface
+
+Uses
+  SysUtils,
+  PasImGui.Enums,
+  PasImGui.Types,
+  PasImGui.Apis;
+
+Const
+  {$if defined(Darwin)}
+    SharedSuffix = 'dylib';
+  {$elseif defined(linux)}
+    {$LinkLib C}
+    SharedSuffix = 'so';
+  {$elseif defined(MSWINDOWS)}
+    SharedSuffix = 'dll';
+  {$endif}
+  CIMGUI_LIB = 'cimgui.' + SharedSuffix;
+
+Type
+  { ImGui }
+  ImGui = Class
+  Public
+    { Context }
+    Class Function CreateContext(shared_font_atlas: PImFontAtlas): PImGuiContext;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure DestroyContext(ctx: PImGuiContext); {$IfDef INLINE} inline;{$EndIf}
+
+
+    { IO }
+    Class Function GetIO(): PImGuiIO; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetPlatformIO(): PImGuiPlatformIO; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetStyle(): PImGuiStyle; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetDrawData(): PImDrawData; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure NewFrame(); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Render(); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ShowUserGuide(); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ShowStyleEditor(ref: PImGuiStyle); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ShowDemoWindow(p_open: PBoolean = nil);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ShowMetricsWindow(p_open: PBoolean = nil);
+    {$IfDef INLINE} inline;{$EndIf}
+
+
+    {Misc}
+    Class Function GetMainViewport(): PImGuiViewport; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCurrentContext(): PImGuiContext; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetDragDropPayload(): PImGuiPayload; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCenterViewPort(ViewPort : PImGuiViewport) : ImVec2;
+
+    Class Function FindViewportByPlatformHandle(platform_handle: Pointer)
+      : PImGuiViewport;
+
+    { Platform }
+    Class Procedure DestroyPlatformWindows(); {$IfDef INLINE} inline;{$EndIf}
+
+    { Events }
+    Class Procedure AddMouseViewportEvent(id: ImGuiID);
+    Class Procedure AddFocusEvent(focused: Boolean);
+
+    Class Procedure AddMouseSourceEvent(Source: ImGuiMouseSource);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure AddMousePosEvent(x: Single; y: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure AddMouseWheelEvent(wheel_x: Single; wheel_y: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure AddMouseButtonEvent(button: Int32; down: Boolean);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Procedure AddInputCharactersUTF8(Const str: String);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure AddKeyEvent(key: ImGuiKey; down: Boolean);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetKeyEventNativeData(key: ImGuiKey; native_keycode: Int32;
+      native_scancode: Int32; native_legacy_index: Int32);
+    {$IfDef INLINE} inline;{$EndIf}
+
+
+    { window Platform }
+    Class Procedure UpdatePlatformWindows(); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure RenderPlatformWindowsDefault(platform_render_arg: Pointer;
+      renderer_render_arg: Pointer); {$IfDef INLINE} inline;{$EndIf}
+
+    { Window }
+    class function Begin_(Name: String; p_open: PBoolean= nil; flags: ImGuiWindowFlags = ImGuiWindowFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure End_; {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginChild(str_id: String; size: ImVec2;
+      child_flags: ImGuiChildFlags; extra_flags: ImGuiWindowFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginChildEx(id: ImGuiID; size: ImVec2;
+      child_flags: ImGuiChildFlags; extra_flags: ImGuiWindowFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndChild; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetContentRegionMax(out_: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetContentRegionAvail: ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetContentRegionAvailWidth: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetWindowContentRegionMin(out_: PImVec2);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetWindowContentRegionMax(): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetWindowContentRegionWidth: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetWindowDrawList(): PImDrawList; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetWindowPos(out_: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetWindowSize(out_: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetWindowWidth(): Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetWindowHeight(): Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsWindowCollapsed(): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowFontScale(scale: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowPos(pos: ImVec2; cond: ImGuiCond; pivot: ImVec2);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowPos(pos: ImVec2; cond: ImGuiCond = ImGuiCond_None);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowPosCenter(cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowSize(size: ImVec2;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowSizeConstraints(size_min: ImVec2;
+      size_max: ImVec2; custom_callback: ImGuiSizeCallback;
+      custom_callback_data: pointer); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowContentSize(size: ImVec2);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowCollapsed(collapsed: Boolean;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextWindowFocus; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowPos(pos: ImVec2; cond: ImGuiCond = ImGuiCond_None);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowSize(size: ImVec2; cond: ImGuiCond = ImGuiCond_None);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowCollapsed(collapsed: Boolean;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowFocus; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowPosByName(Name: PChar; pos: ImVec2;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowSize2(Name: PChar; size: ImVec2;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowCollapsed2(Name: PChar; collapsed: Boolean;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetWindowFocus2(Name: PChar); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetScrollX: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetScrollY: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetScrollMaxX: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetScrollMaxY: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetScrollX(scroll_x: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetScrollY(scroll_y: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetScrollHere(center_y_ratio: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetScrollFromPosY(pos_y: Single; center_y_ratio: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetStateStorage(tree: PImGuiStorage); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetStateStorage(): PImGuiStorage; {$IfDef INLINE} inline;{$EndIf}
+
+
+    { Parameters stacks (shared) }
+    Class Procedure PushFont(font: PImFont); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopFont; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushStyleColor(idx: ImGuiCol; col: ImVec4);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopStyleColor(Count: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushStyleVar(idx: ImGuiStyleVar; val: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushStyleVarVec(idx: ImGuiStyleVar; val: ImVec2);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopStyleVar(Count: Longint = 1); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFont(): PImFont; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFontSize: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFontTexUvWhitePixel(): ImVec2;
+    Class Function GetColorU32(idx: ImGuiCol; alpha_mul: Single): ImU32;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetColorU32Vec(col: ImVec4): ImU32; {$IfDef INLINE} inline;{$EndIf}
+
+    { Parameters stacks (current window) }
+    Class Procedure PushItemWidth(item_width: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopItemWidth; {$IfDef INLINE} inline;{$EndIf}
+    Class Function CalcItemWidth: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushTextWrapPos(wrap_pos_x: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopTextWrapPos; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushTabStop(v: Boolean); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopTabStop; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushButtonRepeat(_repeat: Boolean); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopButtonRepeat; {$IfDef INLINE} inline;{$EndIf}
+
+    {Separator}
+    Class Procedure SeparatorText(label_: String); {$IfDef INLINE} inline;{$EndIf}
+
+    { Layout }
+    Class Procedure Separator; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SameLine(pos_x: Single = 0; spacing_w: Single = -1);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure NewLine; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Spacing; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Dummy(size: ImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Indent(indent_w: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Unindent(indent_w: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure BeginGroup; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndGroup; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCursorPos(): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCursorPosX: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCursorPosY: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetCursorPos(local_pos: ImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetCursorPosX(x: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetCursorPosY(y: Single); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCursorStartPos(): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetCursorScreenPos(): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetCursorScreenPos(pos: ImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure igAlignTextToFramePadding; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetTextLineHeight: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetTextLineHeightWithSpacing: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFrameHeight: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFrameHeightWithSpacing: Single; {$IfDef INLINE} inline;{$EndIf}
+
+    { Columns }
+    Class Procedure Columns(Count: Longint; id: PChar; border: Boolean);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure NextColumn; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetColumnIndex: Longint; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetColumnOffset(column_index: Longint): Single;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetColumnOffset(column_index: Longint; offset_x: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetColumnWidth(column_index: Longint): Single;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetColumnWidth(column_index: Longint; Width: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetColumnsCount: Longint; {$IfDef INLINE} inline;{$EndIf}
+
+    { ID scopes }
+    { If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them }
+    { You can also use "##extra" within your widget name to distinguish them from each others (see 'Programmer Guide') }
+    Class Procedure PushIdStr(str_id: PChar); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushIdStrRange(str_begin: PChar; str_end: PChar);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushIdPtr(ptr_id: pointer); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PushIdInt(int_id: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopId; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetIdStr(str_id: PChar): ImGuiID; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetIdStrRange(str_begin: PChar; str_end: PChar): ImGuiID;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetIdPtr(ptr_id: pointer): ImGuiID; {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Text }
+    Class Procedure Text(Const text_: String);{$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Text(Const Fmt: String; Const Args: Array Of Const);
+    {$IfDef INLINE} inline;{$EndIf}
+    //procedure igTextV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure TextColored(col: ImVec4; fmt: PChar; args: Array Of Const);
+    Class Procedure TextColored(col: ImVec4; Const fmt: String);
+    //procedure igTextColoredV(col:ImVec4; fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure TextDisabled(Const fmt: String; args: Array Of Const); {inline;}
+    Class Procedure TextDisabled(Const fmt: String); {$IfDef INLINE} inline;{$EndIf}
+    //procedure igTextDisabledV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure TextWrapped(Const fmt: String; args: Array Of Const); {inline;}
+    Class Procedure TextWrapped(Const fmt: String); {$IfDef INLINE} inline;{$EndIf}
+    //procedure igTextWrappedV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure TextUnformatted(Const _text: String);
+    Class Procedure TextUnformatted(Const _text: PChar; Const text_end: PChar = nil);
+    Class Procedure LabelText(_label: String; fmt: String);
+    Class Procedure LabelText(_label: String; fmt: PChar; args: Array Of Const);
+    //procedure igLabelTextV(_label:Pchar; fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure Bullet; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure BulletText(Const fmt: String; args: Array Of Const); {inline;}
+    Class Procedure BulletText(Const fmt: String); {$IfDef INLINE} inline;{$EndIf}
+    //procedure igBulletTextV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+
+    { Widgets: Main }
+    //Class Function Button(_label: String; size: ImVec2; flags: ImGuiButtonFlags): Boolean;
+    Class Function Button(_label: String; size: ImVec2): Boolean;
+    Class Function Button(_label: String): Boolean; //overload for default size (0,0)
+    Class Function SmallButton(_label: PChar): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InvisibleButton(str_id: PChar; size: ImVec2;
+      flags: ImGuiButtonFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure Image(user_texture_id: ImTextureID; size: ImVec2;
+      uv0: ImVec2; uv1: ImVec2; tint_col: ImVec4; border_col: ImVec4);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ImageButton(str_id: PChar; user_texture_id: ImTextureID;
+      size: ImVec2; uv0: ImVec2; uv1: ImVec2; bg_col: ImVec4;
+      tint_col: ImVec4): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function Checkbox(_label: PChar; v: PBoolean): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function CheckboxFlags(_label: PChar; flags: PUInt32;
+      flags_value: Int32): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function RadioButtonBool(_label: PChar; active: Boolean): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function RadioButton(_label: PChar; v: Plongint;
+      v_button: Longint): Boolean; {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function BeginCombo(Const _label, preview_value: String;
+      flags: ImGuiComboFlags = ImGuiComboFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndCombo;
+    Class Function Combo(_label: String; current_item: Plongint;
+      items: PPchar; items_count: Longint; height_in_items: Longint): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function Combo2(_label: String; current_item: Plongint;
+      items_separated_by_zeros: PChar; height_in_items: Longint): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+
+    Class Function ColorButton(desc_id: PChar; col: ImVec4;
+      flags: ImGuiColorEditFlags; size: ImVec2): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function ColorEdit3(_label: PChar; col: PSingle;
+      flags: ImGuiColorEditFlags = ImGuiColorEditFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ColorEdit4(_label: PChar; col: PSingle;
+      flags: ImGuiColorEditFlags = ImGuiColorEditFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ColorPicker3(_label: PChar; col: PSingle;
+      flags: ImGuiColorEditFlags = ImGuiColorEditFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ColorPicker4(_label: PChar; col: PSingle;
+      flags: ImGuiColorEditFlags; ref_col: PSingle): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetColorEditOptions(flags: ImGuiColorEditFlags);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Procedure PlotLines(_label: PChar; values: Psingle;
+      values_count: Longint; values_offset: Longint; overlay_text: PChar;
+      scale_min: Single; scale_max: Single; graph_size: ImVec2; stride: Longint);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    //TODO : func type
+    //procedure igPlotLines2(_label:Pchar; values_getter:function (data:pointer; idx:longint):single; data:pointer; values_count:longint; values_offset:longint;
+    //            overlay_text:Pchar; scale_min:single; scale_max:single; graph_size:ImVec2);cdecl;external ImguiLibName;
+    Class Procedure PlotHistogram(_label: PChar; values: Psingle;
+      values_count: Longint; values_offset: Longint; overlay_text: PChar;
+      scale_min: Single; scale_max: Single; graph_size: ImVec2; stride: Longint);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    //TODO : func type
+    //procedure igPlotHistogram2(_label:Pchar; values_getter:function (data:pointer; idx:longint):single; data:pointer; values_count:longint; values_offset:longint;
+    //            overlay_text:Pchar; scale_min:single; scale_max:single; graph_size:ImVec2);cdecl;external ImguiLibName;
+    Class Procedure ProgressBar(fraction: Single; size_arg: ImVec2; overlay: PChar);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Sliders (tip: ctrl+click on a slider to input text) }
+    Class Function SliderFloat(_label: PChar; v: Psingle; v_min: Single;
+      v_max: Single; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function SliderFloat2(_label: PChar; v: PSingle; v_min: Single;
+      v_max: Single; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function SliderFloat3(_label: PChar; v: PSingle; v_min: Single;
+      v_max: Single; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function SliderFloat4(_label: PChar; v: PSingle; v_min: Single;
+      v_max: Single; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function SliderAngle(_label: PChar; v_rad: Psingle;
+      v_degrees_min: Single = -360.0; v_degrees_max: Single = +360.0;
+      format: PChar = '%.0f deg';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean; Inline;
+    Class Function SliderInt(_label: PChar; v: Plongint; v_min: Longint;
+      v_max: Longint; display_format: PChar = '%d';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    class function SliderInt2(_label: PChar; v: PInteger; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function SliderInt3(_label: PChar; v: PInteger; v_min: Longint;
+      v_max: Longint; display_format: PChar = '%d';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function SliderInt4(_label: PChar; v: PInteger; v_min: Longint;
+      v_max: Longint; display_format: PChar = '%d';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function VSliderFloat(_label: PChar; size: ImVec2; v: Psingle;
+      v_min: Single; v_max: Single; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function VSliderInt(_label: PChar; size: ImVec2; v: Plongint;
+      v_min: Longint; v_max: Longint; display_format: PChar = '%d';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Drags (tip: ctrl+click on a drag box to input text) }
+    // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, remember than a 'float v[3]' function argument is the same as 'float* v'. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+    { If v_min >= v_max we have no bound }
+    Class Function DragFloat(_label: PChar; v: Psingle; v_speed: Single = 1.0;
+      v_min: Single = 0.0; v_max: Single = 0.0; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragFloat2(_label: PChar; v: PSingle; v_speed: Single = 1.0;
+      v_min: Single = 0.0; v_max: Single = 0.0; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragFloat3(_label: PChar; v: PSingle; v_speed: Single = 1.0;
+      v_min: Single = 0.0; v_max: Single = 0.0; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragFloat4(_label: PChar; v: PSingle; v_speed: Single = 1.0;
+      v_min: Single = 0.0; v_max: Single = 0.0; display_format: PChar = '%.3f';
+      flags: ImGuiSliderFlags = ImGuiSliderFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragFloatRange2(_label: PChar; v_current_min: Psingle;
+      v_current_max: Psingle; v_speed: Single; v_min: Single;
+      v_max: Single; display_format: PChar; display_format_max: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+
+    { If v_min >= v_max we have no bound }
+    Class Function DragInt(_label: PChar; v: Plongint; v_speed: Single;
+      v_min: Longint; v_max: Longint; display_format: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragInt2(_label: PChar; v: PInteger; v_speed: Single;
+      v_min: Longint; v_max: Longint; display_format: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragInt3(_label: PChar; v: PInteger; v_speed: Single;
+      v_min: Longint; v_max: Longint; display_format: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragInt4(_label: PChar; v: PInteger; v_speed: Single;
+      v_min: Longint; v_max: Longint; display_format: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function DragIntRange2(_label: PChar; v_current_min: Plongint;
+      v_current_max: Plongint; v_speed: Single; v_min: Longint;
+      v_max: Longint; display_format: PChar; display_format_max: PChar;
+      flags: ImGuiSliderFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Input with Keyboard }
+    Class Function InputText(_label: PChar; buf: PChar; buf_size: size_t;
+      flags: ImGuiInputTextFlags = ImGuiInputTextFlags_None;
+      callback: ImGuiInputTextCallback = nil; user_data: pointer = nil): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputTextMultiline(_label: PChar; buf: PChar;
+      buf_size: size_t; size: ImVec2;
+      flags: ImGuiInputTextFlags = ImGuiInputTextFlags_None;
+      callback: ImGuiInputTextCallback = nil; user_data: pointer = nil): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputFloat(_label: PChar; v: Psingle; step: Single;
+      step_fast: Single; format: PChar; extra_flags: ImGuiInputTextFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputFloat2(_label: PChar; v: PSingle; format: PChar;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputFloat3(_label: PChar; v: PSingle; format: PChar;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputFloat4(_label: PChar; v: PSingle; format: PChar;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputInt(_label: PChar; v: Plongint; step: Longint;
+      step_fast: Longint; extra_flags: ImGuiInputTextFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputInt2(_label: PChar; v: PInteger;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputInt3(_label: PChar; v: PInteger;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function InputInt4(_label: PChar; v: PInteger;
+      extra_flags: ImGuiInputTextFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Trees }
+    Class Function TreeNode(_label: String): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function TreeNode(str_id: String; fmt: String;
+      args: Array Of Const): Boolean; {inline;}
+    Class Function TreeNode(str_id: String; fmt: String): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function TreeNode(ptr_id: pointer; fmt: String;
+      args: Array Of Const): Boolean; {inline;}
+    Class Function TreeNode(ptr_id: pointer; fmt: String): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function TreeNodeEx(_label: PChar; flags: ImGuiTreeNodeFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags;
+      fmt: String; args: Array Of Const): Boolean; {inline;}
+    Class Function TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags;
+      fmt: String): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags;
+      fmt: String; args: Array Of Const): Boolean; {inline;}
+    Class Function TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags;
+      fmt: String): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    //todo : vargs
+    //    function  igTreeNodeExV(str_id:Pchar; flags:ImGuiTreeNodeFlags; fmt:Pchar; args:va_list):bool;cdecl;external ImguiLibName;
+    //todo : vargs
+    //    function  igTreeNodeExVPtr(ptr_id:pointer; flags:ImGuiTreeNodeFlags; fmt:Pchar; args:va_list):bool;cdecl;external ImguiLibName;
+    Class Procedure TreePushStr(str_id: PChar); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure TreePushPtr(ptr_id: pointer); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure TreePop; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetTreeNodeToLabelSpacing: Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextTreeNodeOpen(opened: Boolean;
+      cond: ImGuiCond = ImGuiCond_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Function CollapsingHeader(_label: PChar;
+      flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function CollapsingHeader(_label: PChar; p_open: PBoolean;
+      flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Selectable / Lists }
+    Class Function Selectable(_label: String; selected: Boolean;
+      flags: ImGuiSelectableFlags; size: ImVec2): Boolean;
+    Class Function Selectable(_label: String; selected: Boolean;
+      flags: ImGuiSelectableFlags = ImGuiSelectableFlags_None): Boolean;
+    //overload for default size (0,0)
+    Class Function SelectableEx(_label: PChar; p_selected: PBoolean;
+      flags: ImGuiSelectableFlags; size: ImVec2): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ListBox(_label: PChar; current_item: Plongint;
+      items: PPchar; items_count: Longint; height_in_items: Longint): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function BeginListBox(_label: PChar; size: ImVec2): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndListBox; {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare your own within the ImGui namespace!) }
+    Class Procedure ValueBool(prefix: PChar; b: Boolean); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ValueInt(prefix: PChar; v: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ValueUInt(prefix: PChar; v: dword); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ValueFloat(prefix: PChar; v: Single; float_format: PChar);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Tooltip }
+    Class Procedure SetTooltip(fmt: String; args: Array Of Const); {inline}
+    Class Procedure SetTooltip(fmt: String); {$IfDef INLINE} inline;{$EndIf}
+    //todo : vargs
+    //    procedure igSetTooltipV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
+    Class Procedure BeginTooltip; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndTooltip; {$IfDef INLINE} inline;{$EndIf}
+
+    { Widgets: Menus }
+    Class Function BeginMainMenuBar(): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndMainMenuBar(); {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginMenuBar(): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndMenuBar(); {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginMenu(_label: PChar; Enabled: Boolean = True): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndMenu; {$IfDef INLINE} inline;{$EndIf}
+    Class Function MenuItem(_label: PChar; shortcut: PChar = nil;
+      selected: Boolean = False; Enabled: Boolean = True): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function MenuItem(_label: PChar; shortcut: PChar;
+      p_selected: PBoolean; Enabled: Boolean = True): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Popup }
+    Class Procedure OpenPopup(str_id: PChar;
+      flags: ImGuiPopupFlags = ImGuiPopupFlags_None); {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginPopup(str_id: PChar;
+      flags: ImGuiWindowFlags = ImGuiWindowFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginPopupModal(Name: PChar; p_open: PBoolean = nil;
+      extra_flags: ImGuiWindowFlags = ImGuiWindowFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginPopupContextItem(str_id: PChar = nil;
+      mouse_button: ImGuiPopupFlags = ImGuiPopupFlags_MouseButtonRight): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginPopupContextWindow(str_id: PChar = nil;
+      mouse_button: ImGuiPopupFlags = ImGuiPopupFlags_MouseButtonRight): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function BeginPopupContextVoid(str_id: PChar = nil;
+      mouse_button: ImGuiPopupFlags = ImGuiPopupFlags_MouseButtonRight): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndPopup; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsPopupOpen(str_id: PChar;
+      flags: ImGuiPopupFlags = ImGuiPopupFlags_None): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure CloseCurrentPopup; {$IfDef INLINE} inline;{$EndIf}
+
+    { Logging: all text output from interface is redirected to tty/file/clipboard. Tree nodes are automatically opened. }
+    Class Procedure LogToTTY(max_depth: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure LogToFile(max_depth: Longint; filename: PChar);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure LogToClipboard(max_depth: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure LogFinish; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure LogButtons; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure LogText(Const fmt: String; args: Array Of Const);
+    Class Procedure LogText(Const fmt: String);
+
+    { Drag and Drop }
+
+    { Clipping }
+    Class Procedure PushClipRect(clip_rect_min: ImVec2; clip_rect_max: ImVec2;
+      intersect_with_current_clip_rect: Boolean); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure PopClipRect; {$IfDef INLINE} inline;{$EndIf}
+
+    { Styles }
+    Class Procedure StyleColorsClassic(dst: PImGuiStyle); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure StyleColorsDark(dst: PImGuiStyle); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure StyleColorsLight(dst: PImGuiStyle); {$IfDef INLINE} inline;{$EndIf}
+
+    { Focus }
+    Class Procedure SetItemDefaultFocus(); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetKeyboardFocusHere(offset: Integer = 0);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Utilities }
+    Class Function IsItemHovered(flags: ImGuiHoveredFlags = ImGuiHoveredFlags_None):
+      Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsItemActive: Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsItemClicked(mouse_button: ImGuiMouseButton =
+      ImGuiMouseButton_Left): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsItemVisible: Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsAnyItemHovered: Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsAnyItemActive: Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetItemRectMin(pOut: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetItemRectMax(pOut: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure GetItemRectSize(pOut: PImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextItemAllowOverlap; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsWindowFocused(flags: ImGuiFocusedFlags): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsWindowHovered(flags: ImGuiHoveredFlags =
+      ImGuiHoveredFlags_None): Boolean; {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function IsRectVisible(Const item_size: ImVec2): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsRectVisible(Const rect_min, rect_max: ImVec2): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function GetTime(): Single; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetFrameCount(): Longint; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetStyleColorName(idx: ImGuiCol): PChar;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function CalcTextSize(_text: PChar; text_end: PChar = nil;
+      hide_text_after_double_hash: Boolean = False;
+      wrap_width: Single = -1): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function BeginChildFrame(id: ImGuiID; size: ImVec2;
+      extra_flags: ImGuiWindowFlags): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure EndChildFrame; {$IfDef INLINE} inline;{$EndIf}
+
+    Class Procedure ColorConvertU32ToFloat4(pOut: PImVec4; in_: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function ColorConvertFloat4ToU32(in_: ImVec4): ImU32;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ColorConvertRGBtoHSV(r: Single; g: Single; b: Single;
+      out_h: Psingle; out_s: Psingle; out_v: Psingle); {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ColorConvertHSVtoRGB(h: Single; s: Single; v: Single;
+      out_r: Psingle; out_g: Psingle; out_b: Psingle); {$IfDef INLINE} inline;{$EndIf}
+
+    Class Function GetKeyIndex(key: ImGuiKey): ImGuiKey; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsKeyDown(user_key_index: ImGuiKey): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsKeyPressed(user_key_index: ImGuiKey; _repeat: Boolean): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsKeyReleased(user_key_index: ImGuiKey): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseDown(_button: ImGuiMouseButton): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseClicked(_button: ImGuiMouseButton;
+      _repeat: Boolean): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseDoubleClicked(_button: ImGuiMouseButton): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseReleased(_button: ImGuiMouseButton): Boolean;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseHoveringRect(r_min: ImVec2; r_max: ImVec2;
+      clip: Boolean = True): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function IsMouseDragging(_button: ImGuiMouseButton;
+      lock_threshold: Single): Boolean; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetMousePos: ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetMousePosOnOpeningCurrentPopup: ImVec2;
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetMouseDragDelta(_button: ImGuiMouseButton;
+      lock_threshold: Single = -1.0): ImVec2; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure ResetMouseDragDelta(_button: ImGuiMouseButton);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetMouseCursor: ImGuiMouseCursor; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetMouseCursor(_type: ImGuiMouseCursor);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextFrameWantCaptureKeyboard(capture: Boolean = True);
+    {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetNextFrameWantCaptureMouse(capture: Boolean = True);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Helpers functions to access functions pointers in ImGui::GetIO() }
+    Class Function MemAlloc(sz: size_t): pointer; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure MemFree(ptr: pointer); {$IfDef INLINE} inline;{$EndIf}
+    Class Function GetClipboardText: PChar; {$IfDef INLINE} inline;{$EndIf}
+    Class Procedure SetClipboardText(_text: PChar); {$IfDef INLINE} inline;{$EndIf}
+
+    { Internal state access - if you want to share ImGui state between modules (e.g. DLL) or allocate it yourself }
+    Class Function GetVersion(): PChar; {$IfDef INLINE} inline;{$EndIf}
+  End;
+
+
+  { TImFontAtlasHelper }
+
+  TImFontAtlasHelper = Record helper For ImFontAtlas
+    Procedure GetTexDataAsAlpha8(out_pixels: PPImU8; out_width: PInt32;
+      out_height: PInt32; out_bytes_per_pixel: PInt32);
+    Procedure SetTexID(id: ImTextureID); Cdecl;
+  End;
+
+
+  { TImDrawListHelper }
+
+  TImDrawListHelper = Record helper For ImDrawList
+    Procedure PushClipRect(clip_rect_min: ImVec2; clip_rect_max: ImVec2;
+      intersect_with_current_clip_rect: Boolean); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PushClipRectFullScreen(); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PopClipRect(); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PushTextureID(texture_id: ImTextureID); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PopTextureID(); {$IfDef INLINE} inline;{$EndIf}
+
+    { Primitives }
+    procedure AddLine(p1: ImVec2; p2: ImVec2; col: ImU32; thickness: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddRect(a: ImVec2; b: ImVec2; col: ImU32; rounding: Single = 0;
+      rounding_corners_flags: ImDrawFlags = ImDrawFlags_Closed;
+      thickness: Single = 1); {$IfDef INLINE} inline;{$EndIf}
+
+    Procedure AddRectFilled(p_min: ImVec2; p_max: ImVec2; col: ImU32;
+      rounding: Single = 0; flags: ImDrawFlags = ImDrawFlags_Closed);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    Procedure AddRectFilledMultiColor(a: ImVec2; b: ImVec2; col_upr_left: ImU32;
+      col_upr_right: ImU32; col_bot_right: ImU32; col_bot_left: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddQuad(a: ImVec2; b: ImVec2; c: ImVec2; d: ImVec2;
+      col: ImU32; thickness: Single); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddQuadFilled(a: ImVec2; b: ImVec2; c: ImVec2; d: ImVec2; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddTriangle(a: ImVec2; b: ImVec2; c: ImVec2; col: ImU32;
+      thickness: Single); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddTriangleFilled(a: ImVec2; b: ImVec2; c: ImVec2; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddCircle(centre: ImVec2; radius: Single; col: ImU32;
+      num_segments: Longint; thickness: Single); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddCircleFilled(centre: ImVec2; radius: Single; col: ImU32;
+      num_segments: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddText(pos: ImVec2; col: ImU32; text_begin: PChar; text_end: PChar);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddTextExt(font: ImFont; font_size: Single; pos: ImVec2;
+      col: ImU32; text_begin: PChar; text_end: PChar; wrap_width: Single;
+      cpu_fine_clip_rect: ImVec4); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddImage(user_texture_id: ImTextureID; a: ImVec2;
+      b: ImVec2; uva: ImVec2; uvb: ImVec2; col: ImU32); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddImageQuad(user_texture_id: ImTextureID; Const a, b, c, d: ImVec2;
+      Const uva, uvb, uvc, uvd: ImVec2; col: ImU32); {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddPolyline(points: PImVec2; num_points: Integer; col: ImU32;
+      flags: ImDrawFlags; thickness: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddConvexPolyFilled(points: PImVec2; num_points: Integer; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure AddBezierCubic(p1: ImVec2; p2: ImVec2; p3: ImVec2;
+      p4: ImVec2; col: ImU32; thickness: Single; num_segments: Integer);
+    {$IfDef INLINE} inline;{$EndIf}
+
+    { Stateful path API, add points then finish with PathFill() or PathStroke() }
+    Procedure PathClear(); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathLineTo(pos: ImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathLineToMergeDuplicate(pos: ImVec2); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathFillConvex(col: ImU32); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathStroke(col: ImU32; flags: ImDrawFlags; thickness: Single);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathArcTo(centre: ImVec2; radius: Single; a_min: Single;
+      a_max: Single; num_segments: Longint); {$IfDef INLINE} inline;{$EndIf}
+    { Use precomputed angles for a 12 steps circle }
+    Procedure PathArcToFast(centre: ImVec2; radius: Single;
+      a_min_of_12: Longint; a_max_of_12: Longint); {$IfDef INLINE} inline;{$EndIf}
+    //procedure PathBezierCurveTo(p1: ImVec2; p2: ImVec2; p3: ImVec2; num_segments: longint);  {$IfDef INLINE} inline;{$EndIf}
+    Procedure PathRect(rect_min: ImVec2; rect_max: ImVec2; rounding: Single;
+      rounding_corners_flags: ImDrawFlags); {$IfDef INLINE} inline;{$EndIf}
+
+    { Channels }
+    Procedure ChannelsSplit(channels_count: Longint); {$IfDef INLINE} inline;{$EndIf}
+    Procedure ChannelsMerge(); {$IfDef INLINE} inline;{$EndIf}
+    Procedure ChannelsSetCurrent(channel_index: Longint); {$IfDef INLINE} inline;{$EndIf}
+
+    { Advanced }
+    { Your rendering function must check for 'UserCallback' label_ ImDrawCmd and call the function instead of rendering triangles. }
+    Procedure AddCallback(callback: ImDrawCallback; callback_data: pointer);
+    {$IfDef INLINE} inline;{$EndIf}
+    { This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible }
+    Procedure AddDrawCmd(); {$IfDef INLINE} inline;{$EndIf}
+
+    { Internal helpers }
+    { NB: all primitives needs to be reserved via PrimReserve() beforehand! }
+    Procedure PrimReserve(idx_count: Longint; vtx_count: Longint);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimRect(a: ImVec2; b: ImVec2; col: ImU32); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimRectUV(a: ImVec2; b: ImVec2; uv_a: ImVec2; uv_b: ImVec2;
+      col: ImU32); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimQuadUV(a: ImVec2; b: ImVec2; c: ImVec2; d: ImVec2;
+      uv_a: ImVec2; uv_b: ImVec2; uv_c: ImVec2; uv_d: ImVec2; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimWriteVtx(pos: ImVec2; uv: ImVec2; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimWriteIdx(idx: ImDrawIdx); {$IfDef INLINE} inline;{$EndIf}
+    Procedure PrimVtx(pos: ImVec2; uv: ImVec2; col: ImU32);
+    {$IfDef INLINE} inline;{$EndIf}
+  End;
+
+{ ImGuiPlatformMonitor }
+Function ImGuiPlatformMonitor_Create(): PImGuiPlatformMonitor;
+
+Implementation
+
+Function ImGuiPlatformMonitor_Create(): PImGuiPlatformMonitor;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := ImGuiPlatformMonitor_ImGuiPlatformMonitor();
+  ResetFpuFlags(saved);
+End;
+
+
+//Replacement for (void*)(intptr_t) int cast, used for IDs. Generates warnings
+Function ImIDPtr(Const i: Integer): pointer;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := pointer(IntPtr(i));
+  ResetFpuFlags(saved);
+End;
+
+Function ImColorCreate(Const color: ImVec4): ImU32;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := ImGui.ColorConvertFloat4ToU32(color);
+  ResetFpuFlags(saved);
+End;
+
+
+{ ImGui
+  Keep functions short, they're mostly just wrappers. Inlining begin/end with trivial function body is ok
+}
+
+class function ImGui.CreateContext(shared_font_atlas: PImFontAtlas): PImGuiContext;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCreateContext(shared_font_atlas);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.DestroyContext(ctx: PImGuiContext);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igDestroyContext(ctx);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetIO: PImGuiIO;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetIO;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetPlatformIO: PImGuiPlatformIO;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetPlatformIO();
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetStyle: PImGuiStyle;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetStyle;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetDrawData: PImDrawData;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetDrawData;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.NewFrame;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igNewFrame;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Render;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igRender;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ShowUserGuide;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igShowUserGuide;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ShowStyleEditor(ref: PImGuiStyle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igShowStyleEditor(ref);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ShowDemoWindow(p_open: PBoolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igShowDemoWindow(p_open);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ShowMetricsWindow(p_open: PBoolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igShowMetricsWindow(p_open);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetMainViewport: PImGuiViewport;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetMainViewport();
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCurrentContext: PImGuiContext;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetCurrentContext();
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetDragDropPayload: PImGuiPayload;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetDragDropPayload();
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCenterViewPort(ViewPort: PImGuiViewport): ImVec2;
+begin
+  ImGuiViewport_GetCenter(@Result, ViewPort);
+end;
+
+class function ImGui.FindViewportByPlatformHandle(platform_handle: Pointer): PImGuiViewport;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igFindViewportByPlatformHandle(platform_handle);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.DestroyPlatformWindows;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igDestroyPlatformWindows();
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddMouseViewportEvent(id: ImGuiID);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddMouseViewportEvent(GetIO(), id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddFocusEvent(focused: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddFocusEvent(GetIO(), focused);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddMouseSourceEvent(Source: ImGuiMouseSource);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddMouseSourceEvent(GetIO(), Source);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddMousePosEvent(x: Single; y: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddMousePosEvent(GetIO(), x, y);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddMouseWheelEvent(wheel_x: Single; wheel_y: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddMouseWheelEvent(GetIO(), wheel_x, wheel_y);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddMouseButtonEvent(button: Int32; down: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddMouseButtonEvent(GetIO(), button, down);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddInputCharactersUTF8(const str: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddInputCharactersUTF8(GetIO(), PChar(str));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.AddKeyEvent(key: ImGuiKey; down: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_AddKeyEvent(GetIO(), key, down);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetKeyEventNativeData(key: ImGuiKey; native_keycode: Int32; native_scancode: Int32; native_legacy_index: Int32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImGuiIO_SetKeyEventNativeData(GetIO(), key, native_keycode,
+    native_scancode, native_legacy_index);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.UpdatePlatformWindows;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igUpdatePlatformWindows();
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.RenderPlatformWindowsDefault(platform_render_arg: Pointer; renderer_render_arg: Pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igRenderPlatformWindowsDefault(platform_render_arg, renderer_render_arg);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Begin_(Name: String; p_open: PBoolean; flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBegin(PChar(Name), p_open, flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.End_;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEnd;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginChild(str_id: String; size: ImVec2; child_flags: ImGuiChildFlags; extra_flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginChild_Str(PChar(str_id), size, child_flags, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginChildEx(id: ImGuiID; size: ImVec2; child_flags: ImGuiChildFlags; extra_flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginChild_ID(id, size, child_flags, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndChild;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndChild;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetContentRegionMax(out_: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetContentRegionMax(out_);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetContentRegionAvail: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetContentRegionAvail(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetContentRegionAvailWidth: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := GetContentRegionAvail().x;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetWindowContentRegionMin(out_: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetWindowContentRegionMin(out_);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetWindowContentRegionMax: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetWindowContentRegionMax(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetWindowContentRegionWidth: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := GetWindowContentRegionMax().x;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetWindowDrawList: PImDrawList;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetWindowDrawList;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetWindowPos(out_: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetWindowPos(out_);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetWindowSize(out_: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetWindowSize(out_);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetWindowWidth: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetWindowWidth;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetWindowHeight: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetWindowHeight;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsWindowCollapsed: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsWindowCollapsed;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowFontScale(scale: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowFontScale(scale);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowPos(pos: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowPos(pos, cond, ImVec2.New(0, 0));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowPos(pos: ImVec2; cond: ImGuiCond; pivot: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowPos(pos, cond, pivot);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowPosCenter(cond: ImGuiCond);
+Begin
+  {
+  - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because
+    SetNextWindowPos() now has the optional pivot information to do
+    the same and more. Kept redirection function (will obsolete).
+  }
+
+  igSetNextWindowPos(GetCenterViewPort(GetMainViewport()),cond,ImVec2.New(0.5,0.5));
+End;
+
+class procedure ImGui.SetNextWindowSize(size: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowSize(size, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowSizeConstraints(size_min: ImVec2; size_max: ImVec2; custom_callback: ImGuiSizeCallback; custom_callback_data: pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowSizeConstraints(size_min, size_max, custom_callback,
+    custom_callback_data);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowContentSize(size: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowContentSize(size);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowCollapsed(collapsed: Boolean; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowCollapsed(collapsed, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextWindowFocus;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextWindowFocus;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowPos(pos: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowPos_Vec2(pos, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowSize(size: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowSize_Vec2(size, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowCollapsed(collapsed: Boolean; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowCollapsed_Bool(collapsed, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowFocus;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowFocus_Nil();
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowPosByName(Name: PChar; pos: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowPos_Str(Name, pos, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowSize2(Name: PChar; size: ImVec2; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowSize_Str(Name, size, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowCollapsed2(Name: PChar; collapsed: Boolean; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowCollapsed_Str(Name, collapsed, cond);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetWindowFocus2(Name: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetWindowFocus_Str(Name);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetScrollX: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetScrollX;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetScrollY: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetScrollY;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetScrollMaxX: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetScrollMaxX;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetScrollMaxY: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetScrollMaxY;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetScrollX(scroll_x: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetScrollX_Float(scroll_x);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetScrollY(scroll_y: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetScrollY_Float(scroll_y);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetScrollHere(center_y_ratio: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetScrollHereY(center_y_ratio);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetScrollFromPosY(pos_y: Single; center_y_ratio: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetScrollFromPosY_Float(pos_y, center_y_ratio);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetStateStorage(tree: PImGuiStorage);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetStateStorage(tree);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetStateStorage: PImGuiStorage;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetStateStorage;
+  ResetFpuFlags(saved);
+End;
+
+
+
+{ Parameters stacks (shared) }
+class procedure ImGui.PushFont(font: PImFont);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushFont(font);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopFont;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopFont;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushStyleColor(idx: ImGuiCol; col: ImVec4);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushStyleColor_Vec4(idx, col);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopStyleColor(Count: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopStyleColor(Count);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushStyleVar(idx: ImGuiStyleVar; val: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushStyleVar_Float(idx, val);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushStyleVarVec(idx: ImGuiStyleVar; val: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushStyleVar_Vec2(idx, val);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopStyleVar(Count: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopStyleVar(Count);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFont: PImFont;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetFont;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFontSize: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetFontSize;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFontTexUvWhitePixel: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetFontTexUvWhitePixel(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColorU32(idx: ImGuiCol; alpha_mul: Single): ImU32;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColorU32_Col(idx, alpha_mul);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColorU32Vec(col: ImVec4): ImU32;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColorU32_Vec4(col);
+  ResetFpuFlags(saved);
+End;
+
+{ Parameters stacks (current window) }
+class procedure ImGui.PushItemWidth(item_width: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushItemWidth(item_width);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopItemWidth;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopItemWidth;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.CalcItemWidth: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCalcItemWidth;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushTextWrapPos(wrap_pos_x: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushTextWrapPos(wrap_pos_x);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopTextWrapPos;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopTextWrapPos;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushTabStop(v: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushTabStop(v);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopTabStop;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopTabStop;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushButtonRepeat(_repeat: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushButtonRepeat(_repeat);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopButtonRepeat;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopButtonRepeat;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SeparatorText(label_: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSeparatorText(PChar(label_));
+  ResetFpuFlags(saved);
+End;
+
+{ Layout }
+class procedure ImGui.Separator;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSeparator;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SameLine(pos_x: Single; spacing_w: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSameLine(pos_x, spacing_w);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.NewLine;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igNewLine;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Spacing;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSpacing;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Dummy(size: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igDummy(size);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Indent(indent_w: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igIndent(indent_w);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Unindent(indent_w: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igUnindent(indent_w);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.BeginGroup;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igBeginGroup;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndGroup;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndGroup;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCursorPos: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetCursorPos(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCursorPosX: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetCursorPosX;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCursorPosY: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetCursorPosY;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetCursorPos(local_pos: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetCursorPos(local_pos);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetCursorPosX(x: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetCursorPosX(x);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetCursorPosY(y: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetCursorPosY(y);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCursorStartPos: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetCursorStartPos(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetCursorScreenPos: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetCursorScreenPos(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetCursorScreenPos(pos: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetCursorScreenPos(pos);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.igAlignTextToFramePadding;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igAlignTextToFramePadding;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetTextLineHeight: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetTextLineHeight;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetTextLineHeightWithSpacing: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetTextLineHeightWithSpacing;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFrameHeight: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetFrameHeight;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFrameHeightWithSpacing: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetFrameHeightWithSpacing;
+  ResetFpuFlags(saved);
+End;
+
+{ Columns }
+class procedure ImGui.Columns(Count: Longint; id: PChar; border: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igColumns(Count, id, border);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.NextColumn;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igNextColumn;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColumnIndex: Longint;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColumnIndex;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColumnOffset(column_index: Longint): Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColumnOffset(column_index);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetColumnOffset(column_index: Longint; offset_x: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetColumnOffset(column_index, offset_x);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColumnWidth(column_index: Longint): Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColumnWidth(column_index);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetColumnWidth(column_index: Longint; Width: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetColumnWidth(column_index, Width);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetColumnsCount: Longint;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetColumnsCount;
+  ResetFpuFlags(saved);
+End;
+
+{ ID scopes }
+{ If you are creating widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them }
+{ You can also use "##extra" within your widget name to distinguish them from each others (see 'Programmer Guide') }
+class procedure ImGui.PushIdStr(str_id: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushID_Str(str_id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushIdStrRange(str_begin: PChar; str_end: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushID_StrStr(str_begin, str_end);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushIdPtr(ptr_id: pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushID_Ptr(ptr_id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PushIdInt(int_id: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushID_Int(int_id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopId;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopId;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetIdStr(str_id: PChar): ImGuiID;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetID_Str(str_id);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetIdStrRange(str_begin: PChar; str_end: PChar): ImGuiID;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetID_StrStr(str_begin, str_end);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetIdPtr(ptr_id: pointer): ImGuiID;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetID_Ptr(ptr_id);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Text }
+class procedure ImGui.Text(const text_: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igText(PChar(text_), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Text(const Fmt: String; const Args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Text(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextColored(col: ImVec4; fmt: PChar; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  TextColored(col, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextColored(col: ImVec4; const fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTextColored(col, PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextDisabled(const fmt: String; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  TextDisabled(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextDisabled(const fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTextDisabled(PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextWrapped(const fmt: String; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  TextWrapped(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextWrapped(const fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTextWrapped(PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextUnformatted(const _text: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTextUnformatted(PChar(_text), nil);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TextUnformatted(const _text: PChar;
+  const text_end: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTextUnformatted(_text, text_end);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LabelText(_label: String; fmt: PChar; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  LabelText(_label, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LabelText(_label: String; fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLabelText(PChar(_label), PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Bullet;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igBullet;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.BulletText(const fmt: String; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  BulletText(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.BulletText(const fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igBulletText(PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Main }
+class function ImGui.Button(_label: String; size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igButton(PChar(_label), size);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Button(_label: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := Button(_label, ImVec2.New(0, 0));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SmallButton(_label: PChar): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSmallButton(_label);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InvisibleButton(str_id: PChar; size: ImVec2; flags: ImGuiButtonFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInvisibleButton(str_id, size, flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.Image(user_texture_id: ImTextureID; size: ImVec2; uv0: ImVec2; uv1: ImVec2; tint_col: ImVec4; border_col: ImVec4);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igImage(user_texture_id, size, uv0, uv1, tint_col, border_col);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ImageButton(str_id: PChar; user_texture_id: ImTextureID; size: ImVec2; uv0: ImVec2; uv1: ImVec2; bg_col: ImVec4; tint_col: ImVec4): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igImageButton(str_id, user_texture_id, size, uv0, uv1, bg_col, tint_col);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Checkbox(_label: PChar; v: PBoolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCheckbox(_label, v);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.CheckboxFlags(_label: PChar; flags: PUInt32; flags_value: Int32): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  { TODO: Do we need to implement other igCheckboxFlags funcs - Time : 11/3/2023 11:46:25 PM }
+  Result := igCheckboxFlags_UintPtr(_label, flags, flags_value);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.RadioButtonBool(_label: PChar; active: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igRadioButton_Bool(_label, active);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.RadioButton(_label: PChar; v: Plongint; v_button: Longint): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igRadioButton_IntPtr(_label, v, v_button);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PlotLines(_label: PChar; values: Psingle; values_count: Longint; values_offset: Longint; overlay_text: PChar; scale_min: Single; scale_max: Single; graph_size: ImVec2; stride: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPlotLines_FloatPtr(_label, values, values_count, values_offset, overlay_text,
+    scale_min, scale_max, graph_size, stride);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PlotHistogram(_label: PChar; values: Psingle; values_count: Longint; values_offset: Longint; overlay_text: PChar; scale_min: Single; scale_max: Single; graph_size: ImVec2; stride: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPlotHistogram_FloatPtr(_label, values, values_count, values_offset, overlay_text,
+    scale_min, scale_max, graph_size, stride);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ProgressBar(fraction: Single; size_arg: ImVec2; overlay: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igProgressBar(fraction, size_arg, overlay);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginCombo(
+  const _label, preview_value: String; flags: ImGuiComboFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginCombo(PChar(_label), PChar(preview_value), flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndCombo;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndCombo;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Combo(_label: String; current_item: Plongint; items: PPchar; items_count: Longint; height_in_items: Longint): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCombo_Str_arr(PChar(_label), current_item, items,
+    items_count, height_in_items);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Combo2(_label: String; current_item: Plongint; items_separated_by_zeros: PChar; height_in_items: Longint): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCombo_Str(PChar(_label), current_item, items_separated_by_zeros,
+    height_in_items);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorButton(desc_id: PChar; col: ImVec4; flags: ImGuiColorEditFlags; size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorButton(desc_id, col, flags, size);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorEdit3(_label: PChar; col: PSingle; flags: ImGuiColorEditFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorEdit3(_label, col, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorEdit4(_label: PChar; col: PSingle; flags: ImGuiColorEditFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorEdit4(_label, col, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorPicker3(_label: PChar; col: PSingle; flags: ImGuiColorEditFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorPicker3(_label, col, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorPicker4(_label: PChar; col: PSingle; flags: ImGuiColorEditFlags; ref_col: PSingle): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorPicker4(_label, col, flags, ref_col);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetColorEditOptions(flags: ImGuiColorEditFlags);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetColorEditOptions(flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Sliders (tip: ctrl+click on a slider to input text) }
+class function ImGui.SliderFloat(_label: PChar; v: Psingle; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderFloat(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderFloat2(_label: PChar; v: PSingle; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderFloat2(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderFloat3(_label: PChar; v: PSingle; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderFloat3(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderFloat4(_label: PChar; v: PSingle; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderFloat4(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderAngle(_label: PChar; v_rad: Psingle; v_degrees_min: Single; v_degrees_max: Single; format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderAngle(_label, v_rad, v_degrees_min, v_degrees_max, format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderInt(_label: PChar; v: Plongint; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderInt(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderInt2(_label: PChar; v: PInteger; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderInt2(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderInt3(_label: PChar; v: PInteger; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderInt3(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SliderInt4(_label: PChar; v: PInteger; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSliderInt4(_label, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.VSliderFloat(_label: PChar; size: ImVec2; v: Psingle; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igVSliderFloat(_label, size, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.VSliderInt(_label: PChar; size: ImVec2; v: Plongint; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igVSliderInt(_label, size, v, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Drags (tip: ctrl+click on a drag box to input text) }
+// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, remember than a 'float v[3]' function argument is the same as 'float* v'. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+{ If v_max >= v_max we have no bound }
+class function ImGui.DragFloat(_label: PChar; v: Psingle; v_speed: Single; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragFloat(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragFloat2(_label: PChar; v: PSingle; v_speed: Single; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragFloat2(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragFloat3(_label: PChar; v: PSingle; v_speed: Single; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragFloat3(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragFloat4(_label: PChar; v: PSingle; v_speed: Single; v_min: Single; v_max: Single; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragFloat4(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragFloatRange2(_label: PChar; v_current_min: Psingle; v_current_max: Psingle; v_speed: Single; v_min: Single; v_max: Single; display_format: PChar; display_format_max: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragFloatRange2(_label, v_current_min, v_current_max,
+    v_speed, v_min, v_max, display_format, display_format_max, flags);
+  ResetFpuFlags(saved);
+End;
+{ If v_max >= v_max we have no bound }
+class function ImGui.DragInt(_label: PChar; v: Plongint; v_speed: Single; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragInt(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragInt2(_label: PChar; v: PInteger; v_speed: Single; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragInt2(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragInt3(_label: PChar; v: PInteger; v_speed: Single; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragInt3(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragInt4(_label: PChar; v: PInteger; v_speed: Single; v_min: Longint; v_max: Longint; display_format: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragInt4(_label, v, v_speed, v_min, v_max, display_format, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.DragIntRange2(_label: PChar; v_current_min: Plongint; v_current_max: Plongint; v_speed: Single; v_min: Longint; v_max: Longint; display_format: PChar; display_format_max: PChar; flags: ImGuiSliderFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igDragIntRange2(_label, v_current_min, v_current_max,
+    v_speed, v_min, v_max, display_format, display_format_max, flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Input }
+class function ImGui.InputText(_label: PChar; buf: PChar; buf_size: size_t; flags: ImGuiInputTextFlags; callback: ImGuiInputTextCallback; user_data: pointer): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputText(_label, buf, buf_size, flags, callback, user_data);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputTextMultiline(_label: PChar; buf: PChar; buf_size: size_t; size: ImVec2; flags: ImGuiInputTextFlags; callback: ImGuiInputTextCallback; user_data: pointer): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputTextMultiline(_label, buf, buf_size, size, flags,
+    callback, user_data);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputFloat(_label: PChar; v: Psingle; step: Single; step_fast: Single; format: PChar; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputFloat(_label, v, step, step_fast, format, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputFloat2(_label: PChar; v: PSingle; format: PChar; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputFloat2(_label, v, format, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputFloat3(_label: PChar; v: PSingle; format: PChar; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputFloat3(_label, v, format, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputFloat4(_label: PChar; v: PSingle; format: PChar; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputFloat4(_label, v, format, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputInt(_label: PChar; v: Plongint; step: Longint; step_fast: Longint; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputInt(_label, v, step, step_fast, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputInt2(_label: PChar; v: PInteger; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputInt2(_label, v, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputInt3(_label: PChar; v: PInteger; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputInt3(_label, v, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.InputInt4(_label: PChar; v: PInteger; extra_flags: ImGuiInputTextFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igInputInt4(_label, v, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Trees }
+class function ImGui.TreeNode(_label: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNode_Str(PChar(_label));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNode(str_id: String; fmt: String; args: array of const): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := TreeNode(str_id, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNode(str_id: String; fmt: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNode_StrStr(PChar(str_id), PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNode(ptr_id: pointer; fmt: String; args: array of const): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := TreeNode(ptr_id, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNode(ptr_id: pointer; fmt: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNode_Ptr(ptr_id, PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNodeEx(_label: PChar; flags: ImGuiTreeNodeFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNodeEx_Str(_label, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: String; args: array of const): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := TreeNodeEx(str_id, flags, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNodeEx_StrStr(str_id, flags, PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: String; args: array of const): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := TreeNodeEx(ptr_id, flags, Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: String): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igTreeNodeEx_Ptr(ptr_id, flags, PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TreePushStr(str_id: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTreePush_Str(str_id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TreePushPtr(ptr_id: pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTreePush_Ptr(ptr_id);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.TreePop;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igTreePop;
+  ResetFpuFlags(saved);
+End;
+
+// ImGui.TreeAdvanceToLabelPos -> use ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetTreeNodeToLabelSpacing());
+
+class function ImGui.GetTreeNodeToLabelSpacing: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetTreeNodeToLabelSpacing;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextTreeNodeOpen(opened: Boolean; cond: ImGuiCond);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextItemOpen(opened, cond);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.CollapsingHeader(_label: PChar; flags: ImGuiTreeNodeFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCollapsingHeader_TreeNodeFlags(_label, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.CollapsingHeader(_label: PChar; p_open: PBoolean; flags: ImGuiTreeNodeFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igCollapsingHeader_BoolPtr(_label, p_open, flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Selectable / Lists }
+class function ImGui.Selectable(_label: String; selected: Boolean; flags: ImGuiSelectableFlags; size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSelectable_Bool(PChar(_label), selected, flags, size);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.Selectable(_label: String; selected: Boolean; flags: ImGuiSelectableFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := Selectable(_label, selected, flags, ImVec2.New(0, 0));
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.SelectableEx(_label: PChar; p_selected: PBoolean; flags: ImGuiSelectableFlags; size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igSelectable_BoolPtr(_label, p_selected, flags, size);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ListBox(_label: PChar; current_item: Plongint; items: PPchar; items_count: Longint; height_in_items: Longint): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igListBox_Str_arr(_label, current_item, items, items_count, height_in_items);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginListBox(_label: PChar; size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginListBox(_label, size);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndListBox;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndListBox;
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare your own within the ImGui namespace!) }
+class procedure ImGui.ValueBool(prefix: PChar; b: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igValue_Bool(prefix, b);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ValueInt(prefix: PChar; v: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igValue_Int(prefix, v);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ValueUInt(prefix: PChar; v: dword);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igValue_Uint(prefix, v);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ValueFloat(prefix: PChar; v: Single; float_format: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igValue_Float(prefix, v, float_format);
+  ResetFpuFlags(saved);
+End;
+
+{ Tooltip }
+class procedure ImGui.SetTooltip(fmt: String; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  SetTooltip(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetTooltip(fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetTooltip(PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.BeginTooltip;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igBeginTooltip;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndTooltip;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndTooltip;
+  ResetFpuFlags(saved);
+End;
+
+{ Widgets: Menus }
+class function ImGui.BeginMainMenuBar: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginMainMenuBar;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndMainMenuBar;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndMainMenuBar;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginMenuBar: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginMenuBar;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndMenuBar;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndMenuBar;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginMenu(_label: PChar; Enabled: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginMenu(_label, Enabled);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndMenu;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndMenu;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.MenuItem(_label: PChar; shortcut: PChar; selected: Boolean; Enabled: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igMenuItem_Bool(_label, shortcut, selected, Enabled);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.MenuItem(_label: PChar; shortcut: PChar; p_selected: PBoolean; Enabled: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igMenuItem_BoolPtr(_label, shortcut, p_selected, Enabled);
+  ResetFpuFlags(saved);
+End;
+
+{ Popup }
+class procedure ImGui.OpenPopup(str_id: PChar; flags: ImGuiPopupFlags);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igOpenPopup_Str(str_id, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginPopup(str_id: PChar; flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginPopup(str_id, flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginPopupModal(Name: PChar; p_open: PBoolean; extra_flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginPopupModal(Name, p_open, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginPopupContextItem(str_id: PChar; mouse_button: ImGuiPopupFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginPopupContextItem(str_id, mouse_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginPopupContextWindow(str_id: PChar; mouse_button: ImGuiPopupFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginPopupContextWindow(str_id, mouse_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.BeginPopupContextVoid(str_id: PChar; mouse_button: ImGuiPopupFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginPopupContextVoid(str_id, mouse_button);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndPopup;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndPopup;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsPopupOpen(str_id: PChar; flags: ImGuiPopupFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsPopupOpen_Str(str_id, flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.CloseCurrentPopup;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igCloseCurrentPopup;
+  ResetFpuFlags(saved);
+End;
+
+{ Logging: all text output from interface is redirected to tty/file/clipboard. Tree nodes are automatically opened. }
+class procedure ImGui.LogToTTY(max_depth: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogToTTY(max_depth);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogToFile(max_depth: Longint; filename: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogToFile(max_depth, filename);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogToClipboard(max_depth: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogToClipboard(max_depth);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogFinish;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogFinish;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogButtons;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogButtons;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogText(const fmt: String; args: array of const);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  LogText(Format(fmt, args));
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.LogText(const fmt: String);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igLogText(PChar(fmt), []);
+  ResetFpuFlags(saved);
+End;
+
+{ Clipping }
+class procedure ImGui.PushClipRect(clip_rect_min: ImVec2; clip_rect_max: ImVec2; intersect_with_current_clip_rect: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.PopClipRect;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igPopClipRect;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.StyleColorsClassic(dst: PImGuiStyle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igStyleColorsClassic(dst);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.StyleColorsDark(dst: PImGuiStyle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igStyleColorsDark(dst);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.StyleColorsLight(dst: PImGuiStyle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igStyleColorsLight(dst);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetItemDefaultFocus;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetItemDefaultFocus;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetKeyboardFocusHere(offset: Integer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetKeyboardFocusHere(offset);
+  ResetFpuFlags(saved);
+End;
+
+{ Utilities }
+class function ImGui.IsItemHovered(flags: ImGuiHoveredFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsItemHovered(flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsItemActive: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsItemActive;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsItemClicked(mouse_button: ImGuiMouseButton): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsItemClicked(mouse_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsItemVisible: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsItemVisible;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsAnyItemHovered: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsAnyItemHovered;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsAnyItemActive: Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsAnyItemActive;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetItemRectMin(pOut: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetItemRectMin(pOut);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetItemRectMax(pOut: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetItemRectMax(pOut);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.GetItemRectSize(pOut: PImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetItemRectSize(pOut);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextItemAllowOverlap;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextItemAllowOverlap();
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsWindowFocused(flags: ImGuiFocusedFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsWindowFocused(flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsWindowHovered(flags: ImGuiHoveredFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsWindowHovered(flags);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsRectVisible(const item_size: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsRectVisible_Nil(item_size);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsRectVisible(const rect_min, rect_max: ImVec2): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsRectVisible_Vec2(rect_min, rect_max);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetTime: Single;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetTime;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetFrameCount: Longint;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetFrameCount;
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetStyleColorName(idx: ImGuiCol): PChar;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetStyleColorName(idx);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.CalcTextSize(_text: PChar; text_end: PChar; hide_text_after_double_hash: Boolean; wrap_width: Single): ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igCalcTextSize(@Result, _text, text_end, hide_text_after_double_hash, wrap_width);
+  ResetFpuFlags(saved);
+End;
+
+{ TODO: Add ImGuiListClipper - Time : 11/4/2023 12:42:03 AM }
+
+class function ImGui.BeginChildFrame(id: ImGuiID; size: ImVec2; extra_flags: ImGuiWindowFlags): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igBeginChildFrame(id, size, extra_flags);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.EndChildFrame;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igEndChildFrame;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ColorConvertU32ToFloat4(pOut: PImVec4; in_: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igColorConvertU32ToFloat4(pOut, in_);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.ColorConvertFloat4ToU32(in_: ImVec4): ImU32;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igColorConvertFloat4ToU32(in_);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ColorConvertRGBtoHSV(r: Single; g: Single; b: Single; out_h: Psingle; out_s: Psingle; out_v: Psingle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igColorConvertRGBtoHSV(r, g, b, out_h, out_s, out_v);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ColorConvertHSVtoRGB(h: Single; s: Single; v: Single; out_r: Psingle; out_g: Psingle; out_b: Psingle);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igColorConvertHSVtoRGB(h, s, v, out_r, out_g, out_b);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetKeyIndex(key: ImGuiKey): ImGuiKey;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetKeyIndex(key);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsKeyDown(user_key_index: ImGuiKey): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsKeyDown_Nil(user_key_index);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsKeyPressed(user_key_index: ImGuiKey; _repeat: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsKeyPressed_Bool(user_key_index, _repeat);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsKeyReleased(user_key_index: ImGuiKey): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsKeyReleased_Nil(user_key_index);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseDown(_button: ImGuiMouseButton): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseDown_Nil(_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseClicked(_button: ImGuiMouseButton; _repeat: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseClicked_Bool(_button, _repeat);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseDoubleClicked(_button: ImGuiMouseButton): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseDoubleClicked(_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseReleased(_button: ImGuiMouseButton): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseReleased_Nil(_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseHoveringRect(r_min: ImVec2; r_max: ImVec2; clip: Boolean): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseHoveringRect(r_min, r_max, clip);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.IsMouseDragging(_button: ImGuiMouseButton; lock_threshold: Single): Boolean;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igIsMouseDragging(_button, lock_threshold);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetMousePos: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetMousePos(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetMousePosOnOpeningCurrentPopup: ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetMousePosOnOpeningCurrentPopup(@Result);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetMouseDragDelta(_button: ImGuiMouseButton; lock_threshold: Single): ImVec2;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igGetMouseDragDelta(@Result, _button, lock_threshold);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.ResetMouseDragDelta(_button: ImGuiMouseButton);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igResetMouseDragDelta(_button);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetMouseCursor: ImGuiMouseCursor;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetMouseCursor;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetMouseCursor(_type: ImGuiMouseCursor);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetMouseCursor(_type);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextFrameWantCaptureKeyboard(capture: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextFrameWantCaptureKeyboard(capture);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetNextFrameWantCaptureMouse(capture: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetNextFrameWantCaptureMouse(capture);
+  ResetFpuFlags(saved);
+End;
+
+{ Helpers functions to access functions pointers in ImGui::GetIO() }
+class function ImGui.MemAlloc(sz: size_t): pointer;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igMemAlloc(sz);
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.MemFree(ptr: pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igMemFree(ptr);
+  ResetFpuFlags(saved);
+End;
+
+class function ImGui.GetClipboardText: PChar;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetClipboardText;
+  ResetFpuFlags(saved);
+End;
+
+class procedure ImGui.SetClipboardText(_text: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  igSetClipboardText(_text);
+  ResetFpuFlags(saved);
+End;
+
+{ Internal state access - if you want to share ImGui state between modules (e.g. DLL) or allocate it yourself }
+class function ImGui.GetVersion: PChar;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  Result := igGetVersion;
+  ResetFpuFlags(saved);
+End;
+
+{ TImFontAtlasHelper }
+
+Procedure TImFontAtlasHelper.GetTexDataAsAlpha8(out_pixels: PPImU8;
+  out_width: PInt32; out_height: PInt32; out_bytes_per_pixel: PInt32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImFontAtlas_GetTexDataAsAlpha8(@Self, out_pixels, out_width,
+    out_height, out_bytes_per_pixel);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImFontAtlasHelper.SetTexID(id: ImTextureID); Cdecl;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImFontAtlas_SetTexID(@Self, id);
+  ResetFpuFlags(saved);
+End;
+
+{ TPImDrawListHelper }
+//procedure TPImDrawListHelper.AddRectFilled(p_min: ImVec2; p_max: ImVec2; col: ImU32; rounding: Single; flags: ImDrawFlags);
+//begin
+//  ImDrawList_AddRectFilled(self, p_min, p_max, col, rounding, flags);
+//end;
+
+
+{ TImDrawListHelper }
+
+Procedure TImDrawListHelper.PushClipRect(clip_rect_min: ImVec2;
+  clip_rect_max: ImVec2; intersect_with_current_clip_rect: Boolean);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PushClipRect(@self, clip_rect_min, clip_rect_max,
+    intersect_with_current_clip_rect);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PushClipRectFullScreen;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PushClipRectFullScreen(@self);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PopClipRect;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PopClipRect(@self);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PushTextureID(texture_id: ImTextureID);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PushTextureID(@self, texture_id);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PopTextureID;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PopTextureID(@self);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddLine(p1 : ImVec2; p2 : ImVec2; col : ImU32; thickness : Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddLine(@self, p1, p2, col, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddRect(a: ImVec2; b: ImVec2; col: ImU32;
+  rounding: Single; rounding_corners_flags: ImDrawFlags; thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddRect(@self, a, b, col, rounding, rounding_corners_flags, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddRectFilled(p_min: ImVec2; p_max: ImVec2;
+  col: ImU32; rounding: Single; flags: ImDrawFlags);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddRectFilled(@self, p_min, p_max, col, rounding, flags);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddRectFilledMultiColor(a: ImVec2; b: ImVec2;
+  col_upr_left: ImU32; col_upr_right: ImU32; col_bot_right: ImU32; col_bot_left: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddRectFilledMultiColor(@self, a, b, col_upr_left,
+    col_upr_right, col_bot_right, col_bot_left);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddQuad(a: ImVec2; b: ImVec2; c: ImVec2;
+  d: ImVec2; col: ImU32; thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddQuad(@self, a, b, c, d, col, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddQuadFilled(a: ImVec2; b: ImVec2;
+  c: ImVec2; d: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddQuadFilled(@self, a, b, c, d, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddTriangle(a: ImVec2; b: ImVec2; c: ImVec2;
+  col: ImU32; thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddTriangle(@self, a, b, c, col, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddTriangleFilled(a: ImVec2; b: ImVec2;
+  c: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddTriangleFilled(@self, a, b, c, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddCircle(centre: ImVec2; radius: Single;
+  col: ImU32; num_segments: Longint; thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddCircle(@self, centre, radius, col, num_segments, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddCircleFilled(centre: ImVec2; radius: Single;
+  col: ImU32; num_segments: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddCircleFilled(@self, centre, radius, col, num_segments);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddText(pos: ImVec2; col: ImU32;
+  text_begin: PChar; text_end: PChar);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddText_Vec2(@self, pos, col, text_begin, text_end);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddTextExt(font: ImFont; font_size: Single;
+  pos: ImVec2; col: ImU32; text_begin: PChar; text_end: PChar;
+  wrap_width: Single; cpu_fine_clip_rect: ImVec4);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddText_FontPtr(@self, @font, font_size, pos, col, text_begin,
+    text_end, wrap_width, @cpu_fine_clip_rect);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddImage(user_texture_id: ImTextureID;
+  a: ImVec2; b: ImVec2; uva: ImVec2; uvb: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddImage(@self, user_texture_id, a, b, uva, uvb, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddImageQuad(user_texture_id: ImTextureID;
+  Const a, b, c, d: ImVec2; Const uva, uvb, uvc, uvd: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddImageQuad(@self, user_texture_id, a, b, c, d, uva, uvb, uvc, uvd, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddPolyline(points: PImVec2; num_points: Integer;
+  col: ImU32; flags: ImDrawFlags; thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddPolyline(@self, points, num_points, col, flags, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddConvexPolyFilled(points: PImVec2;
+  num_points: Integer; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddConvexPolyFilled(@self, points, num_points, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.AddBezierCubic(p1: ImVec2; p2: ImVec2;
+  p3: ImVec2; p4: ImVec2; col: ImU32; thickness: Single; num_segments: Integer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddBezierCubic(@self, p1, p2, p3, p4, col, thickness, num_segments);
+  ResetFpuFlags(saved);
+End;
+
+{ Stateful path API, add points then finish with PathFill() or PathStroke() }
+Procedure TImDrawListHelper.PathClear;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathClear(@self);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PathLineTo(pos: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathLineTo(@self, pos);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PathLineToMergeDuplicate(pos: ImVec2);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathLineToMergeDuplicate(@self, pos);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PathFillConvex(col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathFillConvex(@self, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PathStroke(col: ImU32; flags: ImDrawFlags;
+  thickness: Single);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathStroke(@self, col, flags, thickness);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PathArcTo(centre: ImVec2; radius: Single;
+  a_min: Single; a_max: Single; num_segments: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathArcTo(@self, centre, radius, a_min, a_max, num_segments);
+  ResetFpuFlags(saved);
+End;
+{ Use precomputed angles for a 12 steps circle }
+Procedure TImDrawListHelper.PathArcToFast(centre: ImVec2; radius: Single;
+  a_min_of_12: Longint; a_max_of_12: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathArcToFast(@self, centre, radius, a_min_of_12, a_max_of_12);
+  ResetFpuFlags(saved);
+End;
+//procedure TImDrawListHelper.PathBezierCurveTo(p1: ImVec2; p2: ImVec2; p3: ImVec2; num_segments: longint);
+//    begin ImDrawList_PathBezierCurveTo(@self, p1, p2, p3, num_segments) end;
+Procedure TImDrawListHelper.PathRect(rect_min: ImVec2; rect_max: ImVec2;
+  rounding: Single; rounding_corners_flags: ImDrawFlags);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PathRect(@self, rect_min, rect_max, rounding, rounding_corners_flags);
+  ResetFpuFlags(saved);
+End;
+
+{ Channels }
+Procedure TImDrawListHelper.ChannelsSplit(channels_count: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_ChannelsSplit(@self, channels_count);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.ChannelsMerge;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_ChannelsMerge(@self);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.ChannelsSetCurrent(channel_index: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_ChannelsSetCurrent(@self, channel_index);
+  ResetFpuFlags(saved);
+End;
+
+{ Advanced }
+{ Your rendering function must check for 'UserCallback' label_ ImDrawCmd and call the function instead of rendering triangles. }
+Procedure TImDrawListHelper.AddCallback(callback: ImDrawCallback;
+  callback_data: pointer);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddCallback(@self, callback, callback_data);
+  ResetFpuFlags(saved);
+End;
+{ This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible }
+Procedure TImDrawListHelper.AddDrawCmd;
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_AddDrawCmd(@self);
+  ResetFpuFlags(saved);
+End;
+
+{ Internal helpers }
+Procedure TImDrawListHelper.PrimReserve(idx_count: Longint; vtx_count: Longint);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimReserve(@self, idx_count, vtx_count);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimRect(a: ImVec2; b: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimRect(@self, a, b, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimRectUV(a: ImVec2; b: ImVec2; uv_a: ImVec2;
+  uv_b: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimRectUV(@self, a, b, uv_a, uv_b, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimQuadUV(a: ImVec2; b: ImVec2; c: ImVec2;
+  d: ImVec2; uv_a: ImVec2; uv_b: ImVec2; uv_c: ImVec2; uv_d: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimQuadUV(@self, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimWriteVtx(pos: ImVec2; uv: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimWriteVtx(@self, pos, uv, col);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimWriteIdx(idx: ImDrawIdx);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimWriteIdx(@self, idx);
+  ResetFpuFlags(saved);
+End;
+
+Procedure TImDrawListHelper.PrimVtx(pos: ImVec2; uv: ImVec2; col: ImU32);
+Var
+  saved: Cardinal;
+Begin
+  saved := SetFpuFlags();
+  ImDrawList_PrimVtx(@self, pos, uv, col);
+  ResetFpuFlags(saved);
+End;
+
+
+
+End.