Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 21 additions & 13 deletions .github/workflows/update-upstream.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ jobs:
set -euo pipefail
bash -n scripts/update_upstream.sh
python3 scripts/test_update_whitespace.py
python3 scripts/test_publish_generated_branch.py
variant=$(tr -d '[:space:]' < UPSTREAM_VARIANT)
scripts/update_upstream.sh "$variant" --check-only
git diff --exit-code
Expand Down Expand Up @@ -193,30 +194,37 @@ jobs:
echo 'No generated changes to propose.'
exit 0
fi
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git switch -c "$UPDATE_BRANCH"
git commit -m "Update $VARIANT ImGui and ImPlot bindings"
remote_ref="refs/heads/$UPDATE_BRANCH"
remote_sha=$(git ls-remote origin "$remote_ref" | awk '{print $1}')
if [[ -n "$remote_sha" ]]; then
existing=$(gh pr list --base "$BASE_BRANCH" --head "$UPDATE_BRANCH" \
--state open --json number --jq '.[0].number // empty')
[[ -n "$existing" ]] || {
echo "Refusing to replace $remote_ref without an open update PR." >&2
exit 1
}
git push --force-with-lease="$remote_ref:$remote_sha" origin "HEAD:$remote_ref"
echo "Updated PR #$existing"
else
git push origin "HEAD:$remote_ref"
if [[ -z "$existing" ]]; then
git fetch --no-tags origin "$remote_ref"
[[ $(git rev-parse FETCH_HEAD) == "$remote_sha" ]] || exit 1
[[ $(git write-tree) == $(git rev-parse 'FETCH_HEAD^{tree}') ]] || {
echo "Refusing to replace $remote_ref without an open update PR." >&2
exit 1
}
fi
fi
before=$(git rev-parse HEAD)
python3 scripts/publish_generated_branch.py "$UPDATE_BRANCH" "Update $VARIANT ImGui and ImPlot bindings"
pushed=false
if [[ $(git rev-parse HEAD) != "$before" ]]; then pushed=true; fi
# Even after a no-op push, recover a missing PR without editing an existing one.
existing=$(gh pr list --base "$BASE_BRANCH" --head "$UPDATE_BRANCH" \
--state open --json number --jq '.[0].number // empty')
created=false
if [[ -z "$existing" ]]; then
gh pr create --draft --base "$BASE_BRANCH" --head "$UPDATE_BRANCH" \
--title "Update $VARIANT ImGui and ImPlot bindings" \
--body "Automated upstream refresh for the $VARIANT variant. cimgui: $(git -C cimgui rev-parse HEAD); cimplot: $(git -C cimplot rev-parse HEAD). Generated V bindings and native sources must pass CI and receive human review before merge."
created=true
fi
# A repository-token PR needs explicit CI dispatch. A personal token
# already triggers PR checks, so do not duplicate them.
if [[ "$DISPATCH_CI" == true ]]; then
if [[ "$DISPATCH_CI" == true && ( "$pushed" == true || "$created" == true ) ]]; then
for workflow in demo-release.yml mobile-native.yml application-accessibility.yml portable-tooling.yml; do
gh workflow run "$workflow" --ref "$UPDATE_BRANCH"
done
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ This repository supports both official Dear ImGui lines:
multi-viewport support while retaining the normal Dear ImGui API.
- The `standard` branch tracks Dear ImGui's smaller standard line.

Both currently track Dear ImGui `1.92.9b`. The `b` is an upstream patch-level
suffix shared by the release; it does not identify the docking variant. Check
The standard line tracks Dear ImGui `1.93.0`; the docking line remains on
`1.92.9b` until its upstream generated docking API is ready. See
[Migrating to 1.93](docs/migrating-1.93.md) before upgrading a consumer.
The `b` is an upstream patch-level suffix, not a docking marker. Check
`UPSTREAM_VARIANT` in a checkout to see which line its generated bindings and
native sources use. Do not mix a generated binding from one line with a native
library built from the other.
Expand All @@ -58,8 +60,8 @@ and secondary-viewport rendering helpers become safe no-ops there.
The setup and build tooling uses V, CMake, Git and a C/C++ toolchain. Python,
Rust and Cargo are not required.

`v install antono2.vulkan@v2.0.0`<br>
`v install antono2.glfw`
Run `v install` in this checkout to install the tested dependency versions from
[`v.mod`](v.mod). Keep those pins aligned with `compatibility.json`.

## Install
```bash
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.92.9b
1.93.0
45 changes: 45 additions & 0 deletions docs/migrating-1.93.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Dear ImGui 1.93 standard bindings

`v0.4.0-standard` updates the **standard** variant to Dear ImGui 1.93.0.
It is an API/ABI update, not a drop-in native-library replacement. The docking
variant remains on 1.92.9b; do not switch variants or reuse its native library
implicitly.

```sh
v install antono2.imgui@v0.4.0-standard
cd ~/.vmodules/antono2/imgui
v install
v run build_vimgui.vsh --linkage shared --glfw system
```

Rebuild your application and its native libraries together. Do not mix old
generated V structures with a new `libvimgui`, or the reverse.

Notable source changes include:

- `ImDrawListFlags`/`ImDrawListFlags_` are replaced by the new draw flags API.
- Draw-list methods such as `im_draw_list_add_line` and
`im_draw_list_add_circle` gain an explicit flags argument. Review the new
signature and desired stroke/cap/join behavior rather than copying old bits.
- `Style.AntiAliasedLinesUseTex` is removed because the new line renderer
always uses textures. `AntiAliasedLineEnds` controls line-ending anti-aliasing;
it is not a replacement texture toggle.
- `CurveTessellationTol` used squared-pixel units; `CurveTessellationMaxError`
uses pixels. Convert a customized old threshold with `sqrt(old_threshold)`
rather than copying the old value unchanged.
- Font remapping uses `im_font_add_remap_codepoint` instead of
`im_font_add_remap_char`.
- Text-filter, draw-list and other generated structures have changed layouts.
Treat fixed-array helper aliases as generated implementation details.

These are highlights, not a complete API diff. Compare `imgui.v`,
`implot/implot.v` and the bundled upstream changelog for APIs your project uses.
Update the generator/normalizer when a binding fix is needed; never patch
generated declarations independently of their matching C API.

Consumers using only the unchanged widget/frame/backend calls may need no
source edits, but still need a rebuilt native library, installation checks and
runtime validation. `v_vulkan_video --imgui-demo` exercises actual UI rendering
and input over hardware video playback; the examples cover GLFW/Vulkan,
widgets, native application UI and ImPlot. Docking and platform-viewports
helpers remain safe no-ops on the standard variant.
Loading
Loading