SVI f5825b7a0e Добавление вендоринга 3 vuotta sitten
..
.gitignore f5825b7a0e Добавление вендоринга 3 vuotta sitten
.go.mod.swp f5825b7a0e Добавление вендоринга 3 vuotta sitten
Assert.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
BackendFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
CONTRIBUTING.md f5825b7a0e Добавление вендоринга 3 vuotta sitten
ColorEditFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
ColorPickerFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
ComboFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Conditions.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
ConfigFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Context.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
DragDrop.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
DragDropWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
DragDropWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawCommand.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawCommandWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawCommandWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawData.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawDataWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawDataWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawList.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawListWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
DrawListWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
FocusFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Font.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontAtlas.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontAtlasWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontAtlasWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontConfig.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontConfigWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontConfigWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontGlyphRangesBuilderWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontGlyphRangesBuilderWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontGlyphRnagesBuilder.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
FontWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
GlyphRanges.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
HoveredFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
IO.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
IOWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
IOWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
InputText.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
InputTextCallbackDataWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
InputTextCallbackDataWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
Keys.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
LICENSE.txt f5825b7a0e Добавление вендоринга 3 vuotta sitten
ListClipper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
ListClipper.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
ListClipper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
MouseCursorFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
PlatformGlfw.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
PlatformInterface.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
README.md f5825b7a0e Добавление вендоринга 3 vuotta sitten
RendererInterface.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
RendererOpenGL3.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
SelectableFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Style.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
StyleWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
StyleWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
TabBarFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
TabItemFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Table.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
Table.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Table.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextEditor.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextEditor.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextEditor.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextEditorWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextEditorWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
TextureID.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
TreeNodeFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
Vectors.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
WindowFlags.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
WrapperConverter.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
WrapperConverter.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
WrapperConverter.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
doc.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
imconfig.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imguiWrappedHeader.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imguiWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imguiWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imguiWrapperTypes.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_demo.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_draw.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_internal.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_markdown.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_markdown.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_markdown_wrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_markdown_wrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_memory_editor.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_memory_editor.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_memory_editor_wrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_memory_editor_wrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_tables.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imgui_widgets.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodes.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodes.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodes.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodesWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodesWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imnodes_internal.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot.go f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
implotWrapper.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
implotWrapper.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
implotWrapperTypes.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot_demo.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot_internal.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
implot_items.cpp f5825b7a0e Добавление вендоринга 3 vuotta sitten
imstb_rectpack.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imstb_textedit.h f5825b7a0e Добавление вендоринга 3 vuotta sitten
imstb_truetype.h f5825b7a0e Добавление вендоринга 3 vuotta sitten

README.md

Dear ImGui for Go

Go Doc Go Report Card GolangCI

This library is a Go wrapper for Dear ImGui.

This wrapper started as a special-purpose wrapper for use within InkyBlackness. However, it is self-contained and can be used for other purposes as well.

This wrapper is

  • hand-crafted, for Go
  • documented
  • versioned
  • with ported examples in a separate repository (see below)

Screenshot from example

API naming

Names of types and functions follow closely those of Dear ImGui.

For functions that have optional parameters, the following schema is applied:

  • There is the "verbose" variant, followed by the letter V, such as ButtonV(id string, size Vec2) bool
  • Next to it there is the "idiomatic" variant, without any optional parameter, such as Button(id string) bool.
  • The idiomatic variant calls the verbose variant with the default values for the optional parameters. Functions that don't have optional parameters don't come in a verbose variant.

The Dear ImGui functions IO() and Style() have been renamed to be CurrentIO() and CurrentStyle(). This was done because their returned types have the same name, causing a name clash. With the Current prefix, they also better describe what they return.

API philosophy

This library does not intend to export all the functions of the wrapped Dear ImGui. The following filter applies as a rule of thumb:

  • Functions marked as "obsolete" are not available. (The corresponding C code isn't even compiled - disabled by define)
  • "Shortcut" Functions, which combine language features and/or other Dear ImGui functions, are not available. Prime example are the Text*() functions for instance: Text formatting should be done with fmt.Sprintf(), and style formatting with the corresponding Push/Pop functions.
  • Functions that are not needed by InkyBlackness are ignored. This doesn't mean that they can't be in the wrapper, they are simply not a priority. Feel free to propose an implementation or make a pull request, respecting the previous points :)

Version philosophy

This library does not mirror the versions of the wrapped Dear ImGui. The semantic versioning of this wrapper is defined as:

  • Major changes: (Breaking) changes in API or behaviour. Typically done through changes in Dear ImGui.
  • Minor changes: Extensions in API. Typically done through small version increments of Dear ImGui and/or exposing further features in a compatible way.
  • Patch changes: Bug fixes - either in the wrapper or the wrapped Dear ImGui, given that the API & behaviour remains the same.

At the moment, this library uses version 1.79 of Dear ImGui.

Examples

A separate repository was created to host ported examples and reference implementations. See repository inkyblackness/imgui-go-examples.

It contains reference implementations for libraries such as GLFW3 and SDL2, using OpenGL.

The screenshot above was created with such an example.

Extras

FreeType font rendering

If the FreeType library is available for your platform, you can enable using it with the build tag imguifreetype - as in

go build -tags="imguifreetype"

This extra is based on the reference implementation from Dear ImGui.

This allows you to use the function FontAtlas.BuildWithFreeType(). If the build tag is not set, this function will always return an error.

If you set the build tag, yet the corresponding support has not been added to the library, you will receive a build error. Contributions to support more build environments are happily accepted. See files FreeTypeEnabled*.go.

Alternatives

Before this project was created, the following alternatives were considered - and ignored:

  • kdrag0n/go-imgui (no longer available). Reasons for dismissal at time of decision:
    • Auto-generated bloat, which doesn't help
    • Was using old API (1.5x)
    • Did not compile
    • Project appeared to be abandoned
  • Extrawurst/cimgui. Reasons for dismissal at time of decision:
    • Was using old API (1.5x), 1.6x was attempted
    • Apparently semi-exposed the C++ API, especially through the structures
    • Adding this adds another dependency

License

The project is available under the terms of the New BSD License (see LICENSE file). The licenses of included sources are stored in the _licenses folder.