From cfa032b789662f77e75020c1e1de51a430a5dbb3 Mon Sep 17 00:00:00 2001 From: Mason Remaley Date: Sun, 7 Sep 2025 17:22:36 -0700 Subject: [PATCH] More binding fixes after update --- build.zig.zon | 6 +- src/cached/dcimgui_impl_sdl3.cpp | 82 +++ src/cached/dcimgui_impl_sdl3.h | 67 ++ src/cached/dcimgui_impl_sdl3.json | 646 ++++++++++++++++++ src/cached/dcimgui_impl_sdl3_imconfig.json | 7 + src/generate.zig | 104 +-- src/templates/impl_vulkan_prefix.zig.template | 8 + 7 files changed, 864 insertions(+), 56 deletions(-) create mode 100644 src/cached/dcimgui_impl_sdl3.cpp create mode 100644 src/cached/dcimgui_impl_sdl3.h create mode 100644 src/cached/dcimgui_impl_sdl3.json create mode 100644 src/cached/dcimgui_impl_sdl3_imconfig.json diff --git a/build.zig.zon b/build.zig.zon index 3539b57..13ee44c 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -5,10 +5,8 @@ .minimum_zig_version = "0.15.1", .dependencies = .{ .@"dear-imgui" = .{ - // XXX: ... - // .url = "https://github.com/ocornut/imgui/archive/refs/tags/v1.92.2b-docking.tar.gz", - // .hash = "N-V-__8AAPZKeQDWGL4ckVmICNUMMWIikMKny4fQHvs2tCFh", - .path = "../imgui", + .url = "https://github.com/ocornut/imgui/archive/refs/tags/v1.92.2b-docking.tar.gz", + .hash = "N-V-__8AAPZKeQDWGL4ckVmICNUMMWIikMKny4fQHvs2tCFh", }, .@"Vulkan-Headers" = .{ .url = "https://github.com/KhronosGroup/Vulkan-Headers/archive/refs/tags/v1.4.313.tar.gz", diff --git a/src/cached/dcimgui_impl_sdl3.cpp b/src/cached/dcimgui_impl_sdl3.cpp new file mode 100644 index 0000000..5bbdbe8 --- /dev/null +++ b/src/cached/dcimgui_impl_sdl3.cpp @@ -0,0 +1,82 @@ +// THIS FILE HAS BEEN AUTO-GENERATED BY THE 'DEAR BINDINGS' GENERATOR. +// **DO NOT EDIT DIRECTLY** +// https://github.com/dearimgui/dear_bindings + +#include "imgui.h" +#include "imgui_impl_sdl3.h" + +#include + +// Wrap this in a namespace to keep it separate from the C++ API +namespace cimgui +{ +#include "dcimgui_impl_sdl3.h" +} + +// By-value struct conversions + +// Function stubs + +#ifndef IMGUI_DISABLE + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForOpenGL(cimgui::SDL_Window* window, void* sdl_gl_context) +{ + return ::ImGui_ImplSDL3_InitForOpenGL(reinterpret_cast<::SDL_Window*>(window), sdl_gl_context); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForVulkan(cimgui::SDL_Window* window) +{ + return ::ImGui_ImplSDL3_InitForVulkan(reinterpret_cast<::SDL_Window*>(window)); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForD3D(cimgui::SDL_Window* window) +{ + return ::ImGui_ImplSDL3_InitForD3D(reinterpret_cast<::SDL_Window*>(window)); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForMetal(cimgui::SDL_Window* window) +{ + return ::ImGui_ImplSDL3_InitForMetal(reinterpret_cast<::SDL_Window*>(window)); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForSDLRenderer(cimgui::SDL_Window* window, cimgui::SDL_Renderer* renderer) +{ + return ::ImGui_ImplSDL3_InitForSDLRenderer(reinterpret_cast<::SDL_Window*>(window), reinterpret_cast<::SDL_Renderer*>(renderer)); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForSDLGPU(cimgui::SDL_Window* window) +{ + return ::ImGui_ImplSDL3_InitForSDLGPU(reinterpret_cast<::SDL_Window*>(window)); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_InitForOther(cimgui::SDL_Window* window) +{ + return ::ImGui_ImplSDL3_InitForOther(reinterpret_cast<::SDL_Window*>(window)); +} + +CIMGUI_IMPL_API void cimgui::cImGui_ImplSDL3_Shutdown(void) +{ + ::ImGui_ImplSDL3_Shutdown(); +} + +CIMGUI_IMPL_API void cimgui::cImGui_ImplSDL3_NewFrame(void) +{ + ::ImGui_ImplSDL3_NewFrame(); +} + +CIMGUI_IMPL_API bool cimgui::cImGui_ImplSDL3_ProcessEvent(const SDL_Event* event) +{ + return ::ImGui_ImplSDL3_ProcessEvent(event); +} + +CIMGUI_IMPL_API void cimgui::cImGui_ImplSDL3_SetGamepadMode(cimgui::ImGui_ImplSDL3_GamepadMode mode) +{ + ::ImGui_ImplSDL3_SetGamepadMode(static_cast<::ImGui_ImplSDL3_GamepadMode>(mode)); +} + +CIMGUI_IMPL_API void cimgui::cImGui_ImplSDL3_SetGamepadModeEx(cimgui::ImGui_ImplSDL3_GamepadMode mode, cimgui::SDL_Gamepad** manual_gamepads_array, int manual_gamepads_count) +{ + ::ImGui_ImplSDL3_SetGamepadMode(static_cast<::ImGui_ImplSDL3_GamepadMode>(mode), reinterpret_cast<::SDL_Gamepad**>(manual_gamepads_array), manual_gamepads_count); +} + +#endif // #ifndef IMGUI_DISABLE diff --git a/src/cached/dcimgui_impl_sdl3.h b/src/cached/dcimgui_impl_sdl3.h new file mode 100644 index 0000000..5840218 --- /dev/null +++ b/src/cached/dcimgui_impl_sdl3.h @@ -0,0 +1,67 @@ +// THIS FILE HAS BEEN AUTO-GENERATED BY THE 'DEAR BINDINGS' GENERATOR. +// **DO NOT EDIT DIRECTLY** +// https://github.com/dearimgui/dear_bindings + +// dear imgui: Platform Backend for SDL3 +// This needs to be used along with a Renderer (e.g. SDL_GPU, DirectX11, OpenGL3, Vulkan..) +// (Info: SDL3 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) + +// Implemented features: +// [X] Platform: Clipboard support. +// [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen. +// [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy SDL_SCANCODE_* values are obsolete since 1.87 and not supported since 1.91.5] +// [X] Platform: Gamepad support. +// [X] Platform: Mouse cursor shape and visibility (ImGuiBackendFlags_HasMouseCursors). Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. +// [x] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable' -> the OS animation effect when window gets created/destroyed is problematic. SDL2 backend doesn't have issue. +// Missing features or Issues: +// [ ] Platform: Multi-viewport: Minimized windows seems to break mouse wheel events (at least under Windows). +// [x] Platform: IME support. Position somehow broken in SDL3 + app needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!. + +// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. +// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. +// Learn about Dear ImGui: +// - FAQ https://dearimgui.com/faq +// - Getting Started https://dearimgui.com/getting-started +// - Documentation https://dearimgui.com/docs (same as your local docs/ folder). +// - Introduction, links and more at the top of imgui.cpp + +#pragma once + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "dcimgui.h" +#ifndef IMGUI_DISABLE +typedef struct SDL_Window SDL_Window; +typedef struct SDL_Renderer SDL_Renderer; +typedef struct SDL_Gamepad SDL_Gamepad; +typedef union SDL_Event SDL_Event; + +typedef struct ImDrawData_t ImDrawData; +// Follow "Getting Started" link and check examples/ folder to learn about using backends! +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForVulkan(SDL_Window* window); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForD3D(SDL_Window* window); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForMetal(SDL_Window* window); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForSDLRenderer(SDL_Window* window, SDL_Renderer* renderer); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForSDLGPU(SDL_Window* window); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_InitForOther(SDL_Window* window); +CIMGUI_IMPL_API void cImGui_ImplSDL3_Shutdown(void); +CIMGUI_IMPL_API void cImGui_ImplSDL3_NewFrame(void); +CIMGUI_IMPL_API bool cImGui_ImplSDL3_ProcessEvent(const SDL_Event* event); + +// Gamepad selection automatically starts in AutoFirst mode, picking first available SDL_Gamepad. You may override this. +// When using manual mode, caller is responsible for opening/closing gamepad. +typedef enum +{ + ImGui_ImplSDL3_GamepadMode_AutoFirst, + ImGui_ImplSDL3_GamepadMode_AutoAll, + ImGui_ImplSDL3_GamepadMode_Manual, +} ImGui_ImplSDL3_GamepadMode; +CIMGUI_IMPL_API void cImGui_ImplSDL3_SetGamepadMode(ImGui_ImplSDL3_GamepadMode mode); // Implied manual_gamepads_array = nullptr, manual_gamepads_count = -1 +CIMGUI_IMPL_API void cImGui_ImplSDL3_SetGamepadModeEx(ImGui_ImplSDL3_GamepadMode mode, SDL_Gamepad** manual_gamepads_array /* = nullptr */, int manual_gamepads_count /* = -1 */); +#endif// #ifndef IMGUI_DISABLE +#ifdef __cplusplus +} // End of extern "C" block +#endif diff --git a/src/cached/dcimgui_impl_sdl3.json b/src/cached/dcimgui_impl_sdl3.json new file mode 100644 index 0000000..7c33798 --- /dev/null +++ b/src/cached/dcimgui_impl_sdl3.json @@ -0,0 +1,646 @@ +{ + "defines": [], + "enums": [ + { + "name": "ImGui_ImplSDL3_GamepadMode", + "original_fully_qualified_name": "ImGui_ImplSDL3_GamepadMode", + "is_flags_enum": false, + "elements": [ + { + "name": "ImGui_ImplSDL3_GamepadMode_AutoFirst", + "value": 0, + "is_count": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 47 + } + }, + { + "name": "ImGui_ImplSDL3_GamepadMode_AutoAll", + "value": 1, + "is_count": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 47 + } + }, + { + "name": "ImGui_ImplSDL3_GamepadMode_Manual", + "value": 2, + "is_count": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 47 + } + } + ], + "comments": { + "preceding": [ + "// Gamepad selection automatically starts in AutoFirst mode, picking first available SDL_Gamepad. You may override this.", + "// When using manual mode, caller is responsible for opening/closing gamepad." + ] + }, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 47 + } + } + ], + "typedefs": [ + { + "name": "SDL_Event", + "type": { + "declaration": "SDL_Event", + "description": { + "kind": "User", + "name": "SDL_Event" + } + }, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h" + } + } + ], + "structs": [ + { + "name": "SDL_Window", + "original_fully_qualified_name": "SDL_Window", + "kind": "struct", + "by_value": false, + "forward_declaration": true, + "is_anonymous": false, + "fields": [], + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 28 + } + }, + { + "name": "SDL_Renderer", + "original_fully_qualified_name": "SDL_Renderer", + "kind": "struct", + "by_value": false, + "forward_declaration": true, + "is_anonymous": false, + "fields": [], + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 29 + } + }, + { + "name": "SDL_Gamepad", + "original_fully_qualified_name": "SDL_Gamepad", + "kind": "struct", + "by_value": false, + "forward_declaration": true, + "is_anonymous": false, + "fields": [], + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 30 + } + }, + { + "name": "ImDrawData", + "original_fully_qualified_name": "ImDrawData", + "kind": "struct", + "by_value": false, + "forward_declaration": true, + "is_anonymous": false, + "fields": [], + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 1 + } + } + ], + "functions": [ + { + "name": "cImGui_ImplSDL3_InitForOpenGL", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForOpenGL", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + }, + { + "name": "sdl_gl_context", + "type": { + "declaration": "void*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "Builtin", + "builtin_type": "void" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "comments": { + "preceding": [ + "// Follow \"Getting Started\" link and check examples/ folder to learn about using backends!" + ] + }, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 34 + } + }, + { + "name": "cImGui_ImplSDL3_InitForVulkan", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForVulkan", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 35 + } + }, + { + "name": "cImGui_ImplSDL3_InitForD3D", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForD3D", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 36 + } + }, + { + "name": "cImGui_ImplSDL3_InitForMetal", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForMetal", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 37 + } + }, + { + "name": "cImGui_ImplSDL3_InitForSDLRenderer", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForSDLRenderer", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + }, + { + "name": "renderer", + "type": { + "declaration": "SDL_Renderer*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Renderer" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 38 + } + }, + { + "name": "cImGui_ImplSDL3_InitForSDLGPU", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForSDLGPU", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 39 + } + }, + { + "name": "cImGui_ImplSDL3_InitForOther", + "original_fully_qualified_name": "ImGui_ImplSDL3_InitForOther", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "window", + "type": { + "declaration": "SDL_Window*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Window" + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 40 + } + }, + { + "name": "cImGui_ImplSDL3_Shutdown", + "original_fully_qualified_name": "ImGui_ImplSDL3_Shutdown", + "return_type": { + "declaration": "void", + "description": { + "kind": "Builtin", + "builtin_type": "void" + } + }, + "arguments": [], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 41 + } + }, + { + "name": "cImGui_ImplSDL3_NewFrame", + "original_fully_qualified_name": "ImGui_ImplSDL3_NewFrame", + "return_type": { + "declaration": "void", + "description": { + "kind": "Builtin", + "builtin_type": "void" + } + }, + "arguments": [], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 42 + } + }, + { + "name": "cImGui_ImplSDL3_ProcessEvent", + "original_fully_qualified_name": "ImGui_ImplSDL3_ProcessEvent", + "return_type": { + "declaration": "bool", + "description": { + "kind": "Builtin", + "builtin_type": "bool" + } + }, + "arguments": [ + { + "name": "event", + "type": { + "declaration": "const SDL_Event*", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Event", + "storage_classes": [ + "const" + ] + } + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 43 + } + }, + { + "name": "cImGui_ImplSDL3_SetGamepadMode", + "original_fully_qualified_name": "ImGui_ImplSDL3_SetGamepadMode", + "return_type": { + "declaration": "void", + "description": { + "kind": "Builtin", + "builtin_type": "void" + } + }, + "arguments": [ + { + "name": "mode", + "type": { + "declaration": "ImGui_ImplSDL3_GamepadMode", + "description": { + "kind": "User", + "name": "ImGui_ImplSDL3_GamepadMode" + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + } + ], + "is_default_argument_helper": true, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "comments": { + "attached": "// Implied manual_gamepads_array = nullptr, manual_gamepads_count = -1" + }, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 48 + } + }, + { + "name": "cImGui_ImplSDL3_SetGamepadModeEx", + "original_fully_qualified_name": "ImGui_ImplSDL3_SetGamepadMode", + "return_type": { + "declaration": "void", + "description": { + "kind": "Builtin", + "builtin_type": "void" + } + }, + "arguments": [ + { + "name": "mode", + "type": { + "declaration": "ImGui_ImplSDL3_GamepadMode", + "description": { + "kind": "User", + "name": "ImGui_ImplSDL3_GamepadMode" + } + }, + "is_array": false, + "is_varargs": false, + "is_instance_pointer": false + }, + { + "name": "manual_gamepads_array", + "type": { + "declaration": "SDL_Gamepad**", + "description": { + "kind": "Pointer", + "inner_type": { + "kind": "Pointer", + "inner_type": { + "kind": "User", + "name": "SDL_Gamepad" + } + } + } + }, + "is_array": false, + "is_varargs": false, + "default_value": "nullptr", + "is_instance_pointer": false + }, + { + "name": "manual_gamepads_count", + "type": { + "declaration": "int", + "description": { + "kind": "Builtin", + "builtin_type": "int" + } + }, + "is_array": false, + "is_varargs": false, + "default_value": "-1", + "is_instance_pointer": false + } + ], + "is_default_argument_helper": false, + "is_manual_helper": false, + "is_imstr_helper": false, + "has_imstr_helper": false, + "is_unformatted_helper": false, + "is_static": false, + "is_internal": false, + "source_location": { + "filename": "imgui_impl_sdl3.h", + "line": 48 + } + } + ] +} \ No newline at end of file diff --git a/src/cached/dcimgui_impl_sdl3_imconfig.json b/src/cached/dcimgui_impl_sdl3_imconfig.json new file mode 100644 index 0000000..c284c5c --- /dev/null +++ b/src/cached/dcimgui_impl_sdl3_imconfig.json @@ -0,0 +1,7 @@ +{ + "defines": [], + "enums": [], + "typedefs": [], + "structs": [], + "functions": [] +} \ No newline at end of file diff --git a/src/generate.zig b/src/generate.zig index 3fc47a7..f1d3f21 100644 --- a/src/generate.zig +++ b/src/generate.zig @@ -91,31 +91,7 @@ const Header = struct { // are added. const Conditional = struct { condition: enum { ifdef, ifndef, @"if", ifnot }, - expression: enum { - IMGUI_DISABLE_OBSOLETE_FUNCTIONS, - IMGUI_DISABLE_OBSOLETE_KEYIO, - IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT, - IMGUI_USE_WCHAR32, - ImTextureID, - ImDrawIdx, - ImDrawCallback, - CIMGUI_API, - CIMGUI_IMPL_API, - @"defined(_MSC_VER)&&!defined(__clang__)&&!defined(__INTEL_COMPILER)&&!defined(IMGUI_DEBUG_PARANOID)", - @"defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_OBSOLETE_KEYIO)", - IMGUI_DEFINE_MATH_OPERATORS, - IM_COL32_R_SHIFT, - IMGUI_USE_BGRA_PACKED_COLOR, - IM_DRAWLIST_TEX_LINES_WIDTH_MAX, - @"defined(IMGUI_DISABLE_METRICS_WINDOW)&&!defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_DEBUG_TOOLS)", - @"defined(IMGUI_HAS_IMSTR)", - IMGUI_HAS_IMSTR, - @"defined(IMGUI_IMPL_VULKAN_NO_PROTOTYPES)&&!defined(VK_NO_PROTOTYPES)", - @"defined(VK_USE_PLATFORM_WIN32_KHR)&&!defined(NOMINMAX)", - @"defined(VK_VERSION_1_3)|| defined(VK_KHR_dynamic_rendering)", - IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING, - IMGUI_DISABLE_DEBUG_TOOLS, - }, + expression: []const u8, }; const Type = struct { @@ -302,7 +278,16 @@ fn writeDefines(writer: anytype, header: *const Header) !void { if (define.is_internal) continue; if (skip(define.conditionals)) continue; if (define.content) |content| { - try writer.print("const {s} = {s};\n", .{ define.name, content }); + if (std.mem.startsWith(u8, content, "(")) { + const end = std.mem.indexOfScalar(u8, content, ')').?; + const ty = content[1..end]; + const val = content[end + 1 ..]; + try writer.print("const {s}: ", .{define.name}); + try writeTypeName(writer, ty); + try writer.print(" = {s};\n", .{val}); + } else { + try writer.print("const {s} = {s};\n", .{ define.name, content }); + } } } } @@ -832,32 +817,41 @@ fn writePointerType( // Returns true if we should skip due to a conditional fn skip(conditionals: []const Header.Conditional) bool { for (conditionals) |conditional| { - const defined = switch (conditional.expression) { - .IMGUI_DISABLE_OBSOLETE_FUNCTIONS, - .IMGUI_DISABLE_OBSOLETE_KEYIO, - .CIMGUI_API, - .CIMGUI_IMPL_API, - .@"defined(IMGUI_IMPL_VULKAN_NO_PROTOTYPES)&&!defined(VK_NO_PROTOTYPES)", - .@"defined(VK_USE_PLATFORM_WIN32_KHR)&&!defined(NOMINMAX)", - .IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING, - .@"defined(VK_VERSION_1_3)|| defined(VK_KHR_dynamic_rendering)", - => true, - .IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT, - .IMGUI_USE_WCHAR32, - .ImTextureID, - .ImDrawIdx, - .ImDrawCallback, - .@"defined(_MSC_VER)&&!defined(__clang__)&&!defined(__INTEL_COMPILER)&&!defined(IMGUI_DEBUG_PARANOID)", - .@"defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_OBSOLETE_KEYIO)", - .IMGUI_DEFINE_MATH_OPERATORS, - .IM_COL32_R_SHIFT, - .IMGUI_USE_BGRA_PACKED_COLOR, - .IM_DRAWLIST_TEX_LINES_WIDTH_MAX, - .@"defined(IMGUI_DISABLE_METRICS_WINDOW)&&!defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_DEBUG_TOOLS)", - .@"defined(IMGUI_HAS_IMSTR)", - .IMGUI_HAS_IMSTR, - .IMGUI_DISABLE_DEBUG_TOOLS, - => false, + // We just manually decide which of these are correct rather than trying to automatically + // parse them. We do this with a chain of if statements because std.json doesn't give us any + // information about what string it saw or what line number the error was on if we try to + // parse it as an enum, which is a huge pain when upgrading dear imgui. + const defined = b: { + // True conditionals + if (std.mem.eql(u8, conditional.expression, "IMGUI_DISABLE_OBSOLETE_FUNCTIONS")) break :b true; + if (std.mem.eql(u8, conditional.expression, "IMGUI_DISABLE_OBSOLETE_FUNCTIONS")) break :b true; + if (std.mem.eql(u8, conditional.expression, "IMGUI_DISABLE_OBSOLETE_KEYIO")) break :b true; + if (std.mem.eql(u8, conditional.expression, "CIMGUI_API")) break :b true; + if (std.mem.eql(u8, conditional.expression, "CIMGUI_IMPL_API")) break :b true; + if (std.mem.eql(u8, conditional.expression, "defined(IMGUI_IMPL_VULKAN_NO_PROTOTYPES)&&!defined(VK_NO_PROTOTYPES)")) break :b true; + if (std.mem.eql(u8, conditional.expression, "defined(VK_USE_PLATFORM_WIN32_KHR)&&!defined(NOMINMAX)")) break :b true; + if (std.mem.eql(u8, conditional.expression, "IMGUI_IMPL_VULKAN_HAS_DYNAMIC_RENDERING")) break :b true; + if (std.mem.eql(u8, conditional.expression, "defined(VK_VERSION_1_3)|| defined(VK_KHR_dynamic_rendering)")) break :b true; + + // False conditionals + if (std.mem.eql(u8, conditional.expression, "IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IMGUI_USE_WCHAR32")) break :b false; + if (std.mem.eql(u8, conditional.expression, "ImTextureID")) break :b false; + if (std.mem.eql(u8, conditional.expression, "ImDrawIdx")) break :b false; + if (std.mem.eql(u8, conditional.expression, "ImDrawCallback")) break :b false; + if (std.mem.eql(u8, conditional.expression, "defined(_MSC_VER)&&!defined(__clang__)&&!defined(__INTEL_COMPILER)&&!defined(IMGUI_DEBUG_PARANOID)")) break :b false; + if (std.mem.eql(u8, conditional.expression, "defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_OBSOLETE_KEYIO)")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IMGUI_DEFINE_MATH_OPERATORS")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IM_COL32_R_SHIFT")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IMGUI_USE_BGRA_PACKED_COLOR")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IM_DRAWLIST_TEX_LINES_WIDTH_MAX")) break :b false; + if (std.mem.eql(u8, conditional.expression, "defined(IMGUI_DISABLE_METRICS_WINDOW)&&!defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)&&!defined(IMGUI_DISABLE_DEBUG_TOOLS)")) break :b false; + if (std.mem.eql(u8, conditional.expression, "defined(IMGUI_HAS_IMSTR)")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IMGUI_HAS_IMSTR")) break :b false; + if (std.mem.eql(u8, conditional.expression, "IMGUI_DISABLE_DEBUG_TOOLS")) break :b false; + if (std.mem.eql(u8, conditional.expression, "ImTextureID_Invalid")) break :b false; + + std.debug.panic("unexpected preprocessor conditional: {s}", .{conditional.expression}); }; switch (conditional.condition) { .ifdef, .@"if" => if (!defined) return true, @@ -909,10 +903,16 @@ fn writeTypeName(writer: anytype, raw: []const u8) !void { } } + const escaped = std.mem.indexOfScalar(u8, name, '<') != null; + + if (escaped) try writer.writeAll("@\""); + for (name) |c| switch (c) { '_' => {}, else => try writer.writeByte(c), }; + + if (escaped) try writer.writeByte('"'); } // Convert a cimgui field name to a Zig field name diff --git a/src/templates/impl_vulkan_prefix.zig.template b/src/templates/impl_vulkan_prefix.zig.template index 944cb78..a12b67e 100644 --- a/src/templates/impl_vulkan_prefix.zig.template +++ b/src/templates/impl_vulkan_prefix.zig.template @@ -1,4 +1,5 @@ const DrawData = @import("dear_imgui").DrawData; +const TextureData = @import("dear_imgui").TextureData; const Options = struct { PFNvkVoidFunction: type, @@ -19,6 +20,7 @@ const Options = struct { VkInstance: type, VkPhysicalDevice: type, VkPipeline: type, + VkPipelineLayout: type, VkPipelineCache: type, VkPipelineRenderingCreateInfoKHR: type, VkPresentModeKHR: type, @@ -54,6 +56,7 @@ pub fn get(options: Options) type { const VkInstance = options.VkInstance; const VkPhysicalDevice = options.VkPhysicalDevice; const VkPipeline = options.VkInstance; + const VkPipelineLayout = options.VkPipelineLayout; const VkPipelineCache = options.VkPipelineCache; const VkPipelineRenderingCreateInfoKHR = options.VkPipelineRenderingCreateInfoKHR; const VkPresentModeKHR = options.VkPresentModeKHR; @@ -68,3 +71,8 @@ pub fn get(options: Options) type { const VkSwapchainKHR = options.VkSwapchainKHR; return struct { + + // Instantiation of relevant `ImVector`s not provided by the dear bindings for some reason + pub const @"Vector" = extern struct { size: c_int, capacity: c_int, data: ?[*]Frame }; + pub const @"Vector" = extern struct { size: c_int, capacity: c_int, data: ?[*]Frame }; +