Skip to content

dinau/imguin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ImGuin

Updated to latest ImGui/CImGui version: : v1.91.6dock (2024/12)

This project is my experiment project to use Nim language, ImGui, ImPlot, futhark and etc.

Usage: Sample program and run


Prerequisites


  • Nim-2.0.12 or later

  • Windows10 or later

  • MSys2/MinGW command line tools (Unix tools), make, cp, rm, git, ...etc

  • Linux Mint 22 (or Ubuntu / Debian families ?)

    $ sudo apt install xorg-dev libopengl-dev libgl1-mesa-dev

    and for glfw3 and sdl2,

    $ sudo apt install libglfw3 libglfw3-dev
    $ sudo apt install libsdl2-dev

Install


nimble uninstall imguin  # Remove old versions if exists. 
nimble install https://github.com/dinau/imguin

Build examples


  1. First clone this project,

    git clone https://github.com/dinau/imguin
  2. Sample program is here, examples. For instance glfw_opengl3.nim,

    cd imguin/examples/glfw_opengl3
    make  # or make run

    After build, run ./glfw_opengl3(.exe)
    Compiation options depend on ./config.nims and ./Makefile.

  3. For selecting static link or dynamic link ,read this examples/README.md.

Screen shot (examples)


These screen shots are on Windows10.


Basic example with icon fonts

alt

  • Build

    pwd
    examples/glfw_opengl3
    make        # or make run

    or

    nim c glfw_opengl3.nim    # or  nim c -r glfw_opengl3.nim   or   nim r glfw_opengl3.nim 

https://github.com/altschuler/imgui-knobs

cimgui-knobs sources have been contributed from system64MC / PR . Thank you.

alt

  • Build

    pwd
    examples/glfw_opengl3_imknobs
    make 

    or

    nim c -d:ImKnobsEnable --warning:HoleEnumConv:off glfw_opengl3_imknobs.nim  

Icon font viewer and magnifying glass

alt

  • Build

    pwd
    examples/iconFontViewer
    make 

    or

    nim c iconFontViewer.nim  

Image load and magnifying glass

alt

  • Build

    pwd
    examples/glfw_opengl3_image_load
    make 

    or

    nim c glfw_opengl3_image_load.nim  
  • Build sdl2 version

    pwd
    examples/sdl2_opengl3
    make 

    or

    nim c -d:SDL sdl2_opengl3.nim  

Image load / save and magnifying glass
It can save a screen shot as jpg, bmp, png or tga file.

alt

  • Build

    pwd
    examples/glfw_opengl3_image_save
    make        # or make run

    or

    nim c glfw_opengl3_image_save.nim

Showing UTF-8 text and input text with a local country language.
alt

  • Build

    pwd
    examples/glfw_opengl3_jp
    make        # or make run

    or

    nim c glfw_opengl3_jp.nim

Showing ImGui demo with ImPlot demo.
alt

  • Build

    pwd
    examples/glfw_opengl3_implot
    make        # or make run

    or

    nim c -d:ImPlotEnable glfw_opengl3_implot.nim

alt

  • Build

    pwd
    examples/glfw_opengl3_imnodes
    make        # or make run

    or

    nim c -d:ImNodesEnable glfw_opengl3_imnodes.nim

alt

  • Build

    pwd
    examples/glfw_opengl3_imguizmo
    make        # or make run

    or

    nim c -d:ImGuizmoEnable glfw_opengl3_imguizmo.nim

My test app movie using imguin


Sample movie,Youtube

Cross compilation: Generating Windows application binary(*.exe) on Linux OS


