Those are standalone ready-to-build applications to demonstrate Dear ImGui.
Binaries of some of those demos: http://www.miracleworld.net/imgui/binaries

Third party languages and frameworks bindings: 
  https://github.com/ocornut/imgui/wiki/Links
(languages: C, C#, ChaiScript, D, Go, Haxe, Odin, Python, Rust, Lua, Pascal)
(other frameworks: OpenGLES, FreeGlut, Cinder, Cocos2d-x, SFML, GML/GameMaker Studio, Irrlicht,
 Ogre, OpenSceneGraph, openFrameworks, LOVE, NanoRT, Qt3d, SFML, Unreal Engine 4, etc.)
(extras: RemoteImGui, ImWindow, imgui_wm, etc.)


TL;DR; 
 - Newcomers, read 'PROGRAMMER GUIDE' in imgui.cpp for notes on how to setup ImGui in your codebase.
 - If you are using of the backend provided here, so you can copy the imgui_impl_xxx.cpp/h files
   to your project and use them unmodified.
 - To LEARN how to setup imgui, you may refer to 'opengl2_example' because is the simplest one to read.
   However, do NOT USE the 'opengl2_example' if your code is using any modern GL3+ calls.
   Mixing old fixed-pipeline OpenGL2 and modern OpenGL3+ is going to make everything more complicated.
   Read comments below for details. If you are not sure, in doubt, use 'opengl3_example'.
 - If you have your own engine, you probably want to read a few of the examples first then adapt it to
   your engine. Please note that if your engine is based on OpenGL/DirectX you can perfectly use the
   existing rendering backends, don't feel forced to rewrite them with your own engine API, or you can
   do that later when you already got things to work.

Dear ImGui is highly portable and only requires a few things to run and render.
 - Providing mouse/keyboard inputs
 - Load the font atlas texture into graphics memory
 - Providing a render function to render indexed textured triangles
 - Optional: clipboard support, mouse cursor supports, Windows IME support, etc.
So this is essentially what those examples are doing + the obligatory cruft for portability.

Unfortunately in 2018 it is still tedious to create and maintain portable build files using external 
libraries (the kind we're using here to create a window and render 3D triangles) without relying on 
third party software. For most examples here I choose to provide:
 - Makefiles for Linux/OSX
 - Batch files for Visual Studio 2008+
 - A .sln project file for Visual Studio 2010+ 
Please let me know if they don't work with your setup!
You can probably just import the imgui_impl_xxx.cpp/.h files into your own codebase or compile those
directly with a command-line compiler.

Dear ImGui has zero to one frame of lag for most behaviors, at 60 FPS your experience should be pleasant.
Consider that OS mouse cursors are typically drawn through a specific hardware accelerated route and may 
feel smoother than other GPU rendered contents. You may experiment with the io.MouseDrawCursor flag to
request ImGui to draw a mouse cursor itself, to visualize the lag between a hardware cursor and a software
cursor. It might be beneficial to the user experience to switch to a software rendered cursor when an
interactive drag is in progress. 
Also note that some setup or GPU drivers may be causing extra lag (possibly by enforcing triple buffering),
leaving you with little option but sadness (Intel GPU drivers were reported as such).


opengl2_example/
    **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
    **Prefer using the code in the opengl3_example/ folder**
    GLFW + OpenGL example (legacy, fixed pipeline).
    This code is mostly provided as a reference to learn how ImGui integration works, because it is shorter.
    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
    make things more complicated, will require your code to several OpenGL attributes to their initial state,
    and might confuse your GPU driver. 

opengl3_example/
    GLFW + OpenGL example (programmable pipeline, binding modern functions with GL3W).
    This uses more modern OpenGL calls and custom shaders. 
    Prefer using that if you are using modern OpenGL in your application (anything with shaders).

directx9_example/
    DirectX9 example, Windows only.
	
directx10_example/
    DirectX10 example, Windows only.
    This is quite long and tedious, because: DirectX10.

directx11_example/
    DirectX11 example, Windows only.
    This is quite long and tedious, because: DirectX11.
	
directx12_example/
    DirectX12 example, Windows only.
    This is quite longer and tedious, because: DirectX12.
	
apple_example/
    OSX & iOS example.
    On iOS, Using Synergy to access keyboard/mouse data from server computer.
    Synergy keyboard integration is rather hacky.

sdl_opengl2_example/
    **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
    **Prefer using the code in the sdl_opengl3_example/ folder**
    SDL2 + OpenGL example (legacy, fixed pipeline).
    This code is mostly provided as a reference to learn how ImGui integration works, because it is shorter.
    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
    make things more complicated, will require your code to several OpenGL attributes to their initial state,
    and might confuse your GPU driver. 

sdl_opengl3_example/
    SDL2 + OpenGL3 example.
    This uses more modern OpenGL calls and custom shaders. 
    Prefer using that if you are using modern OpenGL in your application (anything with shaders).

allegro5_example/
    Allegro 5 example.
	 
marmalade_example/
    Marmalade example using IwGx
    
vulkan_example/
    Vulkan example.
    This is quite longer and tedious, because: Vulkan.
