-
-
Notifications
You must be signed in to change notification settings - Fork 5
C API development
The C API is developed as an additional API on top of the existing C++ API. They don't differ in many ways. This page lists common differences and dealing with them.
Where a namespace or class name may appear, the C++ ::
access operator is replaced by _
, as C doesn't have support
for namespaces and classes.
For example, UImGui::Window::Platform::setWindowAlwaysOnTop()
will become
UImGui_Window_Platform_setWindowAlwaysOnTop()
in the C API.
The C API defines the UImGui_FVector2
, UImGui_FVector
and UImGui_FVector4
types. These types define geometrical
vectors of floats
. The C++ API actually uses a typedef
to FVector2
, FVector
and FVector4
from the C types,
under the UImGui
namespace.
The FString
type is not available in the C API, as templates are not a feature of C. Because of this, we're forced
to only use UImGui_String
for C string representations and char*
for mutable character arrays. UImGui_String
is
defined as String
in the UImGui
namespace when using the C++ API
Some classes/structs with member functions may have a custom data-only C adapter struct. This struct is then passed to the C alternatives of the same member functions to manipulate the data. Here is a C++ example:
struct doStuffWithMembers
{
size_t num1;
size_t num2;
void f();
void g();
};
This struct can then be converted to a C one like this:
struct doStuffWithMembersC
{
size_t num1;
size_t num2;
};
void doStuffWithMembersC_f(doStuffWithMembersC* data);
void doStuffWithMembersC_g(doStuffWithMembersC* data);
Now, using the struct in both the C++ and C way:
// C++
doStuffWithMembers cppStruct = { 0, 1 };
cppStruct.f();
cppStruct.g();
// C
doStuffWithMembersC cStruct = { 0, 1 };
doStuffWithMembersC_f(&cStruct);
doStuffWithMembersC_g(&cStruct)
This is a really common pattern used in places like the Texture
and Monitor
C APIs.
The C API for dear imgui we use is based on dear_bindings. Differences in code formatting are listed here.
To use the dear imgui C API, include #include <cimgui/cimgui.h>
in your code.
Caution
The C++ and C imgui APIs should NOT be included together, as that will cause hundreds of type redefinition compiler errors.
Some dear imgui widget modules also have a C API. Refer to individual module pages for further instructions.
This project is supported by all the people who joined our discord server and became beta testers. If you want to join the discord you can click here.
- Home
- Beginner content
- Install guide
- Creating and using the UI components
- The Instance
- The Init Info struct
- Textures
- Logging
- Unicode support
- Additional features
- Client-side bar
- Custom type definitions
- Memory management
- C API development
- Config files and Folders
- Interfaces
- Internal Event safety
- Customising the build system
- Modules system
- Collaborating with others
- Advanced content
- Developer and contributor resources
- Misc