Git Product home page Git Product logo

imgui-rs's Introduction

imgui-rs: Rust bindings for Dear ImGui 1.80 for arcdps addons

Wrapped Dear ImGui Version

This is a fork

Addons for arcdps are restricted to an older version of Dear ImGui. This is a fork of imgui-rs 0.8.0 that is compatible with Dear ImGui 1.80 intended for use by arcdps addons.

Changes

  • Allows Ui object creation from context for the arcdps rust wrapper
  • Downgrade to Dear ImGui 1.80 (current version used by arcdps)
    • APIs that require newer versions of ImGui are removed (mainly the disable API)
  • Cherry-picked some important fixes from imgui-rs >0.8.0, mostly related to the input_text widget not resizing the buffer correctly and segfaulting.
  • Text input callback API (character filters) was changed to support 16bit chars, as the arcdps ImGui version does not enable 32bit character support.

Original README

Hello world

Window::new("Hello world")
    .size([300.0, 100.0], Condition::FirstUseEver)
    .build(&ui, || {
        ui.text("Hello world!");
        ui.text("こんにちは世界!");
        ui.text("This...is...imgui-rs!");
        ui.separator();
        let mouse_pos = ui.io().mouse_pos;
        ui.text(format!(
            "Mouse Position: ({:.1},{:.1})",
            mouse_pos[0], mouse_pos[1]
        ));
    });

Main library crates

  • imgui: High-level safe API
  • imgui-winit-support: Backend platform implementation that uses the winit crate (latest by default, but earlier versions are supported via feature flags)
  • imgui-glow-renderer: Renderer implementation that uses the imgui crate
  • imgui-glium-renderer: Renderer implementation that uses the glium crate
  • imgui-sys: Low-level unsafe API (automatically generated)

Additionally, the following are no longer maintained, but might work still:

  • imgui-gfx-renderer: Renderer implementation that uses the gfx crate (not the new gfx-hal crate)

Features

  • Bindings for Dear ImGui that can be used with safe Rust. Note: API coverage is not 100%, but will keep improving over time.
  • Builder structs for use cases where the original C++ library uses optional function parameters
  • Easy integration with glow/ glium
  • Easy integration with winit (backend platform)
  • Optional support for the freetype font rasterizer

Minimum Support Rust Version (MSRV)

The MSRV for imgui-rs and all of the backend crates is 1.54. We update our MSRV periodically, and issue a minor bump for it.

Choosing a backend platform and a renderer

Almost every application that uses imgui-rs needs two additional components in addition to the main imgui crate: a backend platform, and a renderer.

The backend platform is responsible for integrating imgui-rs with the operating system and its window management. Its responsibilities include the following:

  • Handling input events (e.g. keyboard, mouse) and updating imgui-rs state accordingly
  • Passing information about the OS window (e.g. size, DPI factor) to imgui-rs
  • Updating the OS-side mouse cursor when imgui-rs requests it

The renderer is responsible for taking generic, renderer-agnostic draw lists generated by imgui-rs, and rendering them using some graphics API. Its responsibilities include the following:

  • Rendering using vertex/index buffers and command lists
  • Handling of DPI factors and scissor rects
  • Texture management

The most tested platform/renderer combination is imgui-glium-renderer + glium + imgui-winit-support + winit, but this is not the only possible combination. There's also imgui-glow-renderer, which will increasingly replace glium, and you can find additional 3rd party crates that provide a wider support for more libraries (e.g. raw OpenGL, SDL2). You can also write your own support code if you have a more advanced use case, because imgui-rs is not tied to any specific graphics / OS API.

Compiling and running the demos

git clone https://github.com/imgui-rs/imgui-rs
cd imgui-rs
git submodule update --init --recursive

Main examples are located in the imgui-examples directory.

# At the reposity root
cd imgui-examples
cargo test

cargo run --example hello_world
cargo run --example test_window
cargo run --example test_window_impl

Examples for the gfx backend are under the imgui-gfx-examples directory.

cd imgui-gfx-examples
cargo test

cargo run --example gfx_hello_world
cargo run --example gfx_test_window

Note to Windows users: You will need to use the MSVC ABI version of the Rust compiler along with its associated dependencies to build this libary and run the examples.

How to contribute

  1. Change or add something

  2. Make sure you're using the latest stable Rust

  3. Run rustfmt to guarantee code style conformance

    rustup component add rustfmt
    cargo fmt
  4. Open a pull request in Github

License

Licensed under either of

at your option.

Uses Dear ImGui and cimgui.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

imgui-rs's People

Contributors

gekkio avatar malikolivier avatar sanbox-irl avatar thomcc avatar dbr avatar sejsel avatar bitshifter avatar bjadamson avatar spacemaniac avatar orhanbalci avatar agersant avatar brendanzab avatar keyboarddanni avatar shockham avatar aloucks avatar michelson avatar tangmi avatar dzil123 avatar twinklebear avatar aclysma avatar repi avatar jms55 avatar michaelfairley avatar palmr avatar informationsea avatar jasper-bekkers avatar dependabot-preview[bot] avatar willemv avatar shadowice avatar lymia avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.