Files
cimgui/README.md

99 lines
7.3 KiB
Markdown
Raw Normal View History

2019-08-01 18:37:28 +02:00
# cimgui [![Build Status](https://travis-ci.org/cimgui/cimgui.svg?branch=master)](https://travis-ci.org/cimgui/cimgui)
2015-04-08 09:04:53 +02:00
This is a thin c-api wrapper programmatically generated for the excellent C++ immediate mode gui [Dear ImGui](https://github.com/ocornut/imgui).
2019-02-15 11:17:51 +01:00
All imgui.h functions are programmatically wrapped.
Generated files are: `cimgui.cpp`, `cimgui.h` for C compilation. Also for helping in bindings creation, `definitions.lua` with function definition information and `structs_and_enums.lua`.
This library is intended as a intermediate layer to be able to use Dear ImGui from other languages that can interface with C (like D - see [D-binding](https://github.com/Extrawurst/DerelictImgui))
2015-04-09 15:45:19 +02:00
2018-10-08 11:36:10 +02:00
History:
Initially cimgui was developed by Stephan Dilly as hand-written code but lately turned into an auto-generated version by sonoro1234 in order to keep up with imgui more easily (letting the user select the desired branch and commit)
2015-04-21 23:56:15 +02:00
Notes:
2020-06-29 19:06:28 +02:00
* currently this wrapper is based on version [1.77 docking of Dear ImGui with internal api]
2020-03-28 13:32:44 +01:00
* only functions, structs and enums from imgui.h (an optionally imgui_internal.h) are wrapped.
2020-04-17 11:11:38 +02:00
* if you are interested in imgui implementations you should look [LuaJIT-ImGui](https://github.com/sonoro1234/LuaJIT-ImGui) project.
2020-03-28 13:32:44 +01:00
* All naming is algorithmic except for those names that were coded in cimgui_overloads table (https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60). In the official version this table is empty.
* Current overloaded function names can be found in (https://github.com/cimgui/cimgui/blob/master/generator/output/overloads.txt)
2015-04-09 15:45:19 +02:00
2018-08-24 18:54:46 +02:00
# compilation
2018-10-08 11:36:10 +02:00
* clone
* git clone --recursive https://github.com/cimgui/cimgui.git
* git submodule update
2018-10-08 13:44:43 +02:00
* compile
* using makefile on linux/macOS/mingw (Or use CMake to generate project)
2020-03-28 18:09:51 +01:00
* or as in https://github.com/sonoro1234/LuaJIT-ImGui/tree/master/build
2018-08-24 18:54:46 +02:00
2018-10-08 13:44:43 +02:00
# using generator
2018-06-20 20:12:49 +02:00
* this is only needed (before compilation) if you want an imgui version different from the one provided, otherwise generation is already done.
2018-10-08 11:36:10 +02:00
* you will need LuaJIT (https://github.com/LuaJIT/LuaJIT.git better 2.1 branch) or precompiled for linux/macOS/windows in https://luapower.com/luajit/download
2020-04-14 11:05:52 +02:00
* you need to use also a C++ compiler for doing preprocessing: gcc (In windows MinGW-W64-builds for example), clang or cl (MSVC). (this repo was done with gcc)
* update `imgui` folder to the version you desire.
2020-04-14 11:05:52 +02:00
* edit `generator/generator.bat` on windows, or `generator/generator.sh` on linux, to choose between gcc, clang, or cl and to choose desired implementations and whether imgui_internal is generated or not.
2020-03-28 13:32:44 +01:00
* edit config_generator.lua for adding includes needed by your chosen implementations (vulkan needs that).
* Run generator.bat or generator.sh with gcc, clang or cl and LuaJIT on your PATH.
2018-10-08 13:44:43 +02:00
* as a result some files are generated: `cimgui.cpp` and `cimgui.h` for compiling and some lua/json files with information about the binding: `definitions.json` with function info, `structs_and_enums.json` with struct and enum info, `impl_definitions.json` with functions from the implementations info.
# generate binding
* C interface is exposed by cimgui.h when you define CIMGUI_DEFINE_ENUMS_AND_STRUCTS
2018-10-13 13:56:11 +02:00
* with your prefered language you can use the lua or json files generated as in:
2020-03-28 18:09:51 +01:00
* https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/build.bat (with lua code generation in https://github.com/sonoro1234/LuaJIT-ImGui/blob/master/lua/class_gen.lua)
2018-10-08 13:28:50 +02:00
* https://github.com/mellinoe/ImGui.NET/tree/autogen/src/CodeGenerator
2018-10-10 14:05:08 +02:00
### definitions description
* It is a collection in which key is the cimgui name that would result without overloadings and the value is an array of overloadings (may be only one overloading)
* Each overloading is a collection. Some relevant keys and values are:
* stname : the name of the struct the function belongs to (will be "" if it is top level in ImGui namespace)
2018-10-10 14:05:08 +02:00
* ov_cimguiname : the overloaded cimgui name (if absent it would be taken from cimguiname)
* cimguiname : the name without overloading (this should be used if there is not ov_cimguiname)
* ret : the return type
2020-01-01 11:39:02 +00:00
* retref : is set if original return type is a reference. (will be a pointer in cimgui)
* argsT : an array of collections (each one with type: argument type and name: the argument name, when the argument is a function pointer also ret: return type and signature: the function signature)
2018-10-20 17:32:22 +02:00
* args : a string of argsT concatenated and separated by commas
* call_args : a string with the argument names separated by commas for calling imgui function
2018-10-10 14:05:08 +02:00
* defaults : a collection in which key is argument name and value is the default value.
* manual : will be true if this function is hand-written (not generated)
2020-01-01 11:39:02 +00:00
* isvararg : is set if some argument is a vararg
* constructor : is set if the function is a constructor for a class
* destructor : is set if the function is a destructor for a class
* templated : is set if the function belongs to a templated class (ImVector)
* templatedgen: is set if the function belongs to a struct generated from template (ImVector_ImWchar)
2020-03-28 13:32:44 +01:00
* nonUDT : if present the original function was returning a user defined type so that signature has been changed to accept a pointer to the UDT as first argument.
2020-06-05 17:58:27 +02:00
* location : name of the header file this function comes from. (imgui, internal, imgui_impl_xxx)
2018-10-10 14:23:41 +02:00
### structs_and_enums description
* Is is a collection with two items:
* under key enums we get the enums collection in which each key is the enum tagname and the value is an array of the ordered values represented as a collection with keys
* name : the name of this enum value
* value : the C string
* calc_value : the numeric value corresponding to value
* under key structs we get the structs collection in which the key is the struct name and the value is an array of the struct members. Each one given as a collection with keys
* type : the type of the struct member
2018-10-14 17:51:10 +02:00
* template_type : if type has a template argument (as ImVector) here will be
2018-10-10 14:23:41 +02:00
* name : the name of the struct member
* size : the number of array elements (when it is an array)
* bitfield : the bitfield width (in case it is a bitfield)
2018-08-24 18:56:52 +02:00
# usage
2015-04-09 15:45:19 +02:00
2015-07-25 20:20:33 +02:00
* use whatever method is in ImGui c++ namespace in the original [imgui.h](https://github.com/ocornut/imgui/blob/master/imgui.h) by prepending `ig`
2015-04-09 15:45:19 +02:00
* methods have the same parameter list and return values (where possible)
2018-08-24 18:54:46 +02:00
* functions that belong to a struct have an extra first argument with a pointer to the struct.
2020-03-28 13:32:44 +01:00
* where a function returns UDT (user defined type) by value some compilers complain so the function is generated accepting a pointer to the UDT type as the first argument (or second if belongs to a struct).
2017-06-03 01:48:55 +02:00
# example bindings based on cimgui
* [DerelictImgui](https://github.com/Extrawurst/DerelictImgui)
* [ImGui.NET](https://github.com/mellinoe/ImGui.NET)
2018-08-31 09:09:17 +02:00
* [ImGuiCS](https://github.com/conatuscreative/ImGuiCS)
2017-06-03 01:48:55 +02:00
* [imgui-rs](https://github.com/Gekkio/imgui-rs)
2017-08-31 17:10:30 +02:00
* [imgui-pas](https://github.com/dpethes/imgui-pas)
2018-10-13 13:08:30 +02:00
* [odin-imgui](https://github.com/ThisDrunkDane/odin-imgui)
2020-04-17 11:11:38 +02:00
* [LuaJIT-ImGui](https://github.com/sonoro1234/LuaJIT-ImGui)
# C examples based on cimgui
* [sdl2-cimgui-demo](https://github.com/haxpor/sdl2-cimgui-demo)
* [cimgui_c_sdl2_example](https://github.com/canoi12/cimgui_c_sdl2_example/)
* [cimgui-c-example](https://github.com/peko/cimgui-c-example) with GLFW