mesa/bin/imgui-update.py
Konstantin Seurer 3238b17b28 tools: Update imgui to the docking branch and add backends
RTI will use docking with sdl3+vulkan.

Reviewed-by: Natalie Vock <natalie.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41806>
2026-06-21 17:10:43 +00:00

77 lines
2.8 KiB
Python
Executable file

#!/usr/bin/env python3
import argparse
import base64
import pathlib
import requests
import subprocess
import typing
def error(msg: str) -> None:
print('\033[31m' + msg + '\033[0m')
class Source:
def __init__(self, filename: str, url: typing.Optional[str],
template: typing.Optional[str] = None, remove:
typing.Optional[str] = None):
self.file = pathlib.Path(filename)
self.url = url
self.template = template
self.remove = remove
def sync(self) -> None:
if self.url is None:
return
print('Syncing {}...'.format(self.file), end=' ', flush=True)
req = requests.get(self.url)
if not req.ok:
error('Failed to retrieve file: {} {}'.format(req.status_code, req.reason))
return
content = req.content
content = str(content, encoding='utf-8')
if self.remove is not None:
content = content.replace(self.remove, '')
if self.template is not None:
content = self.template % content
with open(self.file, 'w') as f:
f.write(content)
print('Done')
# rtinspector needs the docking branch of imgui
BASE_URL = 'https://raw.githubusercontent.com/ocornut/imgui/refs/heads/docking'
SOURCES = [
Source('src/imgui/backends/imgui_impl_sdl3.cpp', f'{BASE_URL}/backends/imgui_impl_sdl3.cpp'),
Source('src/imgui/backends/imgui_impl_sdl3.h', f'{BASE_URL}/backends/imgui_impl_sdl3.h'),
Source('src/imgui/backends/imgui_impl_vulkan.cpp', f'{BASE_URL}/backends/imgui_impl_vulkan.cpp'),
Source('src/imgui/backends/imgui_impl_vulkan.h', f'{BASE_URL}/backends/imgui_impl_vulkan.h'),
Source('src/imgui/imconfig.h', f'{BASE_URL}/imconfig.h'),
Source('src/imgui/imgui.cpp', f'{BASE_URL}/imgui.cpp'),
Source('src/imgui/imgui.h', f'{BASE_URL}/imgui.h'),
Source('src/imgui/imgui_draw.cpp', f'{BASE_URL}/imgui_draw.cpp'),
Source('src/imgui/imgui_internal.h', f'{BASE_URL}/imgui_internal.h'),
Source('src/imgui/imgui_tables.cpp', f'{BASE_URL}/imgui_tables.cpp'),
Source('src/imgui/imgui_widgets.cpp', f'{BASE_URL}/imgui_widgets.cpp'),
Source('src/imgui/imstb_rectpack.h', f'{BASE_URL}/imstb_rectpack.h'),
Source('src/imgui/imstb_textedit.h', f'{BASE_URL}/imstb_textedit.h'),
Source('src/imgui/imstb_truetype.h', f'{BASE_URL}/imstb_truetype.h'),
]
if __name__ == '__main__':
git_toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel'],
stderr=subprocess.DEVNULL).decode("ascii").strip()
if not pathlib.Path(git_toplevel).resolve() == pathlib.Path('.').resolve():
error('Please run this script from the root folder ({})'.format(git_toplevel))
exit(1)
for source in SOURCES:
source.sync()