https://github.com/dinau/dear_bindings_build
ImGui: Simple dear_bindings build project
https://github.com/dinau/dear_bindings_build
c-language cimgui clang gcc glfw gui imgui makefile mingw msys2 opengl sdl sdl2 sdl3 windows windowsos zig
Last synced: 6 months ago
JSON representation
ImGui: Simple dear_bindings build project
- Host: GitHub
- URL: https://github.com/dinau/dear_bindings_build
- Owner: dinau
- License: mit
- Created: 2024-06-01T10:02:11.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-06-17T09:08:24.000Z (about 2 years ago)
- Last Synced: 2025-01-20T19:14:25.611Z (over 1 year ago)
- Topics: c-language, cimgui, clang, gcc, glfw, gui, imgui, makefile, mingw, msys2, opengl, sdl, sdl2, sdl3, windows, windowsos, zig
- Language: C
- Homepage:
- Size: 36.2 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
- [Dear_Bindings_Build](#dear_bindings_build)
- [Zig fetch](#zig-fetch)
- [Frontends and Backends](#frontends-and-backends)
- [Available libraries list at this moment](#available-libraries-list-at-this-moment)
- [Prerequisites](#prerequisites)
- [Compiling](#compiling)
- [Build and run](#build-and-run)
- [Examples screen shots](#examples-screen-shots)
- [zig_imknobs](#zig_imknobs)
- [zig_imtoggle](#zig_imtoggle)
- [zig_imspinner](#zig_imspinner)
- [Raylib example](#raylib-example)
- [Raylib + ImGui + rlImGui](#raylib--imgui--rlimgui)
- [zig_imfiledialog](#zig_imfiledialog)
- [zig_imgui_markdown](#zig_imgui_markdown)
- [zig_iconfontviewer](#zig_iconfontviewer)
- [zig_imcolortextedit](#zig_imcolortextedit)
- [zig_imguizmo](#zig_imguizmo)
- [zig_imnodes](#zig_imnodes)
- [zig_implot / zig_implot3d](#zig_implot--zig_implot3d)
- [Image load / save (OpenGL, SDL3, SDL3GPU)](#image-load--save-opengl-sdl3-sdl3gpu)
- [zig_glfw_opengl3](#zig_glfw_opengl3)
- [Hiding console window](#hiding-console-window)
- [SDL libraries](#sdl-libraries)
- [My tools version](#my-tools-version)
- [Similar project ImGui / CImGui](#similar-project-imgui--cimgui)
- [SDL game tutorial Platfromer](#sdl-game-tutorial-platfromer)
### Dear_Bindings_Build
This project aims to simply and easily build [Dear ImGui](https://github.com/ocornut/imgui) examples with **C** and **Zig** using [Dear_Bindings](https://github.com/dearimgui/dear_bindings) as first step.
And one can use many other libaries and examples with less external dependencies.
[DearBindings](https://github.com/dearimgui/dear_bindings): dear_bindings_v0.17_ImGui_v1.92.4-docking
[Dear ImGui](https://github.com/ocornut/imgui): 1.92.4
#### Zig fetch
---
1. Zig fetch `dear_bindings_build`
```sh
mkdir myapp
cd myapp
zig init
zig fetch --save git+https://github.com/dinau/dear_bindings_build
```
1. Add dependencies to `build.zig`
```zig
const dear_bindings_build = b.dependency("dear_bindings_build", .{});
const dependencies = .{
"appimgui", // Simple app framework
"imspinner", // ImSpinner
"imknobs", // ImKnobs
"imtoggle", // ImToggle
// "another_lib",
};
inline for (dependencies) |dep_name| {
const dep = dear_bindings_build.builder.dependency(dep_name, .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport(dep_name, dep.module(dep_name));
}
exe.subsystem = .Windows; // Hide console window
```
You can set `dependencies` (additional libraries), see [dear_bindings_build/build.zig.zon](https://github.com/dinau/dear_bindings_build/blob/main/build.zig.zon)
```zig
"appimgui" <- Simple app framework for GLFW and OpenGL backend
"imspinner" <- ImSpinner
"imguizmo" <- ImGuizmo
"imknobs" <- ImKnobs
"imnodes" <- ImNodes
"implot" <- ImPlots
"implot3d" <- ImPlot3D
"imtoggle" <- ImToggle
"rlimgui" <- rlImgui
... snip ...
```
1. Edit src/main.zig
```zig
const app = @import("appimgui");
const ig = app.ig;
const spinner = @import("imspinner"); // ImSpinner
const knobs = @import("imknobs"); // ImKnobs
const tgl = @import("imtoggle"); // ImToggle
// gui_main()
pub fn gui_main(window: *app.Window) void {
var col: f32 = 1.0;
var fspd: bool = false;
var speed: f32 = 2.0;
var spn_col: spinner.ImColor = .{ .Value = .{ .x = col, .y = 1.0, .z = 1.0, .w = 1.0 } };
while (!window.shouldClose()) { // main loop
window.pollEvents();
window.frame(); // Start ImGui frame
ig.ImGui_ShowDemoWindow(null); // Show ImGui demo window
ig.ImGui_SetNextWindowSize(.{ .x = 0.0, .y = 0.0 }, 0); // Fit window size depending on the size of the widgets
_ = ig.ImGui_Begin("Demo", null, 0); // Show demo window
spinner.SpinnerAtomEx("atom", 16, 2, spn_col, speed, 3);
ig.ImGui_SameLine();
_ = tgl.Toggle("Speed", &fspd, .{ .x = 0.0, .y = 0.0 });
if (fspd) speed = 6.0 else speed = 2.0;
if (knobs.IgKnobFloat("Color", &col, 0.0, 1.0, 0.05, "%.2f", knobs.IgKnobVariant_Stepped, 0, 0, 10, -1, -1)) {
spn_col.Value.x = col;
}
ig.ImGui_End();
window.render(); // render
} // end while loop
}
pub fn main() !void {
var window = try app.Window.createImGui(1024, 900, "ImGui window in Zig lang.");
defer window.destroyImGui();
_ = app.setTheme(.dark); // Theme: dark, classic, light, microsoft
gui_main(&window); // GUI main proc
}
```
1. Build and run
```sh
pwd
myapp
zig build run # or zig build --release=fast
```

#### Frontends and Backends
---
| Frontends | Backends |
|-----------|:-----------------:|
| GLFW3 | OpenGL3, SDL3 |
| SDL3 | OpenGL3, SDL3GPU |
| Win32 | DirectX 11(D3D11) |
#### Available libraries list at this moment
---
Library name / C lang. wrapper
- [x] [ImGui](https://github.com/ocornut/imgui) / [Dear_Bindings](https://github.com/dearimgui/dear_bindings)
- [x] [ImGui-Knobs](https://github.com/altschuler/imgui-knobs) / [CImGui-Knobs](libs/cimgui-knobs) (2025/07)
- [x] [ImGuiFileDialog](https://github.com/aiekick/ImGuiFileDialog) / [CImGuiFileDialog](https://github.com/dinau/CImGuiFileDialog) (2025/07)
- [x] [ImGui_Toggle](https://github.com/cmdwtf/imgui_toggle) / [CimGui_Toggle](https://github.com/dinau/cimgui_toggle) (2025/07)
- [x] [ImSpinner](https://github.com/dalerank/imspinner) / [CImSpinner](https://github.com/dinau/cimspinner) (2025/07)
- [x] [ImGuiColorTextEdit](https://github.com/santaclose/ImGuiColorTextEdit) / [cimCTE](https://github.com/cimgui/cimCTE) (2025/08)
- [x] [ImGuizmo](https://github.com/CedricGuillemet/ImGuizmo) / [CImGuizmo](https://github.com/cimgui/cimguizmo) (2025/08)
- [x] [ImNodes](https://github.com/Nelarius/imnodes) / [CImNodes](https://github.com/cimgui/cimnodes) (2025/08)
- [x] [ImPlot](https://github.com/epezent/implot) / [CImPlot](https://github.com/cimgui/cimplot) (2025/08)
- [x] [ImPlot3d](https://github.com/brenocq/implot3d) / [CImPlot3d](https://github.com/cimgui/cimplot3d) (2025/08)
- [ ] [ImGui_Markdown](https://github.com/enkisoftware/imgui_markdown) (2025/09 WIP)
Additional examples
- [x] [Raylib](https://github.com/raysan5/raylib), [raylib-zig](https://github.com/raylib-zig/raylib-zig), [rlImGui](https://github.com/raylib-extras/rlImGui) (2025/11)
#### Prerequisites
---
- Install Zig Compiler
Windows: [zig-x86_64-windows-0.15.2.zip](https://ziglang.org/download/0.15.2/zig-x86_64-windows-0.15.2.zip)
Linux: [zig-x86_64-linux-0.15.2.tar.xz](https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz)
- Windows11
- Optional: MSys2/MinGW basic commands (make, rm, cp ...)
```sh
pacman -S make
```
- Linux OS: Debian13 Trixie / Ubuntu families
```sh
sudo apt install make gcc lib{opengl-dev,gl1-mesa-dev,glfw3,glfw3-dev}
```
- SDL3
If you are using Debian13 Trixie, add
```sh
sudo apt install libsdl3-dev
```
otherwise [install SDL3 manually](https://github.com/dinau/sdl3_nim#for-linux-os)
#### Compiling
---
- Zig compiler
| Example name | Windows | Linux |
| --- | :----: | :----: |
| zig_* | Y | Y |
- Zig cc compiler
Using Zig module in C source code.
| example | Windows | Linux |
| --- | :----: | :----: |
| glfw_* | Y | Y |
| sdl3_* | Y | WIP |
| win32_* | Y | - |
#### Build and run
---
```sh
git clone https://github.com/dinau/dear_bindings_build
cd dear_bindings_build/examples/glfw_opengl3 # for example
zig build run --release=fast # or make run
```
#### Examples screen shots
##### zig_imknobs
---
[zig_imknobs](examples/zig_imknobs/src/main.zig)

##### zig_imtoggle
---
[zig_imtoggle](examples/zig_imtoggle/src/main.zig)

##### zig_imspinner
---
[zig_imspinner](examples/zig_imspinner/src/main.zig)

##### Raylib example
---
[raylib_basic](examples/zig_raylib_basic/src/main.zig)

[raylib_cjk](examples/zig_raylib_cjk/src/main.zig): Showing multi byte(CJK) fonts

##### Raylib + ImGui + rlImGui
---
[main.zig](examples/zig_rlimgui_basic/src/main.zig)

##### zig_imfiledialog
---
[zig_imfiledialog](examples/zig_imfiledialog/src/main.zig)

##### zig_imgui_markdown
---
- [x] Work in progress
[zig_imgui_markdown](examples/zig_imgui_markdown/src/main.zig)

##### zig_iconfontviewer
---
[zig_iconfontviewer](examples/zig_iconfontviewer/src/main.zig)
- [x] Incremantal search
- [x] Magnifing glass

##### zig_imcolortextedit
---
[zig_imcolortextedit](examples/zig_imcolortextedit/src/main.zig)

##### zig_imguizmo
---
[zig_imguizmo](examples/zig_imguizmo/src/main.zig)

##### zig_imnodes
---
[zig_imnodes](examples/zig_imnodes/src/main.zig)

##### zig_implot / zig_implot3d
---
[zig_implot](examples/zig_implot/src/main.zig) / [zig_implot3d](examples/zig_implot3d/src/main.zig)
[zig_imPlotDemo](examples/zig_imPlotDemo/src/demoAll.zig) written in Zig.


##### Image load / save (OpenGL, SDL3, SDL3GPU)
---
| Language | GLFW | Magnifing glass | Image load /save |
|:---------:|---------------------------------------------------------------------------------:|:---------------:|:----------------:|
| C lang. | [glfw_opengl3_image_load](examples/glfw_opengl3_image_load) | - | Y |
| C lang. | [glfw_opengl3_image_save](examples/glfw_opengl3_image_save) | - | Y |
| Zig lang. | [zig_glfw_opengl3_image_load](examples/zig_glfw_opengl3_image_load/src/main.zig) | Y | Y |
| Zig lang. | [zig_sdl3_sdlgup3](examples/zig_sdl3_sdlgpu3/src/main.zig) | - | load |
- [x] Image file captured will be saved in current folder.
- [x] Image format can be selected from `JPEG / PNG / BMP / TGA`.

##### zig_glfw_opengl3
---
- [x] Basic example
| Language | GLFW | SDL3 |
|:---------:|-----------------------------------------------------------------------------------:|-----------------------------------------------------------:|
| C lang. | [glfw_opengl3](examples/glfw_opengl3), [glfw_opengl3_jp](examples/glfw_opengl3_jp) | [sdl3_opengl3](examples/sdl3_opengl3) |
| Zig lang. | [zig_glfw_opengl3](examples/zig_glfw_opengl3/src/main.zig) | [zig_sdl3_opengl3](examples/zig_sdl3_opengl3/src/main.zig) |
 
#### Hiding console window
---
- Zig lang. examples
Open `build.zig` in each example folder and **enable** option line as follows,
```zig
... snip ...
exe.subsystem = .Windows; // Hide console window
... snip ...
```
and execute `make`.
- C lang. examples
Open `Makefile` in each example folder and **change** option as follows,
```Makefile
... snip ...
HIDE_CONSOLE_WINDOW = true
... snip ...
```
and execute `make`.
#### SDL libraries
---
https://github.com/libsdl-org/SDL
https://github.com/libsdl-org/SDL/releases
#### My tools version
---
- gcc.exe (Rev2, Built by MSYS2 project) 15.2.0
- make: GNU Make 4.4.1
- Python 3.12.10
#### Similar project ImGui / CImGui
---
| Language | | Project |
| -------------------: | :---: | :----------------------------------------------------------------: |
| **Lua** | Script | [LuaJITImGui](https://github.com/dinau/luajitImGui) |
| **NeLua** | Compiler | [NeLuaImGui](https://github.com/dinau/neluaImGui) |
| **Nim** | Compiler | [ImGuin](https://github.com/dinau/imguin), [Nimgl_test](https://github.com/dinau/nimgl_test), [Nim_implot](https://github.com/dinau/nim_implot) |
| **Python** | Script | [DearPyGui for 32bit WindowsOS Binary](https://github.com/dinau/DearPyGui32/tree/win32) |
| **Ruby** | Script | [igRuby_Examples](https://github.com/dinau/igruby_examples) |
| **Zig**, C lang. | Compiler | [Dear_Bindings_Build](https://github.com/dinau/dear_bindings_build) |
| **Zig** | Compiler | [ImGuinZ](https://github.com/dinau/imguinz) |
#### SDL game tutorial Platfromer
---

| Language | | SDL | Project |
| -------------------: | :---: | :---: | :----------------------------------------------------------------: |
| **LuaJIT** | Script | SDL2 | [LuaJIT-Platformer](https://github.com/dinau/luajit-platformer)
| **Nelua** | Compiler | SDL2 | [NeLua-Platformer](https://github.com/dinau/nelua-platformer)
| **Nim** | Compiler | SDL3 / SDL2 | [Nim-Platformer-sdl2](https://github.com/def-/nim-platformer)/ [Nim-Platformer-sdl3](https://github.com/dinau/sdl3_nim/tree/main/examples/platformer) |
| **Ruby** | Script | SDL3 | [Ruby-Platformer](https://github.com/dinau/ruby-platformer) |
| **Zig** | Compiler | SDL3 / SDL2 | [Zig-Platformer](https://github.com/dinau/zig-platformer) |