See:
Cross compilation to Windows, linker error (unrecognized option '-z'
https://nim-lang.org/docs/nimc.html#crossminuscompilation-for-windows

For example on Linux Mint 22 and so on,

pwd
examples
cd glfw_opengl3
make win  

or

nim c -d:mingw glfw_opengl3

or

nim c --os:windows glfw_opengl3

glfw_opengl3.exe will be generated in the current folder.

Update / Downgrade Dear ImGui and CImGui

Prerequisite


  1. Git installed.

  2. Installed MSys2/MinGW command line tools (Unix tools), make, cp, rm, ...etc

  3. Windows10 or later Clang/LLVM refer to Futhark installation.

    nimble install futhark

    It must exist libclang.a file in the library path (e.g. in c:\llvm\lib).

  4. Linux Debian 12 Bookworm

    sudo apt install  clang-16
    nimble install --passL:"-L/usr/lib/llvm-16/lib" futhark

Important Notice: Confirm Futhark version is v0.13.6 at this time. (2024/09)

nimble dump futhark

name: "futhark"
version: "0.13.6"
author: "PMunch"
desc: "A package which uses libclang to parse C headers into Nim files for easy interop"
license: "MIT"
...

Update / Downgrade ImGui/CImGui


  1. Compose development folders
    First move to your working folder you like, then

    mkdir imguin_dev
    cd imguin_dev
    git clone https://github.com/dinau/imguin
    cd imguin
  2. Clone ImGui/CImGui etc. sources at once forever

    pwd
    imguin
    make clonelibs

    Cloned libraries are under ../libs/ folder

  3. Recursively update the sources using git Pull or fetch command in the each library folder,
    ../libs/cimgui
    ../libs/cimguizmo
    ../libs/cimnodes
    ../libs/cimplot

  4. Checkout arbitrary version with git command in the respective folder

  5. Specify your Clang include path to ClangIncludePath in imguin/src/imguin/cimgui.nim.

  6. Generate the definition file uisng Futhark,

    pwd
    imguin
    make gen
  7. Install updated files
    Properly edit the version info etc in imguin.nimble file, then

    pwd
    imguin
    nimble uninstall imguin  # Remove old versions if it exists. 
    nimble install 

    That's all.
    Repeat from 3. if you'd like to update or downgrade to other version.

  • Confirmed version

    ImGui/CImGui Ver. ImGuin Ver. Date WindowsOS Linux Mint 22 Debian
    Bookworm (1)
    1.91.6dock 1.91.6.0 2024/12 OK OK -
    1.91.5dock - - - - -
    1.91.4dock 1.91.4.2 2024/12 OK OK -
    1.91.3dock 1.91.3.1 2024/10 OK (7) -
    1.91.2dock 1.91.2.0 2024/10 OK (7) -
    1.91.1dock 1.91.1.2 2024/09 OK (6) -
    1.91.0dock 1.91.0.0 2024/08 OK - (7)
    1.90.4dock 1.90.4.2 2024/02 OK - OK (4)
    1.90.1dock 1.90.1.0 2024/01 OK - NG/OK(1)(3)(4)
    1.89.9dock 1.89.9.8 2023/12 OK - NG/OK(1)(3)(4)

    (1): Except imnodes and SDL2 example.
    (2): Doesn't work well.
    (3): Works well only if it is compiled debug mode.
    (4): Use nim-2.0.2
    (5): I don't know why can't be compiled on Linux.
    (6): OK: Except ImNodes example
    (7): Not checked at this moment.

Selection backend compiler


You might be able to use another C/C++ compiler,
Clang, vcc(Visual Studio C/C++) , zig cc
by changing variable TC in examples/config.nims.common.

TODO


  1. Whether can it use cimgui.dll ? (Now it can only be static link) Closed. Only be static link.
  2. Easier compilation for SDL2 app. (2024/09) Done.
  3. Added: ImNodes/CImNodes (2023/10) Done
  4. Unfortunately ImGui 1.89.7 dosn't work well at this moment.(2023/07) Done. (2023/08)
  5. Whether can it do nimble install imguin ? Done (2023/09) (#Issue 13)
  6. Add Font Awesome (Icon Font) demo. Done (2023/04).
  7. Can it compile with MSVC (--cc:vcc) ? Done. Except SDL2 demo. (2023/03), TODO (2024/09)
  8. Can it compile with Clang (--cc:clang) ? Done. (2023/03)
  9. Add SDL2 example. Done. examples/sdl2_opengl3 (2023/03)
  • First step is done. (2023/03)

Compressing binary file


Install UPX with MSys console on WindowsOS,

pacman -S mingw-w64-x86_64-upx

For compression exe file,

pwd
examples
cd glfw_opengl3_implot
make upx
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.4       Markus Oberhumer, Laszlo Molnar & John Reiser    May 9th 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   7117824 ->   1217024   17.10%    win64/pe     glfw_opengl3_implot.exe      

Decompressing,

make dupx

Result in,

GCC + UPX : GCC Clang + UPX : Clang MSVC(vcc) + UPX : MSVC
glfw_opengl3.exe 804 KB : 2360 KB 720 KB : 2200 KB 742 KB : 2070 KB
glfw_opengl3_implot.exe 1220 KB : 7120 KB 940KB : 4200 KB 945 KB : 3810 KB

GCC: v14.2.0, Clang: v18.1.8, MSVC: 2022

My tools version


Windows11 (main)

  • Nim Compiler Version 2.2.0

  • GCC (Rev1, Built by MSYS2 project) 14.2.0

    pacman -S mingw-w64-ucrt-x86_64-gcc
  • Clang version 19.1.4

    pacman -S mingw-w64-ucrt-x86_64-clang
  • Visual Studio C++/C 2022

  • git version 2.46.0.windows.1

  • SDL2.dll: 2.30.7

  • Make: GNU Make 4.4.1

  • MSys2/MinGW tools

Linux Mint 22

  • Nim Compiler Version 2.2.0
  • gcc 13.2.0
  • SDL2: 2.30.0
  • make: GNU Make 4.3
  • git version 2.43.0

Other link


Similar project ImGui / CImGui


Language Project
Nim Compiler ImGuin, Nimgl_test, Nim_implot
Lua Script LuaJITImGui
Zig, C lang. Compiler Dear_Bindings_Build
Zig Compiler ImGuinZ
NeLua Compiler NeLuaImGui
Python Script DearPyGui for 32bit WindowsOS Binary

SDL Game tutorial Platfromer


ald

Language Project
Nim Compiler Nim-Platformer/ sdl3_nim
LuaJIT Script LuaJIT-Platformer
Nelua Compiler NeLua-Platformer
Zig Compiler Zig-Platformer

Other link2