├── .github ├── bug_report.md ├── feature_resquest.md └── workflows │ └── msbuild.yml ├── .gitignore ├── Anno1800ScriptingAPI.sln ├── Injected ├── Injected.vcxproj ├── Injected.vcxproj.filters ├── Zydis.c ├── Zydis.h ├── anno_entity.cpp ├── anno_entity.h ├── anno_native.cpp ├── anno_native.h ├── anno_tools.cpp ├── anno_tools.h ├── dllmain.cpp ├── framework.h ├── global_includes.h ├── hardware_breakpoints.h ├── hook.cpp ├── hook.h ├── injected.cpp ├── injected.h ├── log.cpp ├── log.h ├── memory.cpp ├── memory.h ├── structs.gen.h ├── test_asm.asm ├── testing.cpp ├── testing.h ├── tools.cpp ├── tools.h ├── trampolines.asm ├── ui.cpp ├── ui.h ├── ui_area_view.cpp ├── ui_area_view.h ├── ui_debugger_test.cpp ├── ui_debugger_test.h ├── ui_entity_view.cpp ├── ui_entity_view.h ├── ui_id_to_name.cpp ├── ui_id_to_name.h ├── ui_island_view.cpp ├── ui_island_view.h ├── ui_selection_view.cpp ├── ui_selection_view.h ├── ui_time_view.cpp └── ui_time_view.h ├── LICENSE ├── Monocle ├── Injection.cs ├── Main.cs └── Monocle.csproj ├── README.md └── imgui ├── .editorconfig ├── .gitattributes ├── .github ├── FUNDING.yml ├── issue_template.md ├── pull_request_template.md └── workflows │ ├── build.yml │ ├── scheduled.yml │ └── static-analysis.yml ├── .gitignore ├── LICENSE.txt ├── backends ├── imgui_impl_allegro5.cpp ├── imgui_impl_allegro5.h ├── imgui_impl_android.cpp ├── imgui_impl_android.h ├── imgui_impl_dx10.cpp ├── imgui_impl_dx10.h ├── imgui_impl_dx11.cpp ├── imgui_impl_dx11.h ├── imgui_impl_dx12.cpp ├── imgui_impl_dx12.h ├── imgui_impl_dx9.cpp ├── imgui_impl_dx9.h ├── imgui_impl_glfw.cpp ├── imgui_impl_glfw.h ├── imgui_impl_glut.cpp ├── imgui_impl_glut.h ├── imgui_impl_metal.h ├── imgui_impl_metal.mm ├── imgui_impl_opengl2.cpp ├── imgui_impl_opengl2.h ├── imgui_impl_opengl3.cpp ├── imgui_impl_opengl3.h ├── imgui_impl_opengl3_loader.h ├── imgui_impl_osx.h ├── imgui_impl_osx.mm ├── imgui_impl_sdl2.cpp ├── imgui_impl_sdl2.h ├── imgui_impl_sdl3.cpp ├── imgui_impl_sdl3.h ├── imgui_impl_sdlrenderer2.cpp ├── imgui_impl_sdlrenderer2.h ├── imgui_impl_sdlrenderer3.cpp ├── imgui_impl_sdlrenderer3.h ├── imgui_impl_vulkan.cpp ├── imgui_impl_vulkan.h ├── imgui_impl_wgpu.cpp ├── imgui_impl_wgpu.h ├── imgui_impl_win32.cpp ├── imgui_impl_win32.h └── vulkan │ ├── generate_spv.sh │ ├── glsl_shader.frag │ └── glsl_shader.vert ├── docs ├── BACKENDS.md ├── CHANGELOG.txt ├── CONTRIBUTING.md ├── EXAMPLES.md ├── FAQ.md ├── FONTS.md ├── README.md └── TODO.txt ├── examples ├── README.txt ├── example_allegro5 │ ├── README.md │ ├── example_allegro5.vcxproj │ ├── example_allegro5.vcxproj.filters │ ├── imconfig_allegro5.h │ └── main.cpp ├── example_android_opengl3 │ ├── CMakeLists.txt │ ├── android │ │ ├── .gitignore │ │ ├── app │ │ │ ├── build.gradle │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java │ │ │ │ └── MainActivity.kt │ │ ├── build.gradle │ │ └── settings.gradle │ └── main.cpp ├── example_apple_metal │ ├── README.md │ ├── example_apple_metal.xcodeproj │ │ └── project.pbxproj │ ├── iOS │ │ ├── Info-iOS.plist │ │ └── LaunchScreen.storyboard │ ├── macOS │ │ ├── Info-macOS.plist │ │ └── MainMenu.storyboard │ └── main.mm ├── example_apple_opengl2 │ ├── example_apple_opengl2.xcodeproj │ │ └── project.pbxproj │ └── main.mm ├── example_emscripten_wgpu │ ├── Makefile │ ├── README.md │ └── main.cpp ├── example_glfw_metal │ ├── Makefile │ └── main.mm ├── example_glfw_opengl2 │ ├── Makefile │ ├── build_win32.bat │ ├── example_glfw_opengl2.vcxproj │ ├── example_glfw_opengl2.vcxproj.filters │ └── main.cpp ├── example_glfw_opengl3 │ ├── Makefile │ ├── Makefile.emscripten │ ├── build_win32.bat │ ├── example_glfw_opengl3.vcxproj │ ├── example_glfw_opengl3.vcxproj.filters │ └── main.cpp ├── example_glfw_vulkan │ ├── CMakeLists.txt │ ├── build_win32.bat │ ├── build_win64.bat │ ├── example_glfw_vulkan.vcxproj │ ├── example_glfw_vulkan.vcxproj.filters │ └── main.cpp ├── example_glut_opengl2 │ ├── Makefile │ ├── example_glut_opengl2.vcxproj │ ├── example_glut_opengl2.vcxproj.filters │ └── main.cpp ├── example_null │ ├── Makefile │ ├── build_win32.bat │ └── main.cpp ├── example_sdl2_directx11 │ ├── build_win32.bat │ ├── example_sdl2_directx11.vcxproj │ ├── example_sdl2_directx11.vcxproj.filters │ └── main.cpp ├── example_sdl2_metal │ ├── Makefile │ └── main.mm ├── example_sdl2_opengl2 │ ├── Makefile │ ├── README.md │ ├── build_win32.bat │ ├── example_sdl2_opengl2.vcxproj │ ├── example_sdl2_opengl2.vcxproj.filters │ └── main.cpp ├── example_sdl2_opengl3 │ ├── Makefile │ ├── Makefile.emscripten │ ├── README.md │ ├── build_win32.bat │ ├── example_sdl2_opengl3.vcxproj │ ├── example_sdl2_opengl3.vcxproj.filters │ └── main.cpp ├── example_sdl2_sdlrenderer2 │ ├── Makefile │ ├── README.md │ ├── build_win32.bat │ ├── example_sdl2_sdlrenderer2.vcxproj │ ├── example_sdl2_sdlrenderer2.vcxproj.filters │ └── main.cpp ├── example_sdl2_vulkan │ ├── build_win32.bat │ ├── example_sdl2_vulkan.vcxproj │ ├── example_sdl2_vulkan.vcxproj.filters │ └── main.cpp ├── example_sdl3_opengl3 │ ├── Makefile │ ├── Makefile.emscripten │ ├── README.md │ ├── build_win32.bat │ ├── example_sdl3_opengl3.vcxproj │ ├── example_sdl3_opengl3.vcxproj.filters │ └── main.cpp ├── example_sdl3_sdlrenderer3 │ ├── Makefile │ ├── build_win32.bat │ ├── example_sdl3_sdlrenderer3.vcxproj │ ├── example_sdl3_sdlrenderer3.vcxproj.filters │ └── main.cpp ├── example_win32_directx10 │ ├── build_win32.bat │ ├── example_win32_directx10.vcxproj │ ├── example_win32_directx10.vcxproj.filters │ └── main.cpp ├── example_win32_directx11 │ ├── build_win32.bat │ ├── example_win32_directx11.vcxproj │ ├── example_win32_directx11.vcxproj.filters │ └── main.cpp ├── example_win32_directx12 │ ├── build_win32.bat │ ├── example_win32_directx12.vcxproj │ ├── example_win32_directx12.vcxproj.filters │ └── main.cpp ├── example_win32_directx9 │ ├── build_win32.bat │ ├── example_win32_directx9.vcxproj │ ├── example_win32_directx9.vcxproj.filters │ └── main.cpp ├── example_win32_opengl3 │ ├── build_win32.bat │ ├── example_win32_opengl3.vcxproj │ ├── example_win32_opengl3.vcxproj.filters │ └── main.cpp ├── imgui_examples.sln └── libs │ ├── emscripten │ ├── emscripten_mainloop_stub.h │ └── shell_minimal.html │ ├── glfw │ ├── COPYING.txt │ ├── include │ │ └── GLFW │ │ │ ├── glfw3.h │ │ │ └── glfw3native.h │ ├── lib-vc2010-32 │ │ └── glfw3.lib │ └── lib-vc2010-64 │ │ └── glfw3.lib │ └── usynergy │ ├── README.txt │ ├── uSynergy.c │ └── uSynergy.h ├── imconfig.h ├── imgui.cpp ├── imgui.h ├── imgui_demo.cpp ├── imgui_draw.cpp ├── imgui_internal.h ├── imgui_tables.cpp ├── imgui_widgets.cpp ├── imstb_rectpack.h ├── imstb_textedit.h ├── imstb_truetype.h └── misc ├── README.txt ├── cpp ├── README.txt ├── imgui_stdlib.cpp └── imgui_stdlib.h ├── debuggers ├── README.txt ├── imgui.gdb ├── imgui.natstepfilter └── imgui.natvis ├── fonts ├── Cousine-Regular.ttf ├── DroidSans.ttf ├── Karla-Regular.ttf ├── ProggyClean.ttf ├── ProggyTiny.ttf ├── Roboto-Medium.ttf └── binary_to_compressed_c.cpp ├── freetype ├── README.md ├── imgui_freetype.cpp └── imgui_freetype.h └── single_file └── imgui_single_file.h /.github/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug, invalid 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/feature_resquest.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/msbuild.yml: -------------------------------------------------------------------------------- 1 | name: MSBuild 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | env: 10 | # Path to the solution file relative to the root of the project. 11 | SOLUTION_FILE_PATH: . 12 | 13 | # Configuration type to build. 14 | # You can convert this to a build matrix if you need coverage of multiple configuration types. 15 | # https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix 16 | BUILD_CONFIGURATION: Release 17 | 18 | permissions: 19 | contents: read 20 | 21 | jobs: 22 | build: 23 | runs-on: windows-latest 24 | 25 | steps: 26 | - uses: actions/checkout@v3 27 | 28 | - name: Add MSBuild to PATH 29 | uses: microsoft/setup-msbuild@v1.0.2 30 | 31 | - name: Restore NuGet packages 32 | working-directory: ${{env.GITHUB_WORKSPACE}} 33 | run: nuget restore ${{env.SOLUTION_FILE_PATH}} 34 | 35 | - name: Build 36 | working-directory: ${{env.GITHUB_WORKSPACE}} 37 | # Add additional options to the MSBuild command line here (like platform or verbosity level). 38 | # See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference 39 | run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}} 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | TomCruise/x64 2 | x64 3 | TomCruise/TomCruise.vcxproj.user 4 | *.user 5 | monocle/monocle_demo/obj/Debug 6 | monocle/monocle_demo/obj 7 | monocle/monocle_demo/bin 8 | monocle/monocle/bin 9 | monocle/monocle/obj 10 | monocle/monocle/.vs 11 | annoscripting/annoscripting.egg-info 12 | annoscripting/annoscripting/__pycache__ 13 | annoscripting 14 | .vs 15 | autocomms.sublime-workspace 16 | *.sublime-workspace 17 | 18 | Debug/ 19 | Release/ 20 | Monocle/obj 21 | CommsCS/obj 22 | CodeGenerator/obj 23 | TestMonocle/obj 24 | ResourceExporter/obj/publish/win-x64 25 | ResourceExporter/obj 26 | ResourceExporter/Properties/PublishProfiles 27 | ProductionViewer/obj 28 | GoodMinMax/obj 29 | StatsServer/obj 30 | -------------------------------------------------------------------------------- /Anno1800ScriptingAPI.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31919.166 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Monocle", "Monocle\Monocle.csproj", "{B0383AA3-1937-41E8-B7DE-E4A08E21D984}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {7987C399-7F4C-407D-86AC-E3B5A69A133C} = {7987C399-7F4C-407D-86AC-E3B5A69A133C} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Injected", "Injected\Injected.vcxproj", "{7987C399-7F4C-407D-86AC-E3B5A69A133C}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Debug|x64 = Debug|x64 17 | Debug|x86 = Debug|x86 18 | Release|Any CPU = Release|Any CPU 19 | Release|x64 = Release|x64 20 | Release|x86 = Release|x86 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|x64.ActiveCfg = Debug|Any CPU 26 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|x64.Build.0 = Debug|Any CPU 27 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|x86.ActiveCfg = Debug|Any CPU 28 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Debug|x86.Build.0 = Debug|Any CPU 29 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|Any CPU.Build.0 = Release|Any CPU 31 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|x64.ActiveCfg = Release|Any CPU 32 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|x64.Build.0 = Release|Any CPU 33 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|x86.ActiveCfg = Release|Any CPU 34 | {B0383AA3-1937-41E8-B7DE-E4A08E21D984}.Release|x86.Build.0 = Release|Any CPU 35 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|Any CPU.ActiveCfg = Release|x64 36 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|Any CPU.Build.0 = Release|x64 37 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|x64.ActiveCfg = Debug|x64 38 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|x64.Build.0 = Debug|x64 39 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|x86.ActiveCfg = Debug|Win32 40 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Debug|x86.Build.0 = Debug|Win32 41 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|Any CPU.ActiveCfg = Release|x64 42 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|Any CPU.Build.0 = Release|x64 43 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|x64.ActiveCfg = Release|x64 44 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|x64.Build.0 = Release|x64 45 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|x86.ActiveCfg = Release|Win32 46 | {7987C399-7F4C-407D-86AC-E3B5A69A133C}.Release|x86.Build.0 = Release|Win32 47 | EndGlobalSection 48 | GlobalSection(SolutionProperties) = preSolution 49 | HideSolutionNode = FALSE 50 | EndGlobalSection 51 | GlobalSection(ExtensibilityGlobals) = postSolution 52 | SolutionGuid = {1EF446AE-5703-4CB4-9683-74278F629705} 53 | EndGlobalSection 54 | EndGlobal 55 | -------------------------------------------------------------------------------- /Injected/anno_entity.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "structs.gen.h" 4 | #include "hook.h" 5 | #include "anno_native.h" 6 | #include "ui.h" 7 | 8 | #include 9 | #include 10 | 11 | class AnnoComponent 12 | { 13 | public: 14 | AnnoComponent(uint32_t id, uint64_t _address); 15 | virtual ~AnnoComponent(); 16 | 17 | uint64_t GetAddress(); 18 | 19 | virtual void Render(); 20 | 21 | uint32_t GetId(); 22 | virtual std::string GetName(); 23 | 24 | protected: 25 | uint32_t id; 26 | uint64_t address; 27 | }; 28 | 29 | class AnnoComponent_Name : public AnnoComponent 30 | { 31 | public: 32 | AnnoComponent_Name(uint32_t id, uint64_t _address); 33 | virtual ~AnnoComponent_Name(); 34 | 35 | virtual void Render() override; 36 | 37 | virtual std::string GetName(); 38 | 39 | private: 40 | 41 | std::string NameOfComponent; 42 | }; 43 | 44 | class AnnoComponent_InternalStorage : public AnnoComponent 45 | { 46 | public: 47 | AnnoComponent_InternalStorage(uint32_t id, uint64_t _address); 48 | virtual ~AnnoComponent_InternalStorage(); 49 | 50 | virtual void Render() override; 51 | 52 | virtual std::string GetName(); 53 | 54 | private: 55 | 56 | struct StorageItem 57 | { 58 | std::string TypeName; 59 | uint32_t Capacity; 60 | uint32_t Amount; 61 | }; 62 | 63 | std::vector StorageItems; 64 | }; 65 | 66 | class AnnoComponent_Production : public AnnoComponent 67 | { 68 | public: 69 | AnnoComponent_Production(uint32_t id, uint64_t _address); 70 | virtual ~AnnoComponent_Production(); 71 | 72 | virtual void Render() override; 73 | 74 | virtual std::string GetName(); 75 | 76 | private: 77 | 78 | struct SecondaryProduction 79 | { 80 | uint32_t type; 81 | std::string name; 82 | 83 | // The ratio for rate 84 | int nthCycle; 85 | }; 86 | 87 | uint32_t ProductionOutputId; 88 | std::string ProductionOutputName; 89 | 90 | float Efficiency; 91 | uint32_t cycle_base_time_ms; 92 | float time_left_in_cycle; 93 | float cycle_time_multiplier; 94 | uint32_t cycle_count; 95 | 96 | std::vector SecondaryProductions; 97 | }; 98 | 99 | class AnnoComponent_Movement : public AnnoComponent 100 | { 101 | public: 102 | AnnoComponent_Movement(uint32_t id, uint64_t _address); 103 | virtual ~AnnoComponent_Movement(); 104 | 105 | virtual void Render() override; 106 | 107 | virtual std::string GetName(); 108 | 109 | private: 110 | 111 | struct WayPoint 112 | { 113 | float x; 114 | float y; 115 | }; 116 | 117 | float x, y, rotation; 118 | std::vector Waypoints; 119 | }; 120 | 121 | 122 | class AnnoEntity 123 | { 124 | public: 125 | AnnoEntity(uint64_t address); 126 | virtual ~AnnoEntity(); 127 | 128 | uint64_t GetAddress(); 129 | std::string GetTypeName(); 130 | uint32_t GetTypeId(); 131 | 132 | float GetX(); 133 | float GetY(); 134 | float GetRotation(); 135 | 136 | std::vector> GetComponents(); 137 | 138 | private: 139 | 140 | uint64_t address; 141 | std::string TypeName; 142 | uint32_t TypeId; 143 | 144 | float x, y, rotation; 145 | 146 | std::vector> Components; 147 | }; 148 | 149 | std::shared_ptr GetComponentFromEntity(AnnoEntity& Entity, uint32_t ComponentId); 150 | 151 | 152 | -------------------------------------------------------------------------------- /Injected/anno_native.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "structs.gen.h" 4 | #include "hook.h" 5 | #include 6 | 7 | extern "C" 8 | { 9 | uint64_t get_anno_component(uint64_t object_address, uint64_t component_id); 10 | } 11 | 12 | bool ExtractResourceNodeInfo(uint64_t module_base, BinaryCRC32 binary_crc, uint64_t address, IslandResource* resourceInfo, bool& known); 13 | 14 | bool ExtractResourceNodeChainInfo(uint64_t module_base, BinaryCRC32 binary_crc, uint64_t address, std::vector* resourceInfo); 15 | 16 | bool DoesIslandBelongToPlayer(uint64_t address); 17 | 18 | bool GetIslandName(uint64_t mdoule_base, BinaryCRC32 binary_crc, uint64_t island_address, std::string& name); 19 | 20 | bool GetAreaCode(uint64_t area_address, uint64_t* area_code); 21 | 22 | bool ExtractIslandChainFromAddress(uint64_t module_base, BinaryCRC32 binary_crc, uint64_t address, bool mustBelongToThePlayer, std::vector* islands); 23 | 24 | bool GetIslandListFromAreaAddress(uint64_t address, uint64_t* list_pointer); 25 | 26 | bool GetBuildingConversion(uint64_t building_address, std::unordered_map& conversion_map, uint64_t component_id); 27 | 28 | bool GetBuildingIndustrialConversion(uint64_t building_address, std::unordered_map& conversion_map); 29 | 30 | bool GetBuildingBuffConversion(uint64_t building_address, std::unordered_map& conversion_map); 31 | 32 | bool GetAllAreas(uint64_t module_base, BinaryCRC32 binary_crc, std::vector& areas, std::vector& addresses); 33 | 34 | std::string GetNameFromGUID(uint64_t module_base, BinaryCRC32 binary_crc, uint64_t guid); 35 | 36 | -------------------------------------------------------------------------------- /Injected/anno_tools.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | bool ReadAnnoString(uint64_t address, std::string& result); 6 | 7 | std::string GetNameFromGUID(uint64_t guid, bool& known); 8 | uint64_t GetGuidFromName(std::string name); 9 | -------------------------------------------------------------------------------- /Injected/dllmain.cpp: -------------------------------------------------------------------------------- 1 | #include "global_includes.h" 2 | #include 3 | #include 4 | #include "structs.gen.h" 5 | #include "testing.h" 6 | #include "injected.h" 7 | #include "process.h" 8 | #include "log.h" 9 | #include "hook.h" 10 | #include "tools.h" 11 | 12 | void entry(HMODULE module) 13 | { 14 | Log::Get().Initialize(); 15 | 16 | char filename[1024]; 17 | GetModuleFileNameA(NULL, filename, sizeof(filename)); 18 | 19 | size_t fullSize = strlen(filename); 20 | 21 | size_t lastSeperator = 0; 22 | size_t exeStart = 0; 23 | for (size_t i = 0; i < fullSize; ++i) 24 | { 25 | if (filename[i] == '\\' || filename[i] == '/') 26 | lastSeperator = i; 27 | 28 | if (i <= (fullSize - 4) && memcmp((const void*)&filename[i], ".exe", 4) == 0) 29 | { 30 | exeStart = i; 31 | } 32 | } 33 | 34 | // Get the file's crc checksum 35 | uint32_t binary_crc_raw = 0; 36 | { 37 | std::ifstream file_in(filename, std::ifstream::binary); 38 | std::vector buffer(1024, 0); 39 | while (!file_in.eof()) 40 | { 41 | file_in.read(buffer.data(), 1024); 42 | std::streamsize bytes_read = file_in.gcount(); 43 | binary_crc_raw = crc_update(binary_crc_raw, buffer.data(), bytes_read); 44 | } 45 | } 46 | 47 | ANNO_LOG("Injected into binary with crc %x", binary_crc_raw); 48 | 49 | // Figure out which binary we're in 50 | BinaryCRC32 binary_crc = BinaryCRC32::Invalid; 51 | switch ((BinaryCRC32)binary_crc_raw) 52 | { 53 | case BinaryCRC32::Steam: 54 | { 55 | binary_crc = BinaryCRC32::Steam; 56 | break; 57 | } 58 | case BinaryCRC32::EpicStore: 59 | { 60 | binary_crc = BinaryCRC32::EpicStore; 61 | break; 62 | } 63 | default: 64 | { 65 | binary_crc = BinaryCRC32::Invalid; 66 | break; 67 | } 68 | } 69 | 70 | std::string mainModuleName = std::string(&filename[lastSeperator + 1], exeStart - lastSeperator - 1); 71 | 72 | // If we're loaded in the test program, just call the test code 73 | if (mainModuleName.compare("TestMonocle") == 0) 74 | testing(); 75 | else 76 | injected(binary_crc); 77 | 78 | ANNO_LOG("Injected leaving"); 79 | Log::Get().Shutdown(); 80 | FreeLibraryAndExitThread(module, 0); 81 | } 82 | 83 | BOOL APIENTRY DllMain( HMODULE hModule, 84 | DWORD ul_reason_for_call, 85 | LPVOID lpReserved 86 | ) 87 | { 88 | switch (ul_reason_for_call) 89 | { 90 | case DLL_PROCESS_ATTACH: 91 | CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&entry, (LPVOID)hModule, NULL, NULL); 92 | case DLL_THREAD_ATTACH: 93 | case DLL_THREAD_DETACH: 94 | case DLL_PROCESS_DETACH: 95 | break; 96 | } 97 | return TRUE; 98 | } 99 | 100 | -------------------------------------------------------------------------------- /Injected/framework.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | -------------------------------------------------------------------------------- /Injected/global_includes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define WIN32_LEAN_AND_MEAN 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | // Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib 17 | #pragma comment (lib, "Ws2_32.lib") 18 | #pragma comment (lib, "Mswsock.lib") 19 | #pragma comment (lib, "AdvApi32.lib") 20 | 21 | #include 22 | #include 23 | #include 24 | -------------------------------------------------------------------------------- /Injected/hook.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "global_includes.h" 4 | #include 5 | #include 6 | 7 | enum class HookedFunction 8 | { 9 | Any = 0, 10 | GameTimeHook = 1, 11 | SessionTickHook = 2, 12 | ConsumptionHook = 3, 13 | VehicleSortingHook = 4, 14 | }; 15 | 16 | enum class DataOffset : uint64_t 17 | { 18 | Invalid = 0, 19 | TimeStructOffset = 1, 20 | GameStateOffset = 2, 21 | AssetNameDatabase = 3, 22 | FunctionGUIDToName = 4, 23 | FunctionMoveObjects = 5, 24 | }; 25 | 26 | enum class BinaryCRC32 : uint32_t 27 | { 28 | Invalid = 0, 29 | Steam = 0xc20d0bb7, 30 | EpicStore = 0xC6565241, 31 | }; 32 | 33 | struct HookData 34 | { 35 | uint64_t rax; 36 | uint64_t rbx; 37 | uint64_t rcx; 38 | uint64_t rdx; 39 | uint64_t rsi; 40 | uint64_t rdi; 41 | uint64_t r8; 42 | uint64_t r9; 43 | }; 44 | 45 | struct HookExecutionRequest 46 | { 47 | // Sync event used if the client caller wants to wait for the hook to finish 48 | HANDLE sync_event = nullptr; 49 | HookedFunction hook; 50 | std::function function = {}; 51 | }; 52 | 53 | class HookManager 54 | { 55 | public: 56 | HookManager(); 57 | 58 | void ShutDown(); 59 | 60 | static HookManager& Get(); 61 | 62 | void Initialize(); 63 | 64 | void ServiceHook(HookedFunction current_hook, HookData hook_data); 65 | 66 | bool ExecuteInHookBase(HookedFunction hook_to_execute, std::function function, bool async); 67 | bool ExecuteInHookSync(HookedFunction hook_to_execute, std::function function); 68 | bool ExecuteInHookAsync(HookedFunction hook_to_execute, std::function function); 69 | 70 | private: 71 | 72 | bool shutting_down; 73 | CRITICAL_SECTION access_hook_requests_cs; 74 | std::list hook_execution_requests; 75 | }; 76 | 77 | uint64_t AnnoFunctionOffset(BinaryCRC32 binary_crc, HookedFunction function); 78 | uint64_t AnnoDataOffset(BinaryCRC32 binary_crc, DataOffset function); 79 | 80 | // To have an interface for assembly 81 | extern "C" 82 | { 83 | void HookManagerServiceHook(HookedFunction current_hook, HookData hook_data); 84 | } 85 | -------------------------------------------------------------------------------- /Injected/log.cpp: -------------------------------------------------------------------------------- 1 | #include "log.h" 2 | 3 | Log::Log() 4 | { 5 | } 6 | 7 | void Log::Initialize() 8 | { 9 | char logFilePath[MAX_PATH]; 10 | SHGetFolderPathA(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, logFilePath); 11 | std::string strLogPath = logFilePath; 12 | strLogPath.append("\\anno_script_log.txt"); 13 | 14 | log_file_handle = CreateFileA(strLogPath.c_str(), // name of the write 15 | GENERIC_WRITE, // open for writing 16 | FILE_SHARE_READ, // Allow others to read while open 17 | NULL, // default security 18 | CREATE_ALWAYS, // create new file only 19 | FILE_ATTRIBUTE_NORMAL, // normal file 20 | NULL); // no attr. template 21 | } 22 | 23 | void Log::Shutdown() 24 | { 25 | CloseHandle(log_file_handle); 26 | } 27 | 28 | Log& Log::Get() 29 | { 30 | static Log hook_manager; 31 | return hook_manager; 32 | } 33 | 34 | void Log::Write(const char* line) 35 | { 36 | DWORD bytesWritten = 0; 37 | WriteFile( 38 | log_file_handle, // open file handle 39 | line, // start of data to write 40 | (DWORD)strlen(line), // number of bytes to write 41 | &bytesWritten, // number of bytes that were written 42 | NULL); // no overlapped structure 43 | 44 | char newline[] = "\n"; 45 | WriteFile( 46 | log_file_handle, // open file handle 47 | newline, // start of data to write 48 | 1, // number of bytes to write 49 | &bytesWritten, // number of bytes that were written 50 | NULL); // no overlapped structure 51 | } 52 | -------------------------------------------------------------------------------- /Injected/log.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "global_includes.h" 4 | 5 | class Log 6 | { 7 | public: 8 | Log(); 9 | void Initialize(); 10 | void Shutdown(); 11 | static Log& Get(); 12 | void Write(const char* line); 13 | private: 14 | HANDLE log_file_handle; 15 | }; 16 | 17 | #define ANNO_LOG(format, ...) { \ 18 | char __my_line_[512]; \ 19 | sprintf_s(__my_line_, format, ##__VA_ARGS__); \ 20 | Log::Get().Write(__my_line_); \ 21 | } 22 | 23 | #define ANNO_FORMAT(__my_result, format, ...) std::string __my_result; { \ 24 | char __my_line_[512]; \ 25 | sprintf_s(__my_line_, format, ##__VA_ARGS__); \ 26 | __my_result = __my_line_; \ 27 | } 28 | 29 | #define DEBUG_PTR(variable) ANNO_LOG(#variable " %llx", variable) 30 | 31 | -------------------------------------------------------------------------------- /Injected/memory.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "global_includes.h" 4 | #include "tools.h" 5 | #include 6 | 7 | class MemoryReplacement 8 | { 9 | public: 10 | MemoryReplacement(); 11 | ~MemoryReplacement(); 12 | 13 | void SetMemory(const std::vector& bytes); 14 | void Emplace(void* address); 15 | void Undo(); 16 | 17 | private: 18 | std::vector memory; 19 | std::vector old_memory; 20 | void* placement_address; 21 | bool placed; 22 | }; 23 | -------------------------------------------------------------------------------- /Injected/structs.gen.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | struct IslandResource 7 | { 8 | int32_t type_id; 9 | std::string name; 10 | int32_t amount; 11 | int32_t capacity; 12 | uint64_t amount_ptr; 13 | }; 14 | 15 | 16 | struct ResourceConsumption 17 | { 18 | int32_t type_id; 19 | std::string name; 20 | float rate; 21 | }; 22 | 23 | 24 | struct IslandInfo 25 | { 26 | uint32_t island_id; 27 | std::string name; 28 | uint64_t debug_address; 29 | }; 30 | 31 | 32 | struct Vector 33 | { 34 | float x; 35 | float y; 36 | }; 37 | 38 | 39 | struct CargoSlot 40 | { 41 | bool occupied; 42 | std::string type_name; 43 | uint32_t type_id; 44 | uint32_t amount; 45 | }; 46 | 47 | 48 | struct ShipInfo 49 | { 50 | uint32_t id; 51 | uint64_t debug_address; 52 | std::string name; 53 | bool idle; 54 | Vector position; 55 | float rotation; 56 | std::vector cargo; 57 | }; 58 | 59 | 60 | struct DebugComponent 61 | { 62 | uint64_t id; 63 | uint64_t address; 64 | }; 65 | 66 | -------------------------------------------------------------------------------- /Injected/test_asm.asm: -------------------------------------------------------------------------------- 1 | PUBLIC test_function_to_hook 2 | 3 | .code 4 | 5 | test_function_to_hook PROC 6 | 7 | mov [rsp + 8h], rbx 8 | push rbp 9 | push rsi 10 | push rdi 11 | push r12 12 | push r13 13 | push r14 14 | push r15 15 | 16 | sub rsp, 0230h 17 | add rsp, 0230h 18 | 19 | pop r15 20 | pop r14 21 | pop r13 22 | pop r12 23 | pop rdi 24 | pop rsi 25 | pop rbp 26 | ret 27 | 28 | test_function_to_hook ENDP 29 | 30 | END 31 | -------------------------------------------------------------------------------- /Injected/testing.cpp: -------------------------------------------------------------------------------- 1 | #include "testing.h" 2 | #include "hook.h" 3 | #include "process.h" 4 | #include "memory.h" 5 | #include "tools.h" 6 | #include "log.h" 7 | 8 | #include 9 | #include 10 | 11 | extern "C" 12 | { 13 | void test_function_to_hook(); 14 | void session_tick_hook_trampoline(); 15 | } 16 | 17 | void Servicer() 18 | { 19 | while (true) 20 | { 21 | test_function_to_hook(); 22 | } 23 | } 24 | 25 | void testing() 26 | { 27 | ANNO_LOG("Running teting code"); 28 | 29 | HookManager::Get().Initialize(); 30 | 31 | MemoryReplacement seesion_tick_hook; 32 | seesion_tick_hook.SetMemory 33 | ({ 34 | 0x48, 0xb8, // movabs rax, [imm64] 35 | EIGHT_BYTES((uint64_t)session_tick_hook_trampoline), // hook address 36 | 0xff, 0xd0, // call rax 37 | 0x90, 0x90, 0x90, 0x90 // 5 nops 38 | }); 39 | 40 | for (int i = 0; i < 4; ++i) 41 | _beginthread((_beginthread_proc_type)&Servicer, 0, nullptr); 42 | 43 | void* addressofjump = (void*)&test_function_to_hook; 44 | uint32_t offset = *(uint32_t*)((uint64_t)addressofjump + 1); 45 | uint64_t finalAddress = (uint64_t)((uint64_t)addressofjump + offset + 5); 46 | seesion_tick_hook.Emplace((void*)(finalAddress)); 47 | 48 | while (true); 49 | } 50 | 51 | -------------------------------------------------------------------------------- /Injected/testing.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | void testing(); 4 | -------------------------------------------------------------------------------- /Injected/ui.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "memory.h" 4 | 5 | #include "imgui.h" 6 | #include 7 | 8 | class DebugWindow 9 | { 10 | public: 11 | DebugWindow(); 12 | virtual ~DebugWindow(); 13 | 14 | virtual void Render() = 0; 15 | virtual const char* GetName() = 0; 16 | }; 17 | 18 | class UI 19 | { 20 | public: 21 | 22 | void EnableHook(); 23 | void DisableHook(); 24 | 25 | void OnPresentHook(uint64_t thisptr, UINT SyncInterval, UINT Flags); 26 | bool OnWinProc(HWND WindowHandle, UINT uMsg, WPARAM WParam, LPARAM LParam); 27 | 28 | void WriteConfig(); 29 | void ReadConfig(); 30 | 31 | void Render(); 32 | 33 | static UI& Get(); 34 | 35 | void RegsiterDebugWindow(DebugWindow* Window); 36 | void UnregisterDebugWindow(DebugWindow* Window); 37 | 38 | HANDLE ShutdownEvent; 39 | 40 | private: 41 | 42 | struct DebugWindowInfo 43 | { 44 | bool Enabled; 45 | DebugWindow* Window; 46 | }; 47 | 48 | std::vector DebugWindows; 49 | 50 | bool HookedWinProc = false; 51 | bool HookedDX11 = false; 52 | 53 | ID3D11Device* DX11Device = nullptr; 54 | ID3D11DeviceContext* DX11Context = nullptr; 55 | 56 | HWND hwnd; 57 | 58 | MemoryReplacement PresentHookReplacement; 59 | }; 60 | 61 | -------------------------------------------------------------------------------- /Injected/ui_area_view.cpp: -------------------------------------------------------------------------------- 1 | #include "ui_area_view.h" 2 | 3 | #include 4 | #include 5 | 6 | #include "ui.h" 7 | #include "log.h" 8 | #include "anno_tools.h" 9 | #include "anno_native.h" 10 | 11 | 12 | static AreaVieweDebugWindow g_AreaVieweDebugWindow; 13 | 14 | AreaVieweDebugWindow::AreaVieweDebugWindow() : DebugWindow() 15 | { 16 | } 17 | 18 | void AreaVieweDebugWindow::Render() 19 | { 20 | std::vector ids; 21 | std::vector addresses; 22 | GetAllAreas(g_ModuleBase, g_BinaryCRC, ids, addresses); 23 | 24 | for (uint64_t& address : addresses) 25 | { 26 | std::string result = GetNameFromGUID(g_ModuleBase, g_BinaryCRC, *(uint32_t*)(address + 8)); 27 | 28 | ImGui::PushID((void*)address); 29 | if (ImGui::Button("Copy address")) 30 | { 31 | ImGuiIO& io = ImGui::GetIO(); 32 | 33 | ANNO_FORMAT(address_string, "%llx", address); 34 | ANNO_LOG("%s", address_string.c_str()); 35 | 36 | io.SetClipboardTextFn(nullptr, address_string.c_str()); 37 | } 38 | ImGui::PopID(); 39 | ImGui::SameLine(); 40 | 41 | ImGui::Text("%llx %s", address, result.c_str()); 42 | } 43 | } 44 | 45 | const char* AreaVieweDebugWindow::GetName() 46 | { 47 | return "Areas"; 48 | } 49 | 50 | -------------------------------------------------------------------------------- /Injected/ui_area_view.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | 5 | class AreaVieweDebugWindow : public DebugWindow 6 | { 7 | public: 8 | AreaVieweDebugWindow(); 9 | 10 | virtual void Render() override; 11 | virtual const char* GetName() override; 12 | }; 13 | 14 | 15 | -------------------------------------------------------------------------------- /Injected/ui_debugger_test.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | #include "hardware_breakpoints.h" 5 | 6 | #include 7 | 8 | class DebuggerTestDebugWindow : public DebugWindow 9 | { 10 | public: 11 | DebuggerTestDebugWindow(); 12 | ~DebuggerTestDebugWindow(); 13 | 14 | virtual void Render() override; 15 | virtual const char* GetName() override; 16 | 17 | bool VehDebuggingEnabled; 18 | PVOID HandlerHandle; 19 | 20 | struct BreakpointInfo 21 | { 22 | std::string label; 23 | bool enabled; 24 | uint64_t address; 25 | uint32_t size; 26 | char addressbuffer[64]; 27 | bool write; 28 | uint64_t actual_address; 29 | HardwareBreakpoint HardwareBreakpoint; 30 | 31 | void Draw(); 32 | }; 33 | 34 | std::array Breakpoints; 35 | 36 | void StartTrace(); 37 | void StopTrace(); 38 | 39 | char FramesToTraceBuffer[1024]; 40 | uint32_t FramesToTrace; 41 | }; 42 | 43 | 44 | -------------------------------------------------------------------------------- /Injected/ui_entity_view.cpp: -------------------------------------------------------------------------------- 1 | #include "ui_entity_view.h" 2 | 3 | #include 4 | #include 5 | 6 | #include "ui.h" 7 | #include "log.h" 8 | #include "anno_tools.h" 9 | #include "anno_native.h" 10 | #include "anno_entity.h" 11 | 12 | void DisplayAnnoEntity(AnnoEntity& Entity) 13 | { 14 | ImGui::Text("Type: %lx %s", Entity.GetTypeId(), Entity.GetTypeName().c_str()); 15 | 16 | ImGui::PushID((void*)Entity.GetAddress()); 17 | ImGui::Text("Entity Address: %llx", Entity.GetAddress()); 18 | ImGui::SameLine(); 19 | if (ImGui::Button("Copy to clipboard")) 20 | { 21 | ImGuiIO& io = ImGui::GetIO(); 22 | 23 | uint64_t EntityAddress = Entity.GetAddress(); 24 | ANNO_FORMAT(address_string, "%llx", EntityAddress); 25 | // ANNO_LOG("%s", EntityAddress.c_str()); 26 | 27 | io.SetClipboardTextFn(nullptr, address_string.c_str()); 28 | } 29 | ImGui::PopID(); 30 | 31 | ImGui::Text("Position: %f, %f", Entity.GetX(), Entity.GetY()); 32 | ImGui::Text("Rotation: %f", Entity.GetRotation()); 33 | 34 | auto Components = Entity.GetComponents(); 35 | 36 | ANNO_FORMAT(components_tree_id, "Components %llx", Entity.GetAddress()) 37 | 38 | if (ImGui::TreeNode(components_tree_id.c_str(), "Components")) 39 | { 40 | for (auto& Component : Components) 41 | { 42 | ANNO_FORMAT(component_tree_id, "Components %llx", Component->GetAddress()); 43 | // ANNO_LOG(component_tree_id.c_str()); 44 | 45 | if (ImGui::TreeNode(component_tree_id.c_str(), "%lx %s", Component->GetId(), Component->GetName().c_str())) 46 | { 47 | ImGui::Text("Address: %llx", Component->GetAddress()); 48 | ImGui::SameLine(); 49 | if (ImGui::Button("Copy to clipboard")) 50 | { 51 | ImGuiIO& io = ImGui::GetIO(); 52 | 53 | uint64_t ComponnetAddress = Component->GetAddress(); 54 | ANNO_FORMAT(component_address_string, "%llx", ComponnetAddress); 55 | // ANNO_LOG("%s", EntityAddress.c_str()); 56 | 57 | io.SetClipboardTextFn(nullptr, component_address_string.c_str()); 58 | } 59 | 60 | Component->Render(); 61 | ImGui::TreePop(); 62 | } 63 | } 64 | ImGui::TreePop(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /Injected/ui_entity_view.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | class AnnoEntity; 4 | void DisplayAnnoEntity(AnnoEntity& Entity); 5 | -------------------------------------------------------------------------------- /Injected/ui_id_to_name.cpp: -------------------------------------------------------------------------------- 1 | #include "ui_id_to_name.h" 2 | 3 | #include 4 | #include 5 | 6 | #include "ui.h" 7 | #include "log.h" 8 | #include "anno_tools.h" 9 | #include "anno_native.h" 10 | 11 | 12 | static IdToNameDebugWindow g_IdToNameDebugWindow; 13 | 14 | IdToNameDebugWindow::IdToNameDebugWindow() : DebugWindow() 15 | { 16 | } 17 | 18 | void IdToNameDebugWindow::Render() 19 | { 20 | bool do_update = false; 21 | 22 | if (ImGui::Checkbox("hex", &IsHex)) 23 | do_update = true; 24 | 25 | ImGui::Text("In-Game ID: "); 26 | ImGui::SameLine(); 27 | 28 | static char address_test_buffer[64] = ""; 29 | if (ImGui::InputText(" ", address_test_buffer, 64)) 30 | do_update = true; 31 | 32 | if (do_update) 33 | { 34 | uint64_t id; 35 | std::stringstream ss; 36 | 37 | if (IsHex) 38 | ss << std::hex; 39 | 40 | ss << address_test_buffer; 41 | ss >> id; 42 | 43 | result = GetNameFromGUID(g_ModuleBase, g_BinaryCRC, id); 44 | } 45 | 46 | ImGui::Text(result.c_str()); 47 | } 48 | 49 | const char* IdToNameDebugWindow::GetName() 50 | { 51 | return "Id to Name"; 52 | } 53 | 54 | -------------------------------------------------------------------------------- /Injected/ui_id_to_name.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | 5 | class IdToNameDebugWindow : public DebugWindow 6 | { 7 | public: 8 | IdToNameDebugWindow(); 9 | 10 | virtual void Render() override; 11 | virtual const char* GetName() override; 12 | 13 | private: 14 | 15 | bool IsHex; 16 | std::string result; 17 | }; 18 | 19 | 20 | -------------------------------------------------------------------------------- /Injected/ui_island_view.cpp: -------------------------------------------------------------------------------- 1 | #include "ui_island_view.h" 2 | 3 | #include 4 | #include 5 | 6 | #include "ui.h" 7 | #include "log.h" 8 | #include "anno_tools.h" 9 | #include "anno_native.h" 10 | 11 | 12 | // static IslandViewDebugWindow g_IslandViewDebugWindow; 13 | 14 | IslandViewDebugWindow::IslandViewDebugWindow() : DebugWindow() 15 | { 16 | } 17 | 18 | void IslandViewDebugWindow::Render() 19 | { 20 | static char address_test_buffer[64] = ""; 21 | ImGui::InputText("Island Address", address_test_buffer, 64, ImGuiInputTextFlags_CharsHexadecimal); 22 | 23 | static int clicked = 0; 24 | if (ImGui::Button("Fetch Data")) 25 | { 26 | ANNO_LOG("%s", address_test_buffer); 27 | 28 | uint64_t address; 29 | std::stringstream ss; 30 | ss << std::hex << address_test_buffer; 31 | ss >> address; 32 | 33 | FetchIslandData(address); 34 | } 35 | 36 | if (island_id != 0) 37 | { 38 | ImGui::Text("island id: %x", island_id); 39 | } 40 | 41 | if (island_name != "") 42 | { 43 | ImGui::Text("island name : %s", island_name.c_str()); 44 | } 45 | } 46 | 47 | const char* IslandViewDebugWindow::GetName() 48 | { 49 | return "Island View"; 50 | } 51 | 52 | void IslandViewDebugWindow::FetchIslandData(uint64_t island_address) 53 | { 54 | island_id = *(uint16_t*)(island_address + 0x4a); 55 | ReadAnnoString(island_address + 0x120, island_name); 56 | ANNO_LOG("string addr: %llx", island_address + 0x120); 57 | } 58 | -------------------------------------------------------------------------------- /Injected/ui_island_view.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | 5 | class IslandViewDebugWindow : public DebugWindow 6 | { 7 | public: 8 | IslandViewDebugWindow(); 9 | 10 | virtual void Render() override; 11 | virtual const char* GetName() override; 12 | 13 | private: 14 | 15 | void FetchIslandData(uint64_t island_address); 16 | 17 | uint16_t island_id = 0; 18 | std::string island_name = ""; 19 | }; 20 | 21 | 22 | -------------------------------------------------------------------------------- /Injected/ui_selection_view.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | 5 | class SelectionVieweDebugWindow : public DebugWindow 6 | { 7 | public: 8 | SelectionVieweDebugWindow(); 9 | 10 | virtual void Render() override; 11 | virtual const char* GetName() override; 12 | 13 | private: 14 | 15 | char XCoordinateTextBuffer[128]; 16 | char YCoordinateTextBuffer[128]; 17 | 18 | float XCoordinate; 19 | float YCoordinate; 20 | 21 | uint64_t _tmp; 22 | }; 23 | 24 | 25 | -------------------------------------------------------------------------------- /Injected/ui_time_view.cpp: -------------------------------------------------------------------------------- 1 | #include "ui_time_view.h" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "ui.h" 8 | #include "log.h" 9 | #include "anno_tools.h" 10 | #include "anno_native.h" 11 | 12 | 13 | static TimeVieweDebugWindow g_AreaVieweDebugWindow; 14 | 15 | TimeVieweDebugWindow::TimeVieweDebugWindow() : DebugWindow() 16 | { 17 | } 18 | 19 | void TimeVieweDebugWindow::Render() 20 | { 21 | uint64_t TimestructOffset = AnnoDataOffset(g_BinaryCRC, DataOffset::TimeStructOffset); 22 | uint64_t ActualOffset = TimestructOffset + g_ModuleBase; 23 | 24 | uint64_t TimestructBaseAddress = *(uint64_t*)(ActualOffset); 25 | 26 | ImGui::Text("Struct Location: %llx", TimestructBaseAddress); 27 | ImGui::SameLine(); 28 | if (ImGui::Button("Copy to clipboard")) 29 | { 30 | ImGuiIO& io = ImGui::GetIO(); 31 | ANNO_FORMAT(string_address, "%llx", TimestructBaseAddress); 32 | io.SetClipboardTextFn(nullptr, string_address.c_str()); 33 | } 34 | 35 | uint64_t Time_ms = *(uint64_t*)(TimestructBaseAddress + 0x60); 36 | uint64_t FrameNumber = *(uint64_t*)(TimestructBaseAddress + 0x70); 37 | ImGui::Text("Frame Nr. %llu", FrameNumber); 38 | 39 | std::chrono::milliseconds ms(Time_ms); 40 | auto secs = std::chrono::duration_cast(ms); 41 | ms -= std::chrono::duration_cast(secs); 42 | auto mins = std::chrono::duration_cast(secs); 43 | secs -= std::chrono::duration_cast(mins); 44 | auto hour = std::chrono::duration_cast(mins); 45 | mins -= std::chrono::duration_cast(hour); 46 | 47 | ImGui::Text("%llu hours %llu minutes %llu seconds", hour.count(), mins.count(), secs.count()); 48 | } 49 | 50 | const char* TimeVieweDebugWindow::GetName() 51 | { 52 | return "Time"; 53 | } 54 | 55 | -------------------------------------------------------------------------------- /Injected/ui_time_view.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "ui.h" 4 | 5 | class TimeVieweDebugWindow : public DebugWindow 6 | { 7 | public: 8 | TimeVieweDebugWindow(); 9 | 10 | virtual void Render() override; 11 | virtual const char* GetName() override; 12 | }; 13 | 14 | 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Egomeh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Monocle/Main.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | var assembly = Assembly.GetExecutingAssembly(); 8 | string temporaryPath = Path.GetTempPath(); 9 | string targetDllPath = Path.Combine(temporaryPath, "Injected.dll"); 10 | 11 | using (Stream? inStream = assembly.GetManifestResourceStream("Monocle.Injected.dll")) 12 | using (FileStream outStream = File.OpenWrite(targetDllPath)) 13 | { 14 | if (inStream != null) 15 | { 16 | BinaryReader reader = new BinaryReader(inStream); 17 | BinaryWriter writer = new BinaryWriter(outStream); 18 | 19 | byte[] buffer = new Byte[1024]; 20 | int bytesRead; 21 | 22 | while ((bytesRead = inStream.Read(buffer, 0, 1024)) > 0) 23 | { 24 | outStream.Write(buffer, 0, bytesRead); 25 | } 26 | } 27 | } 28 | 29 | Injection.InjectDLL("anno1800", Path.GetFullPath(targetDllPath)); 30 | } 31 | } -------------------------------------------------------------------------------- /Monocle/Monocle.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | enable 6 | enable 7 | Exe 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Never 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Anno1800-Scripting-API 2 | 3 | ## Disclaimer 4 | 5 | This is a pet/passion/hobby project! 6 | 7 | No guarantees and no promises. 8 | 9 | I never coded anything of this kind before, so expect some limitations :P 10 | 11 | **Non-affiliated project !** 12 | 13 | This project is in no way affiliated with Ubisoft Blue Byte 14 | or Ubisoft 15 | 16 | 17 | **Also this might count as cheating, so be careful** ! 18 | 19 | Finally, if you look through the code you will notice that many places are quite messy. Since I've never done this before and the game changes I cannot tell if certain techniques work or not. Much of the code could use a caring hand... 20 | 21 | I would however love any feedback on any aspect of the code! 22 | 23 | ## Introduction 24 | 25 | A tool to make scripts for Anno 1800 26 | The idea of the project is to implement a scripting interface with [Anno 1800](https://www.ubisoft.com/en-us/game/anno-1800/). The game itself allows users to control most things through UI and in addition, shipping of goods via trade routes. The goal of this project is to expose as much functionality of the game through a C# scripting API. 27 | 28 | ### Requirements 29 | 30 | * Visual Studio 2019 (C++ and C#) 31 | 32 | ### Getting started 33 | **How to install and use** 34 | 35 | I will probably change a lot when I'm happier with the code. But at current, following should work. 36 | 37 | * Clone the repo to a local folder 38 | * Build the Anno1800ScriptingAPI.sln solution file (in debug mode) 39 | * Run Anno 1800 40 | * Configure the debugging settings by specifying $(TargetDir) as the working directory, as can be seen in the following image doc/surveillancevan_debug_config.png 41 | Launch the solution (still in debug mode) 42 | * Run code using the monocle project (**with administrator rights**) 43 | 44 | ### License 45 | 46 | ``` 47 | This file is part of Anno1800-Scripting-API. 48 | 49 | Anno1800-Scripting-API is libre software: you can redistribute it and/or modify 50 | it under the terms of the MIT License as published by 51 | the MIT. 52 | 53 | Anno1800-Scripting-API is distributed in the hope that it will be useful, 54 | but WITHOUT ANY WARRANTY; without even the implied warranty of 55 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 56 | GNU Lesser General Public License for more details. 57 | 58 | You should have received a copy of the MIT License 59 | along with Anno1800-Scripting-API. If not, see . 60 | ``` 61 | -------------------------------------------------------------------------------- /imgui/.editorconfig: -------------------------------------------------------------------------------- 1 | # See http://editorconfig.org to read about the EditorConfig format. 2 | # - In theory automatically supported by VS2017+ and most common IDE or text editors. 3 | # - In practice VS2019-VS2022 stills don't trim trailing whitespaces correctly :( 4 | # - Suggest installing this to trim whitespaces: 5 | # GitHub https://github.com/madskristensen/TrailingWhitespace 6 | # VS2019 https://marketplace.visualstudio.com/items?itemName=MadsKristensen.TrailingWhitespaceVisualizer 7 | # VS2022 https://marketplace.visualstudio.com/items?itemName=MadsKristensen.TrailingWhitespace64 8 | # (in spite of its name doesn't only visualize but also trims) 9 | # - Alternative for older VS2010 to VS2015: https://marketplace.visualstudio.com/items?itemName=EditorConfigTeam.EditorConfig 10 | 11 | # top-most EditorConfig file 12 | root = true 13 | 14 | # Default settings: 15 | # Use 4 spaces as indentation 16 | [*] 17 | indent_style = space 18 | indent_size = 4 19 | insert_final_newline = true 20 | trim_trailing_whitespace = true 21 | 22 | [imstb_*] 23 | indent_size = 3 24 | trim_trailing_whitespace = false 25 | 26 | [Makefile] 27 | indent_style = tab 28 | indent_size = 4 29 | -------------------------------------------------------------------------------- /imgui/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.c text 4 | *.cpp text 5 | *.h text 6 | *.m text 7 | *.mm text 8 | *.md text 9 | *.txt text 10 | *.html text 11 | *.bat text 12 | *.frag text 13 | *.vert text 14 | *.mkb text 15 | *.icf text 16 | 17 | *.sln text eol=crlf 18 | *.vcxproj text eol=crlf 19 | *.vcxproj.filters text eol=crlf 20 | *.natvis text eol=crlf 21 | 22 | Makefile text eol=lf 23 | *.sh text eol=lf 24 | *.pbxproj text eol=lf 25 | *.storyboard text eol=lf 26 | *.plist text eol=lf 27 | 28 | *.png binary 29 | *.ttf binary 30 | *.lib binary 31 | -------------------------------------------------------------------------------- /imgui/.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['https://github.com/ocornut/imgui/wiki/Sponsors'] 2 | -------------------------------------------------------------------------------- /imgui/.github/issue_template.md: -------------------------------------------------------------------------------- 1 | (Click "Preview" above ^ to turn URL into clickable links) 2 | 3 | 1. FOR FIRST-TIME USERS PROBLEMS COMPILING/LINKING/RUNNING or LOADING FONTS, please use [GitHub Discussions](https://github.com/ocornut/imgui/discussions). EVERYTHING ELSE CAN BE POSTED HERE! 4 | 5 | 2. PLEASE CAREFULLY READ: [FAQ](https://github.com/ocornut/imgui/blob/master/docs/FAQ.md) 6 | 7 | 3. PLEASE CAREFULLY READ: [Contributing Guidelines](https://github.com/ocornut/imgui/blob/master/docs/CONTRIBUTING.md) 8 | 9 | 4. PLEASE MAKE SURE that you have: read the FAQ; explored the contents of `ShowDemoWindow()` including the Examples menu; searched among Issues; used your IDE to search for keywords in all sources and text files; and read the links above. 10 | 11 | 5. Be mindful that messages are being sent to the e-mail box of "Watching" users. Try to proof-read your messages before sending them. Edits are not seen by those users. 12 | 13 | 6. Delete points 1-6 and PLEASE FILL THE TEMPLATE BELOW before submitting your issue. 14 | 15 | Thank you! 16 | 17 | ---- 18 | 19 | _(you may also go to Demo>About Window, and click "Config/Build Information" to obtain a bunch of detailed information that you can paste here)_ 20 | 21 | **Version/Branch of Dear ImGui:** 22 | 23 | Version: XXX 24 | Branch: XXX _(master/viewport/docking/etc.)_ 25 | 26 | **Back-end/Renderer/Compiler/OS** 27 | 28 | Back-ends: imgui_impl_XXX.cpp + imgui_impl_XXX.cpp _(or specify if using a custom engine/back-end)_ 29 | Compiler: XXX _(if the question is related to building or platform specific features)_ 30 | Operating System: XXX 31 | 32 | **My Issue/Question:** 33 | 34 | XXX _(please provide as much context as possible)_ 35 | 36 | **Screenshots/Video** 37 | 38 | XXX _(you can drag files here)_ 39 | 40 | **Standalone, minimal, complete and verifiable example:** _(see https://github.com/ocornut/imgui/issues/2261)_ 41 | ``` 42 | // Here's some code anyone can copy and paste to reproduce your issue 43 | ImGui::Begin("Example Bug"); 44 | MoreCodeToExplainMyIssue(); 45 | ImGui::End(); 46 | ``` 47 | -------------------------------------------------------------------------------- /imgui/.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | (Click "Preview" to turn any http URL into a clickable link) 2 | 3 | 1. PLEASE CAREFULLY READ: [Contributing Guidelines](https://github.com/ocornut/imgui/blob/master/docs/CONTRIBUTING.md) 4 | 5 | 2. Clear this template before submitting your PR. 6 | 7 | -------------------------------------------------------------------------------- /imgui/.github/workflows/scheduled.yml: -------------------------------------------------------------------------------- 1 | # 2 | # This is a dummy workflow used to trigger scheduled builds. Forked repositories most likely should disable this 3 | # workflow to avoid daily builds of inactive repositories. 4 | # 5 | name: scheduled 6 | 7 | on: 8 | schedule: 9 | - cron: '0 9 * * *' 10 | 11 | jobs: 12 | scheduled: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - run: exit 0 16 | -------------------------------------------------------------------------------- /imgui/.github/workflows/static-analysis.yml: -------------------------------------------------------------------------------- 1 | name: static-analysis 2 | 3 | on: 4 | workflow_run: 5 | # Perform static analysis together with build workflow. Build triggers of "build" workflow do not need to be repeated here. 6 | workflows: 7 | - build 8 | types: 9 | - requested 10 | 11 | jobs: 12 | PVS-Studio: 13 | runs-on: ubuntu-22.04 14 | steps: 15 | - uses: actions/checkout@v3 16 | with: 17 | fetch-depth: 1 18 | 19 | - name: Install Dependencies 20 | env: 21 | # The Secret variable setup in GitHub must be in format: "name_or_email key", on a single line 22 | PVS_STUDIO_LICENSE: ${{ secrets.PVS_STUDIO_LICENSE }} 23 | run: | 24 | if [[ "$PVS_STUDIO_LICENSE" != "" ]]; 25 | then 26 | wget -q https://files.viva64.com/etc/pubkey.txt 27 | sudo apt-key add pubkey.txt 28 | sudo wget -O /etc/apt/sources.list.d/viva64.list https://files.viva64.com/etc/viva64.list 29 | sudo apt-get update 30 | sudo apt-get install -y pvs-studio 31 | pvs-studio-analyzer credentials -o pvs-studio.lic $PVS_STUDIO_LICENSE 32 | fi 33 | 34 | - name: PVS-Studio static analysis 35 | run: | 36 | if [[ ! -f pvs-studio.lic ]]; 37 | then 38 | echo "PVS Studio license is missing. No analysis will be performed." 39 | echo "If you have a PVS Studio license please create a project secret named PVS_STUDIO_LICENSE with your license." 40 | echo "You may use a free license. More information at https://www.viva64.com/en/b/0457/" 41 | exit 0 42 | fi 43 | cd examples/example_null 44 | pvs-studio-analyzer trace -- make WITH_EXTRA_WARNINGS=1 45 | pvs-studio-analyzer analyze -e ../../imstb_rectpack.h -e ../../imstb_textedit.h -e ../../imstb_truetype.h -l ../../pvs-studio.lic -o pvs-studio.log 46 | plog-converter -a 'GA:1,2;OP:1' -d V1071 -t errorfile -w pvs-studio.log 47 | -------------------------------------------------------------------------------- /imgui/.gitignore: -------------------------------------------------------------------------------- 1 | ## OSX artifacts 2 | .DS_Store 3 | 4 | ## Dear ImGui artifacts 5 | imgui.ini 6 | 7 | ## General build artifacts 8 | *.o 9 | *.obj 10 | *.exe 11 | examples/*/Debug/* 12 | examples/*/Release/* 13 | examples/*/x64/* 14 | 15 | ## Visual Studio artifacts 16 | .vs 17 | ipch 18 | *.opensdf 19 | *.log 20 | *.pdb 21 | *.ilk 22 | *.user 23 | *.sdf 24 | *.suo 25 | *.VC.db 26 | *.VC.VC.opendb 27 | 28 | ## Getting files created in JSON/Schemas/Catalog/ from a VS2022 update 29 | JSON/ 30 | 31 | ## Commonly used CMake directories 32 | build*/ 33 | 34 | ## Xcode artifacts 35 | project.xcworkspace 36 | xcuserdata 37 | 38 | ## Emscripten artifacts 39 | examples/*.o.tmp 40 | examples/*.out.js 41 | examples/*.out.wasm 42 | examples/example_glfw_opengl3/web/* 43 | examples/example_sdl2_opengl3/web/* 44 | examples/example_emscripten_wgpu/web/* 45 | 46 | ## JetBrains IDE artifacts 47 | .idea 48 | cmake-build-* 49 | 50 | ## Unix executables from our example Makefiles 51 | examples/example_glfw_metal/example_glfw_metal 52 | examples/example_glfw_opengl2/example_glfw_opengl2 53 | examples/example_glfw_opengl3/example_glfw_opengl3 54 | examples/example_glut_opengl2/example_glut_opengl2 55 | examples/example_null/example_null 56 | examples/example_sdl2_metal/example_sdl2_metal 57 | examples/example_sdl2_opengl2/example_sdl2_opengl2 58 | examples/example_sdl2_opengl3/example_sdl2_opengl3 59 | examples/example_sdl2_sdlrenderer/example_sdl2_sdlrenderer 60 | -------------------------------------------------------------------------------- /imgui/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2023 Omar Cornut 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_allegro5.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer + Platform Backend for Allegro 5 2 | // (Info: Allegro 5 is a cross-platform general purpose library for handling windows, inputs, graphics, etc.) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'ALLEGRO_BITMAP*' as ImTextureID. Read the FAQ about ImTextureID! 6 | // [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 ALLEGRO_KEY_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 7 | // [X] Platform: Clipboard support (from Allegro 5.1.12) 8 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 9 | // Issues: 10 | // [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert vertices manually. 11 | // [ ] Platform: Missing gamepad support. 12 | 13 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 14 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 15 | // Learn about Dear ImGui: 16 | // - FAQ https://dearimgui.com/faq 17 | // - Getting Started https://dearimgui.com/getting-started 18 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 19 | // - Introduction, links and more at the top of imgui.cpp 20 | 21 | #pragma once 22 | #include "imgui.h" // IMGUI_IMPL_API 23 | #ifndef IMGUI_DISABLE 24 | 25 | struct ALLEGRO_DISPLAY; 26 | union ALLEGRO_EVENT; 27 | 28 | IMGUI_IMPL_API bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display); 29 | IMGUI_IMPL_API void ImGui_ImplAllegro5_Shutdown(); 30 | IMGUI_IMPL_API void ImGui_ImplAllegro5_NewFrame(); 31 | IMGUI_IMPL_API void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data); 32 | IMGUI_IMPL_API bool ImGui_ImplAllegro5_ProcessEvent(ALLEGRO_EVENT* event); 33 | 34 | // Use if you want to reset your rendering device without losing Dear ImGui state. 35 | IMGUI_IMPL_API bool ImGui_ImplAllegro5_CreateDeviceObjects(); 36 | IMGUI_IMPL_API void ImGui_ImplAllegro5_InvalidateDeviceObjects(); 37 | 38 | #endif // #ifndef IMGUI_DISABLE 39 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_android.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Binding for Android native app 2 | // This needs to be used along with the OpenGL 3 Renderer (imgui_impl_opengl3) 3 | 4 | // Implemented features: 5 | // [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 AKEYCODE_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 6 | // [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen/Pen. 7 | // Missing features: 8 | // [ ] Platform: Clipboard support. 9 | // [ ] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. 10 | // [ ] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: Check if this is even possible with Android. 11 | // Important: 12 | // - Consider using SDL or GLFW backend on Android, which will be more full-featured than this. 13 | // - FIXME: On-screen keyboard currently needs to be enabled by the application (see examples/ and issue #3446) 14 | // - FIXME: Unicode character inputs needs to be passed by Dear ImGui by the application (see examples/ and issue #3446) 15 | 16 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 17 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 18 | // Learn about Dear ImGui: 19 | // - FAQ https://dearimgui.com/faq 20 | // - Getting Started https://dearimgui.com/getting-started 21 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 22 | // - Introduction, links and more at the top of imgui.cpp 23 | 24 | #pragma once 25 | #include "imgui.h" // IMGUI_IMPL_API 26 | #ifndef IMGUI_DISABLE 27 | 28 | struct ANativeWindow; 29 | struct AInputEvent; 30 | 31 | IMGUI_IMPL_API bool ImGui_ImplAndroid_Init(ANativeWindow* window); 32 | IMGUI_IMPL_API int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event); 33 | IMGUI_IMPL_API void ImGui_ImplAndroid_Shutdown(); 34 | IMGUI_IMPL_API void ImGui_ImplAndroid_NewFrame(); 35 | 36 | #endif // #ifndef IMGUI_DISABLE 37 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_dx10.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for DirectX10 2 | // This needs to be used along with a Platform Backend (e.g. Win32) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'ID3D10ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! 6 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 7 | 8 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 9 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 10 | // Learn about Dear ImGui: 11 | // - FAQ https://dearimgui.com/faq 12 | // - Getting Started https://dearimgui.com/getting-started 13 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 14 | // - Introduction, links and more at the top of imgui.cpp 15 | 16 | #pragma once 17 | #include "imgui.h" // IMGUI_IMPL_API 18 | #ifndef IMGUI_DISABLE 19 | 20 | struct ID3D10Device; 21 | 22 | IMGUI_IMPL_API bool ImGui_ImplDX10_Init(ID3D10Device* device); 23 | IMGUI_IMPL_API void ImGui_ImplDX10_Shutdown(); 24 | IMGUI_IMPL_API void ImGui_ImplDX10_NewFrame(); 25 | IMGUI_IMPL_API void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data); 26 | 27 | // Use if you want to reset your rendering device without losing Dear ImGui state. 28 | IMGUI_IMPL_API void ImGui_ImplDX10_InvalidateDeviceObjects(); 29 | IMGUI_IMPL_API bool ImGui_ImplDX10_CreateDeviceObjects(); 30 | 31 | #endif // #ifndef IMGUI_DISABLE 32 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_dx11.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for DirectX11 2 | // This needs to be used along with a Platform Backend (e.g. Win32) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'ID3D11ShaderResourceView*' as ImTextureID. Read the FAQ about ImTextureID! 6 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 7 | 8 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 9 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 10 | // Learn about Dear ImGui: 11 | // - FAQ https://dearimgui.com/faq 12 | // - Getting Started https://dearimgui.com/getting-started 13 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 14 | // - Introduction, links and more at the top of imgui.cpp 15 | 16 | #pragma once 17 | #include "imgui.h" // IMGUI_IMPL_API 18 | #ifndef IMGUI_DISABLE 19 | 20 | struct ID3D11Device; 21 | struct ID3D11DeviceContext; 22 | 23 | IMGUI_IMPL_API bool ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* device_context); 24 | IMGUI_IMPL_API void ImGui_ImplDX11_Shutdown(); 25 | IMGUI_IMPL_API void ImGui_ImplDX11_NewFrame(); 26 | IMGUI_IMPL_API void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data); 27 | 28 | // Use if you want to reset your rendering device without losing Dear ImGui state. 29 | IMGUI_IMPL_API void ImGui_ImplDX11_InvalidateDeviceObjects(); 30 | IMGUI_IMPL_API bool ImGui_ImplDX11_CreateDeviceObjects(); 31 | 32 | #endif // #ifndef IMGUI_DISABLE 33 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_dx12.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for DirectX12 2 | // This needs to be used along with a Platform Backend (e.g. Win32) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'D3D12_GPU_DESCRIPTOR_HANDLE' as ImTextureID. Read the FAQ about ImTextureID! 6 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 7 | 8 | // Important: to compile on 32-bit systems, this backend requires code to be compiled with '#define ImTextureID ImU64'. 9 | // See imgui_impl_dx12.cpp file for details. 10 | 11 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 12 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 13 | // Learn about Dear ImGui: 14 | // - FAQ https://dearimgui.com/faq 15 | // - Getting Started https://dearimgui.com/getting-started 16 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 17 | // - Introduction, links and more at the top of imgui.cpp 18 | 19 | #pragma once 20 | #include "imgui.h" // IMGUI_IMPL_API 21 | #ifndef IMGUI_DISABLE 22 | #include // DXGI_FORMAT 23 | 24 | struct ID3D12Device; 25 | struct ID3D12DescriptorHeap; 26 | struct ID3D12GraphicsCommandList; 27 | struct D3D12_CPU_DESCRIPTOR_HANDLE; 28 | struct D3D12_GPU_DESCRIPTOR_HANDLE; 29 | 30 | // cmd_list is the command list that the implementation will use to render imgui draw lists. 31 | // Before calling the render function, caller must prepare cmd_list by resetting it and setting the appropriate 32 | // render target and descriptor heap that contains font_srv_cpu_desc_handle/font_srv_gpu_desc_handle. 33 | // font_srv_cpu_desc_handle and font_srv_gpu_desc_handle are handles to a single SRV descriptor to use for the internal font texture. 34 | IMGUI_IMPL_API bool ImGui_ImplDX12_Init(ID3D12Device* device, int num_frames_in_flight, DXGI_FORMAT rtv_format, ID3D12DescriptorHeap* cbv_srv_heap, 35 | D3D12_CPU_DESCRIPTOR_HANDLE font_srv_cpu_desc_handle, D3D12_GPU_DESCRIPTOR_HANDLE font_srv_gpu_desc_handle); 36 | IMGUI_IMPL_API void ImGui_ImplDX12_Shutdown(); 37 | IMGUI_IMPL_API void ImGui_ImplDX12_NewFrame(); 38 | IMGUI_IMPL_API void ImGui_ImplDX12_RenderDrawData(ImDrawData* draw_data, ID3D12GraphicsCommandList* graphics_command_list); 39 | 40 | // Use if you want to reset your rendering device without losing Dear ImGui state. 41 | IMGUI_IMPL_API void ImGui_ImplDX12_InvalidateDeviceObjects(); 42 | IMGUI_IMPL_API bool ImGui_ImplDX12_CreateDeviceObjects(); 43 | 44 | #endif // #ifndef IMGUI_DISABLE 45 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_dx9.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for DirectX9 2 | // This needs to be used along with a Platform Backend (e.g. Win32) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'LPDIRECT3DTEXTURE9' as ImTextureID. Read the FAQ about ImTextureID! 6 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 7 | 8 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 9 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 10 | // Learn about Dear ImGui: 11 | // - FAQ https://dearimgui.com/faq 12 | // - Getting Started https://dearimgui.com/getting-started 13 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 14 | // - Introduction, links and more at the top of imgui.cpp 15 | 16 | #pragma once 17 | #include "imgui.h" // IMGUI_IMPL_API 18 | #ifndef IMGUI_DISABLE 19 | 20 | struct IDirect3DDevice9; 21 | 22 | IMGUI_IMPL_API bool ImGui_ImplDX9_Init(IDirect3DDevice9* device); 23 | IMGUI_IMPL_API void ImGui_ImplDX9_Shutdown(); 24 | IMGUI_IMPL_API void ImGui_ImplDX9_NewFrame(); 25 | IMGUI_IMPL_API void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data); 26 | 27 | // Use if you want to reset your rendering device without losing Dear ImGui state. 28 | IMGUI_IMPL_API bool ImGui_ImplDX9_CreateDeviceObjects(); 29 | IMGUI_IMPL_API void ImGui_ImplDX9_InvalidateDeviceObjects(); 30 | 31 | #endif // #ifndef IMGUI_DISABLE 32 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_glut.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Backend for GLUT/FreeGLUT 2 | // This needs to be used along with a Renderer (e.g. OpenGL2) 3 | 4 | // !!! GLUT/FreeGLUT IS OBSOLETE PREHISTORIC SOFTWARE. Using GLUT is not recommended unless you really miss the 90's. !!! 5 | // !!! If someone or something is teaching you GLUT today, you are being abused. Please show some resistance. !!! 6 | // !!! Nowadays, prefer using GLFW or SDL instead! 7 | 8 | // Implemented features: 9 | // [X] Platform: Partial 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 GLUT values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 10 | // Issues: 11 | // [ ] Platform: GLUT is unable to distinguish e.g. Backspace from CTRL+H or TAB from CTRL+I 12 | // [ ] Platform: Missing horizontal mouse wheel support. 13 | // [ ] Platform: Missing mouse cursor shape/visibility support. 14 | // [ ] Platform: Missing clipboard support (not supported by Glut). 15 | // [ ] Platform: Missing gamepad support. 16 | 17 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 18 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 19 | // Learn about Dear ImGui: 20 | // - FAQ https://dearimgui.com/faq 21 | // - Getting Started https://dearimgui.com/getting-started 22 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 23 | // - Introduction, links and more at the top of imgui.cpp 24 | 25 | #pragma once 26 | #ifndef IMGUI_DISABLE 27 | #include "imgui.h" // IMGUI_IMPL_API 28 | 29 | IMGUI_IMPL_API bool ImGui_ImplGLUT_Init(); 30 | IMGUI_IMPL_API void ImGui_ImplGLUT_InstallFuncs(); 31 | IMGUI_IMPL_API void ImGui_ImplGLUT_Shutdown(); 32 | IMGUI_IMPL_API void ImGui_ImplGLUT_NewFrame(); 33 | 34 | // You can call ImGui_ImplGLUT_InstallFuncs() to get all those functions installed automatically, 35 | // or call them yourself from your own GLUT handlers. We are using the same weird names as GLUT for consistency.. 36 | //------------------------------------ GLUT name ---------------------------------------------- Decent Name --------- 37 | IMGUI_IMPL_API void ImGui_ImplGLUT_ReshapeFunc(int w, int h); // ~ ResizeFunc 38 | IMGUI_IMPL_API void ImGui_ImplGLUT_MotionFunc(int x, int y); // ~ MouseMoveFunc 39 | IMGUI_IMPL_API void ImGui_ImplGLUT_MouseFunc(int button, int state, int x, int y); // ~ MouseButtonFunc 40 | IMGUI_IMPL_API void ImGui_ImplGLUT_MouseWheelFunc(int button, int dir, int x, int y); // ~ MouseWheelFunc 41 | IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardFunc(unsigned char c, int x, int y); // ~ CharPressedFunc 42 | IMGUI_IMPL_API void ImGui_ImplGLUT_KeyboardUpFunc(unsigned char c, int x, int y); // ~ CharReleasedFunc 43 | IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialFunc(int key, int x, int y); // ~ KeyPressedFunc 44 | IMGUI_IMPL_API void ImGui_ImplGLUT_SpecialUpFunc(int key, int x, int y); // ~ KeyReleasedFunc 45 | 46 | #endif // #ifndef IMGUI_DISABLE 47 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_opengl2.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for OpenGL2 (legacy OpenGL, fixed pipeline) 2 | // This needs to be used along with a Platform Backend (e.g. GLFW, SDL, Win32, custom..) 3 | 4 | // Implemented features: 5 | // [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! 6 | 7 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 8 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 9 | // Learn about Dear ImGui: 10 | // - FAQ https://dearimgui.com/faq 11 | // - Getting Started https://dearimgui.com/getting-started 12 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 13 | // - Introduction, links and more at the top of imgui.cpp 14 | 15 | // **DO NOT USE THIS CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)** 16 | // **Prefer using the code in imgui_impl_opengl3.cpp** 17 | // This code is mostly provided as a reference to learn how ImGui integration works, because it is shorter to read. 18 | // If your code is using GL3+ context or any semi modern OpenGL calls, using this is likely to make everything more 19 | // complicated, will require your code to reset every single OpenGL attributes to their initial state, and might 20 | // confuse your GPU driver. 21 | // The GL2 code is unable to reset attributes or even call e.g. "glUseProgram(0)" because they don't exist in that API. 22 | 23 | #pragma once 24 | #include "imgui.h" // IMGUI_IMPL_API 25 | #ifndef IMGUI_DISABLE 26 | 27 | IMGUI_IMPL_API bool ImGui_ImplOpenGL2_Init(); 28 | IMGUI_IMPL_API void ImGui_ImplOpenGL2_Shutdown(); 29 | IMGUI_IMPL_API void ImGui_ImplOpenGL2_NewFrame(); 30 | IMGUI_IMPL_API void ImGui_ImplOpenGL2_RenderDrawData(ImDrawData* draw_data); 31 | 32 | // Called by Init/NewFrame/Shutdown 33 | IMGUI_IMPL_API bool ImGui_ImplOpenGL2_CreateFontsTexture(); 34 | IMGUI_IMPL_API void ImGui_ImplOpenGL2_DestroyFontsTexture(); 35 | IMGUI_IMPL_API bool ImGui_ImplOpenGL2_CreateDeviceObjects(); 36 | IMGUI_IMPL_API void ImGui_ImplOpenGL2_DestroyDeviceObjects(); 37 | 38 | #endif // #ifndef IMGUI_DISABLE 39 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_osx.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Backend for OSX / Cocoa 2 | // This needs to be used along with a Renderer (e.g. OpenGL2, OpenGL3, Vulkan, Metal..) 3 | // - Not well tested. If you want a portable application, prefer using the GLFW or SDL platform Backends on Mac. 4 | // - Requires linking with the GameController framework ("-framework GameController"). 5 | 6 | // Implemented features: 7 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 8 | // [X] Platform: Mouse support. Can discriminate Mouse/Pen. 9 | // [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 kVK_* values will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 10 | // [X] Platform: OSX clipboard is supported within core Dear ImGui (no specific code in this backend). 11 | // [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. 12 | // [X] Platform: IME support. 13 | 14 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 15 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 16 | // Learn about Dear ImGui: 17 | // - FAQ https://dearimgui.com/faq 18 | // - Getting Started https://dearimgui.com/getting-started 19 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 20 | // - Introduction, links and more at the top of imgui.cpp 21 | 22 | #include "imgui.h" // IMGUI_IMPL_API 23 | #ifndef IMGUI_DISABLE 24 | 25 | #ifdef __OBJC__ 26 | 27 | @class NSEvent; 28 | @class NSView; 29 | 30 | IMGUI_IMPL_API bool ImGui_ImplOSX_Init(NSView* _Nonnull view); 31 | IMGUI_IMPL_API void ImGui_ImplOSX_Shutdown(); 32 | IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(NSView* _Nullable view); 33 | 34 | #endif 35 | 36 | //----------------------------------------------------------------------------- 37 | // C++ API 38 | //----------------------------------------------------------------------------- 39 | 40 | #ifdef IMGUI_IMPL_METAL_CPP_EXTENSIONS 41 | // #include 42 | #ifndef __OBJC__ 43 | 44 | IMGUI_IMPL_API bool ImGui_ImplOSX_Init(void* _Nonnull view); 45 | IMGUI_IMPL_API void ImGui_ImplOSX_Shutdown(); 46 | IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(void* _Nullable view); 47 | 48 | #endif 49 | #endif 50 | 51 | #endif // #ifndef IMGUI_DISABLE 52 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_sdl2.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Backend for SDL2 2 | // This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) 3 | // (Info: SDL2 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) 4 | 5 | // Implemented features: 6 | // [X] Platform: Clipboard support. 7 | // [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen. 8 | // [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 9 | // [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. 10 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 11 | // [X] Platform: Basic IME support. App needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!. 12 | 13 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 14 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 15 | // Learn about Dear ImGui: 16 | // - FAQ https://dearimgui.com/faq 17 | // - Getting Started https://dearimgui.com/getting-started 18 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 19 | // - Introduction, links and more at the top of imgui.cpp 20 | 21 | #pragma once 22 | #include "imgui.h" // IMGUI_IMPL_API 23 | #ifndef IMGUI_DISABLE 24 | 25 | struct SDL_Window; 26 | struct SDL_Renderer; 27 | typedef union SDL_Event SDL_Event; 28 | 29 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); 30 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); 31 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window); 32 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForMetal(SDL_Window* window); 33 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForSDLRenderer(SDL_Window* window, SDL_Renderer* renderer); 34 | IMGUI_IMPL_API bool ImGui_ImplSDL2_InitForOther(SDL_Window* window); 35 | IMGUI_IMPL_API void ImGui_ImplSDL2_Shutdown(); 36 | IMGUI_IMPL_API void ImGui_ImplSDL2_NewFrame(); 37 | IMGUI_IMPL_API bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); 38 | 39 | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 40 | static inline void ImGui_ImplSDL2_NewFrame(SDL_Window*) { ImGui_ImplSDL2_NewFrame(); } // 1.84: removed unnecessary parameter 41 | #endif 42 | 43 | #endif // #ifndef IMGUI_DISABLE 44 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_sdl3.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Platform Backend for SDL3 (*EXPERIMENTAL*) 2 | // This needs to be used along with a Renderer (e.g. DirectX11, OpenGL3, Vulkan..) 3 | // (Info: SDL3 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.) 4 | // (IMPORTANT: SDL 3.0.0 is NOT YET RELEASED. IT IS POSSIBLE THAT ITS SPECS/API WILL CHANGE BEFORE RELEASE) 5 | 6 | // Implemented features: 7 | // [X] Platform: Clipboard support. 8 | // [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen. 9 | // [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set] 10 | // [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. 11 | // [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. 12 | // Missing features: 13 | // [x] Platform: Basic IME support. Position somehow broken in SDL3 + app needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!. 14 | 15 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 16 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 17 | // Learn about Dear ImGui: 18 | // - FAQ https://dearimgui.com/faq 19 | // - Getting Started https://dearimgui.com/getting-started 20 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 21 | // - Introduction, links and more at the top of imgui.cpp 22 | 23 | #pragma once 24 | #include "imgui.h" // IMGUI_IMPL_API 25 | #ifndef IMGUI_DISABLE 26 | 27 | struct SDL_Window; 28 | struct SDL_Renderer; 29 | typedef union SDL_Event SDL_Event; 30 | 31 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); 32 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForVulkan(SDL_Window* window); 33 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForD3D(SDL_Window* window); 34 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForMetal(SDL_Window* window); 35 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForSDLRenderer(SDL_Window* window, SDL_Renderer* renderer); 36 | IMGUI_IMPL_API bool ImGui_ImplSDL3_InitForOther(SDL_Window* window); 37 | IMGUI_IMPL_API void ImGui_ImplSDL3_Shutdown(); 38 | IMGUI_IMPL_API void ImGui_ImplSDL3_NewFrame(); 39 | IMGUI_IMPL_API bool ImGui_ImplSDL3_ProcessEvent(const SDL_Event* event); 40 | 41 | #endif // #ifndef IMGUI_DISABLE 42 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_sdlrenderer2.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for SDL_Renderer for SDL2 2 | // (Requires: SDL 2.0.17+) 3 | 4 | // Note how SDL_Renderer is an _optional_ component of SDL2. 5 | // For a multi-platform app consider using e.g. SDL+DirectX on Windows and SDL+OpenGL on Linux/OSX. 6 | // If your application will want to render any non trivial amount of graphics other than UI, 7 | // please be aware that SDL_Renderer currently offers a limited graphic API to the end-user and 8 | // it might be difficult to step out of those boundaries. 9 | 10 | // Implemented features: 11 | // [X] Renderer: User texture binding. Use 'SDL_Texture*' as ImTextureID. Read the FAQ about ImTextureID! 12 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 13 | 14 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 15 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 16 | // Learn about Dear ImGui: 17 | // - FAQ https://dearimgui.com/faq 18 | // - Getting Started https://dearimgui.com/getting-started 19 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 20 | // - Introduction, links and more at the top of imgui.cpp 21 | 22 | #pragma once 23 | #ifndef IMGUI_DISABLE 24 | #include "imgui.h" // IMGUI_IMPL_API 25 | 26 | struct SDL_Renderer; 27 | 28 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_Init(SDL_Renderer* renderer); 29 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_Shutdown(); 30 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_NewFrame(); 31 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_RenderDrawData(ImDrawData* draw_data); 32 | 33 | // Called by Init/NewFrame/Shutdown 34 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_CreateFontsTexture(); 35 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_DestroyFontsTexture(); 36 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer2_CreateDeviceObjects(); 37 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer2_DestroyDeviceObjects(); 38 | 39 | #endif // #ifndef IMGUI_DISABLE 40 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_sdlrenderer3.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer Backend for SDL_Renderer for SDL3 2 | // (Requires: SDL 3.0.0+) 3 | 4 | // Note how SDL_Renderer is an _optional_ component of SDL3. 5 | // For a multi-platform app consider using e.g. SDL+DirectX on Windows and SDL+OpenGL on Linux/OSX. 6 | // If your application will want to render any non trivial amount of graphics other than UI, 7 | // please be aware that SDL_Renderer currently offers a limited graphic API to the end-user and 8 | // it might be difficult to step out of those boundaries. 9 | 10 | // Implemented features: 11 | // [X] Renderer: User texture binding. Use 'SDL_Texture*' as ImTextureID. Read the FAQ about ImTextureID! 12 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 13 | 14 | // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 15 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 16 | // Learn about Dear ImGui: 17 | // - FAQ https://dearimgui.com/faq 18 | // - Getting Started https://dearimgui.com/getting-started 19 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 20 | // - Introduction, links and more at the top of imgui.cpp 21 | 22 | #pragma once 23 | #include "imgui.h" // IMGUI_IMPL_API 24 | #ifndef IMGUI_DISABLE 25 | 26 | struct SDL_Renderer; 27 | 28 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer3_Init(SDL_Renderer* renderer); 29 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer3_Shutdown(); 30 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer3_NewFrame(); 31 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer3_RenderDrawData(ImDrawData* draw_data); 32 | 33 | // Called by Init/NewFrame/Shutdown 34 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer3_CreateFontsTexture(); 35 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer3_DestroyFontsTexture(); 36 | IMGUI_IMPL_API bool ImGui_ImplSDLRenderer3_CreateDeviceObjects(); 37 | IMGUI_IMPL_API void ImGui_ImplSDLRenderer3_DestroyDeviceObjects(); 38 | 39 | #endif // #ifndef IMGUI_DISABLE 40 | -------------------------------------------------------------------------------- /imgui/backends/imgui_impl_wgpu.h: -------------------------------------------------------------------------------- 1 | // dear imgui: Renderer for WebGPU 2 | // This needs to be used along with a Platform Binding (e.g. GLFW) 3 | // (Please note that WebGPU is currently experimental, will not run on non-beta browsers, and may break.) 4 | 5 | // Implemented features: 6 | // [X] Renderer: User texture binding. Use 'WGPUTextureView' as ImTextureID. Read the FAQ about ImTextureID! 7 | // [X] Renderer: Large meshes support (64k+ vertices) with 16-bit indices. 8 | 9 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 10 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 11 | // Learn about Dear ImGui: 12 | // - FAQ https://dearimgui.com/faq 13 | // - Getting Started https://dearimgui.com/getting-started 14 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 15 | // - Introduction, links and more at the top of imgui.cpp 16 | 17 | #pragma once 18 | #include "imgui.h" // IMGUI_IMPL_API 19 | #ifndef IMGUI_DISABLE 20 | 21 | #include 22 | 23 | IMGUI_IMPL_API bool ImGui_ImplWGPU_Init(WGPUDevice device, int num_frames_in_flight, WGPUTextureFormat rt_format, WGPUTextureFormat depth_format = WGPUTextureFormat_Undefined); 24 | IMGUI_IMPL_API void ImGui_ImplWGPU_Shutdown(); 25 | IMGUI_IMPL_API void ImGui_ImplWGPU_NewFrame(); 26 | IMGUI_IMPL_API void ImGui_ImplWGPU_RenderDrawData(ImDrawData* draw_data, WGPURenderPassEncoder pass_encoder); 27 | 28 | // Use if you want to reset your rendering device without losing Dear ImGui state. 29 | IMGUI_IMPL_API void ImGui_ImplWGPU_InvalidateDeviceObjects(); 30 | IMGUI_IMPL_API bool ImGui_ImplWGPU_CreateDeviceObjects(); 31 | 32 | #endif // #ifndef IMGUI_DISABLE 33 | -------------------------------------------------------------------------------- /imgui/backends/vulkan/generate_spv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## -V: create SPIR-V binary 3 | ## -x: save binary output as text-based 32-bit hexadecimal numbers 4 | ## -o: output file 5 | glslangValidator -V -x -o glsl_shader.frag.u32 glsl_shader.frag 6 | glslangValidator -V -x -o glsl_shader.vert.u32 glsl_shader.vert 7 | -------------------------------------------------------------------------------- /imgui/backends/vulkan/glsl_shader.frag: -------------------------------------------------------------------------------- 1 | #version 450 core 2 | layout(location = 0) out vec4 fColor; 3 | 4 | layout(set=0, binding=0) uniform sampler2D sTexture; 5 | 6 | layout(location = 0) in struct { 7 | vec4 Color; 8 | vec2 UV; 9 | } In; 10 | 11 | void main() 12 | { 13 | fColor = In.Color * texture(sTexture, In.UV.st); 14 | } 15 | -------------------------------------------------------------------------------- /imgui/backends/vulkan/glsl_shader.vert: -------------------------------------------------------------------------------- 1 | #version 450 core 2 | layout(location = 0) in vec2 aPos; 3 | layout(location = 1) in vec2 aUV; 4 | layout(location = 2) in vec4 aColor; 5 | 6 | layout(push_constant) uniform uPushConstant { 7 | vec2 uScale; 8 | vec2 uTranslate; 9 | } pc; 10 | 11 | out gl_PerVertex { 12 | vec4 gl_Position; 13 | }; 14 | 15 | layout(location = 0) out struct { 16 | vec4 Color; 17 | vec2 UV; 18 | } Out; 19 | 20 | void main() 21 | { 22 | Out.Color = aColor; 23 | Out.UV = aUV; 24 | gl_Position = vec4(aPos * pc.uScale + pc.uTranslate, 0, 1); 25 | } 26 | -------------------------------------------------------------------------------- /imgui/examples/README.txt: -------------------------------------------------------------------------------- 1 | See BACKENDS and EXAMPLES files in the docs/ folder, or on the web at: https://github.com/ocornut/imgui/tree/master/docs 2 | 3 | Backends = Helper code to facilitate integration with platforms/graphics api (used by Examples + should be used by your app). 4 | Examples = Standalone applications showcasing integration with platforms/graphics api. 5 | 6 | Some Examples have extra README files in their respective directory, please check them too! 7 | 8 | Once Dear ImGui is running (in either examples or your own application/game/engine), 9 | run and refer to ImGui::ShowDemoWindow() in imgui_demo.cpp for the end-user API. 10 | -------------------------------------------------------------------------------- /imgui/examples/example_allegro5/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Configuration 3 | 4 | Dear ImGui outputs 16-bit vertex indices by default. 5 | Allegro doesn't support them natively, so we have two solutions: convert the indices manually in imgui_impl_allegro5.cpp, or compile dear imgui with 32-bit indices. 6 | You can either modify imconfig.h that comes with Dear ImGui (easier), or set a C++ preprocessor option IMGUI_USER_CONFIG to find to a filename. 7 | We are providing `imconfig_allegro5.h` that enables 32-bit indices. 8 | Note that the backend supports _BOTH_ 16-bit and 32-bit indices, but 32-bit indices will be slightly faster as they won't require a manual conversion. 9 | 10 | # How to Build 11 | 12 | ### On Ubuntu 14.04+ and macOS 13 | 14 | ```bash 15 | g++ -DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" -I .. -I ../.. -I ../../backends main.cpp ../../backends/imgui_impl_allegro5.cpp ../../imgui*.cpp -lallegro -lallegro_main -lallegro_primitives -o allegro5_example 16 | ``` 17 | 18 | On macOS, install Allegro with homebrew: `brew install allegro`. 19 | 20 | ### On Windows with Visual Studio's CLI 21 | 22 | You may install Allegro using vcpkg: 23 | ``` 24 | git clone https://github.com/Microsoft/vcpkg 25 | cd vcpkg 26 | bootstrap-vcpkg.bat 27 | vcpkg install allegro5 --triplet=x86-windows ; for win32 28 | vcpkg install allegro5 --triplet=x64-windows ; for win64 29 | vcpkg integrate install ; register include / libs in Visual Studio 30 | ``` 31 | 32 | Build: 33 | ``` 34 | set ALLEGRODIR=path_to_your_allegro5_folder 35 | cl /Zi /MD /utf-8 /I %ALLEGRODIR%\include /DIMGUI_USER_CONFIG=\"examples/example_allegro5/imconfig_allegro5.h\" /I .. /I ..\.. /I ..\..\backends main.cpp ..\..\backends\imgui_impl_allegro5.cpp ..\..\imgui*.cpp /link /LIBPATH:%ALLEGRODIR%\lib allegro-5.0.10-monolith-md.lib user32.lib 36 | ``` 37 | -------------------------------------------------------------------------------- /imgui/examples/example_allegro5/example_allegro5.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | sources 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | imgui 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | 53 | 54 | 55 | imgui 56 | 57 | 58 | imgui 59 | 60 | 61 | -------------------------------------------------------------------------------- /imgui/examples/example_allegro5/imconfig_allegro5.h: -------------------------------------------------------------------------------- 1 | //----------------------------------------------------------------------------- 2 | // COMPILE-TIME OPTIONS FOR DEAR IMGUI ALLEGRO 5 EXAMPLE 3 | // See imconfig.h for the full template 4 | // Because Allegro doesn't support 16-bit vertex indices, we enable the compile-time option of imgui to use 32-bit indices 5 | //----------------------------------------------------------------------------- 6 | 7 | #pragma once 8 | 9 | // Use 32-bit vertex indices because Allegro doesn't support 16-bit ones 10 | // This allows us to avoid converting vertices format at runtime 11 | #define ImDrawIdx int 12 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | 3 | project(ImGuiExample) 4 | 5 | set(CMAKE_CXX_STANDARD 11) 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 7 | set(CMAKE_CXX_EXTENSIONS OFF) 8 | 9 | add_library(${CMAKE_PROJECT_NAME} SHARED 10 | ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp 11 | ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui.cpp 12 | ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui_demo.cpp 13 | ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui_draw.cpp 14 | ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui_tables.cpp 15 | ${CMAKE_CURRENT_SOURCE_DIR}/../../imgui_widgets.cpp 16 | ${CMAKE_CURRENT_SOURCE_DIR}/../../backends/imgui_impl_android.cpp 17 | ${CMAKE_CURRENT_SOURCE_DIR}/../../backends/imgui_impl_opengl3.cpp 18 | ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c 19 | ) 20 | 21 | set(CMAKE_SHARED_LINKER_FLAGS 22 | "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate" 23 | ) 24 | 25 | target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE 26 | IMGUI_IMPL_OPENGL_ES3 27 | ) 28 | 29 | target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE 30 | ${CMAKE_CURRENT_SOURCE_DIR}/../.. 31 | ${CMAKE_CURRENT_SOURCE_DIR}/../../backends 32 | ${ANDROID_NDK}/sources/android/native_app_glue 33 | ) 34 | 35 | target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE 36 | android 37 | EGL 38 | GLESv3 39 | log 40 | ) 41 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/.gitignore: -------------------------------------------------------------------------------- 1 | .cxx 2 | .externalNativeBuild 3 | build/ 4 | *.iml 5 | 6 | .idea 7 | .gradle 8 | local.properties 9 | 10 | # Android Studio puts a Gradle wrapper here, that we don't want: 11 | gradle/ 12 | gradlew* 13 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | 4 | android { 5 | compileSdkVersion 33 6 | buildToolsVersion "33.0.2" 7 | ndkVersion "25.2.9519653" 8 | 9 | defaultConfig { 10 | applicationId "imgui.example.android" 11 | namespace "imgui.example.android" 12 | minSdkVersion 24 13 | targetSdkVersion 33 14 | versionCode 1 15 | versionName "1.0" 16 | } 17 | 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') 22 | } 23 | } 24 | 25 | compileOptions { 26 | sourceCompatibility JavaVersion.VERSION_11 27 | targetCompatibility JavaVersion.VERSION_11 28 | } 29 | 30 | kotlinOptions { 31 | jvmTarget="11" 32 | } 33 | 34 | externalNativeBuild { 35 | cmake { 36 | path "../../CMakeLists.txt" 37 | version '3.22.1' 38 | } 39 | } 40 | } 41 | repositories { 42 | mavenCentral() 43 | } 44 | dependencies { 45 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 46 | } 47 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/app/src/main/java/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package imgui.example.android 2 | 3 | import android.app.NativeActivity 4 | import android.os.Bundle 5 | import android.content.Context 6 | import android.view.inputmethod.InputMethodManager 7 | import android.view.KeyEvent 8 | import java.util.concurrent.LinkedBlockingQueue 9 | 10 | class MainActivity : NativeActivity() { 11 | public override fun onCreate(savedInstanceState: Bundle?) { 12 | super.onCreate(savedInstanceState) 13 | } 14 | 15 | fun showSoftInput() { 16 | val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 17 | inputMethodManager.showSoftInput(this.window.decorView, 0) 18 | } 19 | 20 | fun hideSoftInput() { 21 | val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 22 | inputMethodManager.hideSoftInputFromWindow(this.window.decorView.windowToken, 0) 23 | } 24 | 25 | // Queue for the Unicode characters to be polled from native code (via pollUnicodeChar()) 26 | private var unicodeCharacterQueue: LinkedBlockingQueue = LinkedBlockingQueue() 27 | 28 | // We assume dispatchKeyEvent() of the NativeActivity is actually called for every 29 | // KeyEvent and not consumed by any View before it reaches here 30 | override fun dispatchKeyEvent(event: KeyEvent): Boolean { 31 | if (event.action == KeyEvent.ACTION_DOWN) { 32 | unicodeCharacterQueue.offer(event.getUnicodeChar(event.metaState)) 33 | } 34 | return super.dispatchKeyEvent(event) 35 | } 36 | 37 | fun pollUnicodeChar(): Int { 38 | return unicodeCharacterQueue.poll() ?: 0 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.8.0' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.4.1' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | mavenCentral() 19 | } 20 | } 21 | 22 | task clean(type: Delete) { 23 | delete rootProject.buildDir 24 | } 25 | -------------------------------------------------------------------------------- /imgui/examples/example_android_opengl3/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /imgui/examples/example_apple_metal/README.md: -------------------------------------------------------------------------------- 1 | # iOS / OSX Metal example 2 | 3 | ## Introduction 4 | 5 | This example shows how to integrate Dear ImGui with Metal. It is based on the "cross-platform" game template provided with Xcode as of Xcode 9. 6 | 7 | Consider basing your work off the example_glfw_metal/ or example_sdl2_metal/ examples. They are better supported and will be portable unlike this one. 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /imgui/examples/example_apple_metal/iOS/Info-iOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | imgui 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | metal 29 | 30 | UIRequiresFullScreen 31 | 32 | UIStatusBarHidden 33 | 34 | UISupportedInterfaceOrientations 35 | 36 | UIInterfaceOrientationPortrait 37 | UIInterfaceOrientationLandscapeLeft 38 | UIInterfaceOrientationLandscapeRight 39 | UIInterfaceOrientationPortraitUpsideDown 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /imgui/examples/example_apple_metal/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /imgui/examples/example_apple_metal/macOS/Info-macOS.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | imgui 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSMainStoryboardFile 26 | MainMenu 27 | NSPrincipalClass 28 | NSApplication 29 | 30 | 31 | -------------------------------------------------------------------------------- /imgui/examples/example_emscripten_wgpu/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile to use with emscripten 3 | # See https://emscripten.org/docs/getting_started/downloads.html 4 | # for installation instructions. 5 | # 6 | # This Makefile assumes you have loaded emscripten's environment. 7 | # (On Windows, you may need to execute emsdk_env.bat or encmdprompt.bat ahead) 8 | # 9 | # Running `make` will produce three files: 10 | # - web/index.html (current stored in the repository) 11 | # - web/index.js 12 | # - web/index.wasm 13 | # 14 | # All three are needed to run the demo. 15 | 16 | CC = emcc 17 | CXX = em++ 18 | WEB_DIR = web 19 | EXE = $(WEB_DIR)/index.js 20 | IMGUI_DIR = ../.. 21 | SOURCES = main.cpp 22 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 23 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_wgpu.cpp 24 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 25 | UNAME_S := $(shell uname -s) 26 | CPPFLAGS = 27 | LDFLAGS = 28 | EMS = 29 | 30 | ##--------------------------------------------------------------------- 31 | ## EMSCRIPTEN OPTIONS 32 | ##--------------------------------------------------------------------- 33 | 34 | # ("EMS" options gets added to both CPPFLAGS and LDFLAGS, whereas some options are for linker only) 35 | EMS += -s DISABLE_EXCEPTION_CATCHING=1 36 | LDFLAGS += -s USE_GLFW=3 -s USE_WEBGPU=1 37 | LDFLAGS += -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 38 | 39 | # Emscripten allows preloading a file or folder to be accessible at runtime. 40 | # The Makefile for this example project suggests embedding the misc/fonts/ folder into our application, it will then be accessible as "/fonts" 41 | # See documentation for more details: https://emscripten.org/docs/porting/files/packaging_files.html 42 | # (Default value is 0. Set to 1 to enable file-system and include the misc/fonts/ folder as part of the build.) 43 | USE_FILE_SYSTEM ?= 0 44 | ifeq ($(USE_FILE_SYSTEM), 0) 45 | LDFLAGS += -s NO_FILESYSTEM=1 46 | CPPFLAGS += -DIMGUI_DISABLE_FILE_FUNCTIONS 47 | endif 48 | ifeq ($(USE_FILE_SYSTEM), 1) 49 | LDFLAGS += --no-heap-copy --preload-file ../../misc/fonts@/fonts 50 | endif 51 | 52 | ##--------------------------------------------------------------------- 53 | ## FINAL BUILD FLAGS 54 | ##--------------------------------------------------------------------- 55 | 56 | CPPFLAGS += -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 57 | #CPPFLAGS += -g 58 | CPPFLAGS += -Wall -Wformat -Os $(EMS) 59 | #LDFLAGS += --shell-file shell_minimal.html 60 | LDFLAGS += $(EMS) 61 | 62 | ##--------------------------------------------------------------------- 63 | ## BUILD RULES 64 | ##--------------------------------------------------------------------- 65 | 66 | %.o:%.cpp 67 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 68 | 69 | %.o:$(IMGUI_DIR)/%.cpp 70 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 71 | 72 | %.o:$(IMGUI_DIR)/backends/%.cpp 73 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 74 | 75 | all: $(EXE) 76 | @echo Build complete for $(EXE) 77 | 78 | $(WEB_DIR): 79 | mkdir $@ 80 | 81 | serve: all 82 | python3 -m http.server -d $(WEB_DIR) 83 | 84 | $(EXE): $(OBJS) $(WEB_DIR) 85 | $(CXX) -o $@ $(OBJS) $(LDFLAGS) 86 | 87 | clean: 88 | rm -f $(EXE) $(OBJS) $(WEB_DIR)/*.js $(WEB_DIR)/*.wasm $(WEB_DIR)/*.wasm.pre 89 | -------------------------------------------------------------------------------- /imgui/examples/example_emscripten_wgpu/README.md: -------------------------------------------------------------------------------- 1 | ## How to Build 2 | 3 | - You need to install Emscripten from https://emscripten.org/docs/getting_started/downloads.html, and have the environment variables set, as described in https://emscripten.org/docs/getting_started/downloads.html#installation-instructions 4 | 5 | - Depending on your configuration, in Windows you may need to run `emsdk/emsdk_env.bat` in your console to access the Emscripten command-line tools. 6 | 7 | - You may also refer to our [Continuous Integration setup](https://github.com/ocornut/imgui/tree/master/.github/workflows) for Emscripten setup. 8 | 9 | - Then build using `make` while in the `example_emscripten_wgpu/` directory. 10 | 11 | - Requires recent Emscripten as WGPU is still a work-in-progress API. 12 | 13 | ## How to Run 14 | 15 | To run on a local machine: 16 | - Make sure your browse supports WGPU and it is enabled. WGPU is still WIP not enabled by default in most browser. 17 | - `make serve` will use Python3 to spawn a local webserver, you can then browse http://localhost:8000 to access your build. 18 | - Otherwise, generally you will need a local webserver: 19 | - Quoting [https://emscripten.org/docs/getting_started](https://emscripten.org/docs/getting_started/Tutorial.html#generating-html):
20 | _"Unfortunately several browsers (including Chrome, Safari, and Internet Explorer) do not support file:// [XHR](https://emscripten.org/docs/site/glossary.html#term-xhr) requests, and can’t load extra files needed by the HTML (like a .wasm file, or packaged file data as mentioned lower down). For these browsers you’ll need to serve the files using a [local webserver](https://emscripten.org/docs/getting_started/FAQ.html#faq-local-webserver) and then open http://localhost:8000/hello.html."_ 21 | - Emscripten SDK has a handy `emrun` command: `emrun web/example_emscripten_opengl3.html --browser firefox` which will spawn a temporary local webserver (in Firefox). See https://emscripten.org/docs/compiling/Running-html-files-with-emrun.html for details. 22 | - You may use Python 3 builtin webserver: `python -m http.server -d web` (this is what `make serve` uses). 23 | - You may use Python 2 builtin webserver: `cd web && python -m SimpleHTTPServer`. 24 | - If you are accessing the files over a network, certain browsers, such as Firefox, will restrict Gamepad API access to secure contexts only (e.g. https only). 25 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_metal/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # You will need GLFW (http://www.glfw.org): 3 | # brew install glfw 4 | # 5 | 6 | #CXX = g++ 7 | #CXX = clang++ 8 | 9 | EXE = example_glfw_metal 10 | IMGUI_DIR = ../.. 11 | SOURCES = main.mm 12 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 13 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_metal.mm 14 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 15 | 16 | LIBS = -framework Metal -framework MetalKit -framework Cocoa -framework IOKit -framework CoreVideo -framework QuartzCore 17 | LIBS += -L/usr/local/lib -L/opt/homebrew/lib 18 | LIBS += -lglfw 19 | 20 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends -I/usr/local/include -I/opt/homebrew/include 21 | CXXFLAGS += -Wall -Wformat 22 | CFLAGS = $(CXXFLAGS) 23 | 24 | %.o:%.cpp 25 | $(CXX) $(CXXFLAGS) -c -o $@ $< 26 | 27 | %.o:$(IMGUI_DIR)/%.cpp 28 | $(CXX) $(CXXFLAGS) -c -o $@ $< 29 | 30 | %.o:$(IMGUI_DIR)/backends/%.cpp 31 | $(CXX) $(CXXFLAGS) -c -o $@ $< 32 | 33 | %.o:%.mm 34 | $(CXX) $(CXXFLAGS) -ObjC++ -fobjc-weak -fobjc-arc -c -o $@ $< 35 | 36 | %.o:$(IMGUI_DIR)/backends/%.mm 37 | $(CXX) $(CXXFLAGS) -ObjC++ -fobjc-weak -fobjc-arc -c -o $@ $< 38 | 39 | all: $(EXE) 40 | @echo Build complete 41 | 42 | $(EXE): $(OBJS) 43 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 44 | 45 | clean: 46 | rm -f $(EXE) $(OBJS) 47 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl2/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need GLFW (http://www.glfw.org): 6 | # Linux: 7 | # apt-get install libglfw-dev 8 | # Mac OS X: 9 | # brew install glfw 10 | # MSYS2: 11 | # pacman -S --noconfirm --needed mingw-w64-x86_64-toolchain mingw-w64-x86_64-glfw 12 | # 13 | 14 | #CXX = g++ 15 | #CXX = clang++ 16 | 17 | EXE = example_glfw_opengl2 18 | IMGUI_DIR = ../.. 19 | SOURCES = main.cpp 20 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 21 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl2.cpp 22 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 23 | UNAME_S := $(shell uname -s) 24 | 25 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 26 | CXXFLAGS += -g -Wall -Wformat 27 | LIBS = 28 | 29 | ##--------------------------------------------------------------------- 30 | ## BUILD FLAGS PER PLATFORM 31 | ##--------------------------------------------------------------------- 32 | 33 | ifeq ($(UNAME_S), Linux) #LINUX 34 | ECHO_MESSAGE = "Linux" 35 | LIBS += -lGL `pkg-config --static --libs glfw3` 36 | 37 | CXXFLAGS += `pkg-config --cflags glfw3` 38 | CFLAGS = $(CXXFLAGS) 39 | endif 40 | 41 | ifeq ($(UNAME_S), Darwin) #APPLE 42 | ECHO_MESSAGE = "Mac OS X" 43 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo 44 | LIBS += -L/usr/local/lib -L/opt/local/lib -L/opt/homebrew/lib 45 | #LIBS += -lglfw3 46 | LIBS += -lglfw 47 | 48 | CXXFLAGS += -I/usr/local/include -I/opt/local/include -I/opt/homebrew/include 49 | CFLAGS = $(CXXFLAGS) 50 | endif 51 | 52 | ifeq ($(OS), Windows_NT) 53 | ECHO_MESSAGE = "MinGW" 54 | LIBS += -lglfw3 -lgdi32 -lopengl32 -limm32 55 | 56 | CXXFLAGS += `pkg-config --cflags glfw3` 57 | CFLAGS = $(CXXFLAGS) 58 | endif 59 | 60 | ##--------------------------------------------------------------------- 61 | ## BUILD RULES 62 | ##--------------------------------------------------------------------- 63 | 64 | %.o:%.cpp 65 | $(CXX) $(CXXFLAGS) -c -o $@ $< 66 | 67 | %.o:$(IMGUI_DIR)/%.cpp 68 | $(CXX) $(CXXFLAGS) -c -o $@ $< 69 | 70 | %.o:$(IMGUI_DIR)/backends/%.cpp 71 | $(CXX) $(CXXFLAGS) -c -o $@ $< 72 | 73 | all: $(EXE) 74 | @echo Build complete for $(ECHO_MESSAGE) 75 | 76 | $(EXE): $(OBJS) 77 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 78 | 79 | clean: 80 | rm -f $(EXE) $(OBJS) 81 | 82 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl2/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_glfw_opengl2 4 | @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {c336cfe3-f0c4-464c-9ef0-a9e17a7ff222} 6 | 7 | 8 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl3/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need GLFW (http://www.glfw.org): 6 | # Linux: 7 | # apt-get install libglfw-dev 8 | # Mac OS X: 9 | # brew install glfw 10 | # MSYS2: 11 | # pacman -S --noconfirm --needed mingw-w64-x86_64-toolchain mingw-w64-x86_64-glfw 12 | # 13 | 14 | #CXX = g++ 15 | #CXX = clang++ 16 | 17 | EXE = example_glfw_opengl3 18 | IMGUI_DIR = ../.. 19 | SOURCES = main.cpp 20 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 21 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp 22 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 23 | UNAME_S := $(shell uname -s) 24 | LINUX_GL_LIBS = -lGL 25 | 26 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 27 | CXXFLAGS += -g -Wall -Wformat 28 | LIBS = 29 | 30 | ##--------------------------------------------------------------------- 31 | ## OPENGL ES 32 | ##--------------------------------------------------------------------- 33 | 34 | ## This assumes a GL ES library available in the system, e.g. libGLESv2.so 35 | # CXXFLAGS += -DIMGUI_IMPL_OPENGL_ES2 36 | # LINUX_GL_LIBS = -lGLESv2 37 | 38 | ##--------------------------------------------------------------------- 39 | ## BUILD FLAGS PER PLATFORM 40 | ##--------------------------------------------------------------------- 41 | 42 | ifeq ($(UNAME_S), Linux) #LINUX 43 | ECHO_MESSAGE = "Linux" 44 | LIBS += $(LINUX_GL_LIBS) `pkg-config --static --libs glfw3` 45 | 46 | CXXFLAGS += `pkg-config --cflags glfw3` 47 | CFLAGS = $(CXXFLAGS) 48 | endif 49 | 50 | ifeq ($(UNAME_S), Darwin) #APPLE 51 | ECHO_MESSAGE = "Mac OS X" 52 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo 53 | LIBS += -L/usr/local/lib -L/opt/local/lib -L/opt/homebrew/lib 54 | #LIBS += -lglfw3 55 | LIBS += -lglfw 56 | 57 | CXXFLAGS += -I/usr/local/include -I/opt/local/include -I/opt/homebrew/include 58 | CFLAGS = $(CXXFLAGS) 59 | endif 60 | 61 | ifeq ($(OS), Windows_NT) 62 | ECHO_MESSAGE = "MinGW" 63 | LIBS += -lglfw3 -lgdi32 -lopengl32 -limm32 64 | 65 | CXXFLAGS += `pkg-config --cflags glfw3` 66 | CFLAGS = $(CXXFLAGS) 67 | endif 68 | 69 | ##--------------------------------------------------------------------- 70 | ## BUILD RULES 71 | ##--------------------------------------------------------------------- 72 | 73 | %.o:%.cpp 74 | $(CXX) $(CXXFLAGS) -c -o $@ $< 75 | 76 | %.o:$(IMGUI_DIR)/%.cpp 77 | $(CXX) $(CXXFLAGS) -c -o $@ $< 78 | 79 | %.o:$(IMGUI_DIR)/backends/%.cpp 80 | $(CXX) $(CXXFLAGS) -c -o $@ $< 81 | 82 | all: $(EXE) 83 | @echo Build complete for $(ECHO_MESSAGE) 84 | 85 | $(EXE): $(OBJS) 86 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 87 | 88 | clean: 89 | rm -f $(EXE) $(OBJS) 90 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl3/Makefile.emscripten: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile to use with GLFW+emscripten 3 | # See https://emscripten.org/docs/getting_started/downloads.html 4 | # for installation instructions. 5 | # 6 | # This Makefile assumes you have loaded emscripten's environment. 7 | # (On Windows, you may need to execute emsdk_env.bat or encmdprompt.bat ahead) 8 | # 9 | # Running `make -f Makefile.emscripten` will produce three files: 10 | # - web/index.html 11 | # - web/index.js 12 | # - web/index.wasm 13 | # 14 | # All three are needed to run the demo. 15 | 16 | CC = emcc 17 | CXX = em++ 18 | WEB_DIR = web 19 | EXE = $(WEB_DIR)/index.html 20 | IMGUI_DIR = ../.. 21 | SOURCES = main.cpp 22 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 23 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glfw.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp 24 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 25 | UNAME_S := $(shell uname -s) 26 | CPPFLAGS = 27 | LDFLAGS = 28 | EMS = 29 | 30 | ##--------------------------------------------------------------------- 31 | ## EMSCRIPTEN OPTIONS 32 | ##--------------------------------------------------------------------- 33 | 34 | # ("EMS" options gets added to both CPPFLAGS and LDFLAGS, whereas some options are for linker only) 35 | EMS += -s DISABLE_EXCEPTION_CATCHING=1 36 | LDFLAGS += -s USE_GLFW=3 -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s NO_EXIT_RUNTIME=0 -s ASSERTIONS=1 37 | 38 | # Uncomment next line to fix possible rendering bugs with Emscripten version older then 1.39.0 (https://github.com/ocornut/imgui/issues/2877) 39 | #EMS += -s BINARYEN_TRAP_MODE=clamp 40 | #EMS += -s SAFE_HEAP=1 ## Adds overhead 41 | 42 | # Emscripten allows preloading a file or folder to be accessible at runtime. 43 | # The Makefile for this example project suggests embedding the misc/fonts/ folder into our application, it will then be accessible as "/fonts" 44 | # See documentation for more details: https://emscripten.org/docs/porting/files/packaging_files.html 45 | # (Default value is 0. Set to 1 to enable file-system and include the misc/fonts/ folder as part of the build.) 46 | USE_FILE_SYSTEM ?= 0 47 | ifeq ($(USE_FILE_SYSTEM), 0) 48 | LDFLAGS += -s NO_FILESYSTEM=1 49 | CPPFLAGS += -DIMGUI_DISABLE_FILE_FUNCTIONS 50 | endif 51 | ifeq ($(USE_FILE_SYSTEM), 1) 52 | LDFLAGS += --no-heap-copy --preload-file ../../misc/fonts@/fonts 53 | endif 54 | 55 | ##--------------------------------------------------------------------- 56 | ## FINAL BUILD FLAGS 57 | ##--------------------------------------------------------------------- 58 | 59 | CPPFLAGS += -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 60 | #CPPFLAGS += -g 61 | CPPFLAGS += -Wall -Wformat -Os $(EMS) 62 | # LDFLAGS += --shell-file ../libs/emscripten/shell_minimal.html 63 | LDFLAGS += $(EMS) 64 | 65 | ##--------------------------------------------------------------------- 66 | ## BUILD RULES 67 | ##--------------------------------------------------------------------- 68 | 69 | %.o:%.cpp 70 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 71 | 72 | %.o:$(IMGUI_DIR)/%.cpp 73 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 74 | 75 | %.o:$(IMGUI_DIR)/backends/%.cpp 76 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 77 | 78 | all: $(EXE) 79 | @echo Build complete for $(EXE) 80 | 81 | $(WEB_DIR): 82 | mkdir $@ 83 | 84 | serve: all 85 | python3 -m http.server -d $(WEB_DIR) 86 | 87 | $(EXE): $(OBJS) $(WEB_DIR) 88 | $(CXX) -o $@ $(OBJS) $(LDFLAGS) 89 | 90 | clean: 91 | rm -rf $(OBJS) $(WEB_DIR) 92 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl3/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_glfw_opengl3 4 | @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | sources 56 | 57 | 58 | 59 | 60 | 61 | imgui 62 | 63 | 64 | imgui 65 | 66 | 67 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_vulkan/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # Example usage: 2 | # mkdir build 3 | # cd build 4 | # cmake -g "Visual Studio 14 2015" .. 5 | 6 | cmake_minimum_required(VERSION 2.8) 7 | project(imgui_example_glfw_vulkan C CXX) 8 | 9 | if(NOT CMAKE_BUILD_TYPE) 10 | set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE) 11 | endif() 12 | 13 | set(CMAKE_CXX_STANDARD 11) 14 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DVK_PROTOTYPES") 15 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_PROTOTYPES") 16 | 17 | # GLFW 18 | set(GLFW_DIR ../../../glfw) # Set this to point to an up-to-date GLFW repo 19 | option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF) 20 | option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF) 21 | option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF) 22 | option(GLFW_INSTALL "Generate installation target" OFF) 23 | option(GLFW_DOCUMENT_INTERNALS "Include internals in documentation" OFF) 24 | add_subdirectory(${GLFW_DIR} binary_dir EXCLUDE_FROM_ALL) 25 | include_directories(${GLFW_DIR}/include) 26 | 27 | # Dear ImGui 28 | set(IMGUI_DIR ../../) 29 | include_directories(${IMGUI_DIR} ${IMGUI_DIR}/backends ..) 30 | 31 | # Libraries 32 | find_package(Vulkan REQUIRED) 33 | #find_library(VULKAN_LIBRARY 34 | #NAMES vulkan vulkan-1) 35 | #set(LIBRARIES "glfw;${VULKAN_LIBRARY}") 36 | set(LIBRARIES "glfw;Vulkan::Vulkan") 37 | 38 | # Use vulkan headers from glfw: 39 | include_directories(${GLFW_DIR}/deps) 40 | 41 | file(GLOB sources *.cpp) 42 | 43 | add_executable(example_glfw_vulkan ${sources} ${IMGUI_DIR}/backends/imgui_impl_glfw.cpp ${IMGUI_DIR}/backends/imgui_impl_vulkan.cpp ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_tables.cpp ${IMGUI_DIR}/imgui_widgets.cpp) 44 | target_link_libraries(example_glfw_vulkan ${LIBRARIES}) 45 | target_compile_definitions(example_glfw_vulkan PUBLIC -DImTextureID=ImU64) 46 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_vulkan/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | 3 | @set OUT_EXE=example_glfw_vulkan 4 | @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib 7 | 8 | @set OUT_DIR=Debug 9 | mkdir %OUT_DIR% 10 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D ImTextureID=ImU64 %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 11 | 12 | @set OUT_DIR=Release 13 | mkdir %OUT_DIR% 14 | cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% /D ImTextureID=ImU64 %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 15 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_vulkan/build_win64.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of amd64/vcvars32.bat to setup 64-bit command-line compiler. 2 | 3 | @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include 4 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp 5 | @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib 6 | 7 | @set OUT_DIR=Debug 8 | mkdir %OUT_DIR% 9 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D ImTextureID=ImU64 %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 10 | 11 | @set OUT_DIR=Release 12 | mkdir %OUT_DIR% 13 | cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% /D ImTextureID=ImU64 %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 14 | -------------------------------------------------------------------------------- /imgui/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_glut_opengl2/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # Linux: 6 | # apt-get install freeglut3-dev 7 | # 8 | 9 | #CXX = g++ 10 | #CXX = clang++ 11 | 12 | EXE = example_glut_opengl2 13 | IMGUI_DIR = ../.. 14 | SOURCES = main.cpp 15 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 16 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_glut.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl2.cpp 17 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 18 | UNAME_S := $(shell uname -s) 19 | 20 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 21 | CXXFLAGS += -g -Wall -Wformat 22 | LIBS = 23 | 24 | ##--------------------------------------------------------------------- 25 | ## BUILD FLAGS PER PLATFORM 26 | ##--------------------------------------------------------------------- 27 | 28 | ifeq ($(UNAME_S), Linux) #LINUX 29 | ECHO_MESSAGE = "Linux" 30 | LIBS += -lGL -lglut 31 | CFLAGS = $(CXXFLAGS) 32 | endif 33 | 34 | ifeq ($(UNAME_S), Darwin) #APPLE 35 | ECHO_MESSAGE = "Mac OS X" 36 | LIBS += -framework OpenGL -framework GLUT 37 | LIBS += -L/usr/local/lib -L/opt/local/lib 38 | 39 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 40 | CFLAGS = $(CXXFLAGS) 41 | endif 42 | 43 | ifeq ($(OS), Windows_NT) 44 | ECHO_MESSAGE = "MinGW" 45 | LIBS += -lgdi32 -lopengl32 -limm32 46 | ifeq ($(shell pkg-config freeglut --exists 2> /dev/null && echo yes || echo no),yes) 47 | CXXFLAGS += $(shell pkg-config freeglut --cflags) 48 | LIBS += $(shell pkg-config freeglut --libs) 49 | else 50 | LIBS += -lglut 51 | endif 52 | CFLAGS = $(CXXFLAGS) 53 | endif 54 | 55 | ##--------------------------------------------------------------------- 56 | ## BUILD RULES 57 | ##--------------------------------------------------------------------- 58 | 59 | %.o:%.cpp 60 | $(CXX) $(CXXFLAGS) -c -o $@ $< 61 | 62 | %.o:$(IMGUI_DIR)/%.cpp 63 | $(CXX) $(CXXFLAGS) -c -o $@ $< 64 | 65 | %.o:$(IMGUI_DIR)/backends/%.cpp 66 | $(CXX) $(CXXFLAGS) -c -o $@ $< 67 | 68 | all: $(EXE) 69 | @echo Build complete for $(ECHO_MESSAGE) 70 | 71 | $(EXE): $(OBJS) 72 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 73 | 74 | clean: 75 | rm -f $(EXE) $(OBJS) 76 | -------------------------------------------------------------------------------- /imgui/examples/example_glut_opengl2/example_glut_opengl2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {c336cfe3-f0c4-464c-9ef0-a9e17a7ff222} 6 | 7 | 8 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_null/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # Important: This is a "null backend" application, with no visible output or interaction! 6 | # This is used for testing purpose and continuous integration, and has little use for end-user. 7 | # 8 | 9 | # Options 10 | WITH_EXTRA_WARNINGS ?= 0 11 | WITH_FREETYPE ?= 0 12 | 13 | EXE = example_null 14 | IMGUI_DIR = ../.. 15 | SOURCES = main.cpp 16 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 17 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 18 | UNAME_S := $(shell uname -s) 19 | 20 | CXXFLAGS += -std=c++11 -I$(IMGUI_DIR) 21 | CXXFLAGS += -g -Wall -Wformat 22 | LIBS = 23 | 24 | # We use the WITH_EXTRA_WARNINGS flag on our CI setup to eagerly catch zealous warnings 25 | ifeq ($(WITH_EXTRA_WARNINGS), 1) 26 | CXXFLAGS += -Wno-zero-as-null-pointer-constant -Wno-double-promotion -Wno-variadic-macros 27 | endif 28 | 29 | # We use the WITH_FREETYPE flag on our CI setup to test compiling misc/freetype/imgui_freetype.cpp 30 | # (only supported on Linux, and note that the imgui_freetype code currently won't be executed) 31 | ifeq ($(WITH_FREETYPE), 1) 32 | SOURCES += $(IMGUI_DIR)/misc/freetype/imgui_freetype.cpp 33 | CXXFLAGS += $(shell pkg-config --cflags freetype2) 34 | LIBS += $(shell pkg-config --libs freetype2) 35 | endif 36 | 37 | ##--------------------------------------------------------------------- 38 | ## BUILD FLAGS PER PLATFORM 39 | ##--------------------------------------------------------------------- 40 | 41 | ifeq ($(UNAME_S), Linux) #LINUX 42 | ECHO_MESSAGE = "Linux" 43 | ifeq ($(WITH_EXTRA_WARNINGS), 1) 44 | CXXFLAGS += -Wextra -Wpedantic 45 | ifeq ($(shell $(CXX) -v 2>&1 | grep -c "clang version"), 1) 46 | CXXFLAGS += -Wshadow -Wsign-conversion 47 | endif 48 | endif 49 | CFLAGS = $(CXXFLAGS) 50 | endif 51 | 52 | ifeq ($(UNAME_S), Darwin) #APPLE 53 | ECHO_MESSAGE = "Mac OS X" 54 | ifeq ($(WITH_EXTRA_WARNINGS), 1) 55 | CXXFLAGS += -Weverything -Wno-reserved-id-macro -Wno-c++98-compat-pedantic -Wno-padded -Wno-poison-system-directories 56 | endif 57 | CFLAGS = $(CXXFLAGS) 58 | endif 59 | 60 | ifeq ($(OS), Windows_NT) 61 | ECHO_MESSAGE = "MinGW" 62 | ifeq ($(WITH_EXTRA_WARNINGS), 1) 63 | CXXFLAGS += -Wextra -Wpedantic 64 | endif 65 | LIBS += -limm32 66 | CFLAGS = $(CXXFLAGS) 67 | endif 68 | 69 | ##--------------------------------------------------------------------- 70 | ## BUILD RULES 71 | ##--------------------------------------------------------------------- 72 | 73 | %.o:%.cpp 74 | $(CXX) $(CXXFLAGS) -c -o $@ $< 75 | 76 | %.o:$(IMGUI_DIR)/%.cpp 77 | $(CXX) $(CXXFLAGS) -c -o $@ $< 78 | 79 | %.o:$(IMGUI_DIR)/backends/%.cpp 80 | $(CXX) $(CXXFLAGS) -c -o $@ $< 81 | 82 | %.o:$(IMGUI_DIR)/misc/freetype/%.cpp 83 | $(CXX) $(CXXFLAGS) -c -o $@ $< 84 | 85 | all: $(EXE) 86 | @echo Build complete for $(ECHO_MESSAGE) 87 | 88 | $(EXE): $(OBJS) 89 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 90 | 91 | clean: 92 | rm -f $(EXE) $(OBJS) 93 | -------------------------------------------------------------------------------- /imgui/examples/example_null/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | mkdir Debug 3 | cl /nologo /Zi /MD /utf-8 /I ..\.. %* *.cpp ..\..\*.cpp /FeDebug/example_null.exe /FoDebug/ /link gdi32.lib shell32.lib imm32.lib 4 | -------------------------------------------------------------------------------- /imgui/examples/example_null/main.cpp: -------------------------------------------------------------------------------- 1 | // dear imgui: "null" example application 2 | // (compile and link imgui, create context, run headless with NO INPUTS, NO GRAPHICS OUTPUT) 3 | // This is useful to test building, but you cannot interact with anything here! 4 | #include "imgui.h" 5 | #include 6 | 7 | int main(int, char**) 8 | { 9 | IMGUI_CHECKVERSION(); 10 | ImGui::CreateContext(); 11 | ImGuiIO& io = ImGui::GetIO(); 12 | 13 | // Build atlas 14 | unsigned char* tex_pixels = nullptr; 15 | int tex_w, tex_h; 16 | io.Fonts->GetTexDataAsRGBA32(&tex_pixels, &tex_w, &tex_h); 17 | 18 | for (int n = 0; n < 20; n++) 19 | { 20 | printf("NewFrame() %d\n", n); 21 | io.DisplaySize = ImVec2(1920, 1080); 22 | io.DeltaTime = 1.0f / 60.0f; 23 | ImGui::NewFrame(); 24 | 25 | static float f = 0.0f; 26 | ImGui::Text("Hello, world!"); 27 | ImGui::SliderFloat("float", &f, 0.0f, 1.0f); 28 | ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); 29 | ImGui::ShowDemoWindow(nullptr); 30 | 31 | ImGui::Render(); 32 | } 33 | 34 | printf("DestroyContext()\n"); 35 | ImGui::DestroyContext(); 36 | return 0; 37 | } 38 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_directx11/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl2_directx11 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_directx11/example_sdl2_directx11.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} 6 | 7 | 8 | {08e36723-ce4f-4cff-9662-c40801cf1acf} 9 | 10 | 11 | 12 | 13 | imgui 14 | 15 | 16 | imgui 17 | 18 | 19 | imgui 20 | 21 | 22 | sources 23 | 24 | 25 | sources 26 | 27 | 28 | 29 | 30 | imgui 31 | 32 | 33 | sources 34 | 35 | 36 | imgui 37 | 38 | 39 | imgui 40 | 41 | 42 | imgui 43 | 44 | 45 | imgui 46 | 47 | 48 | sources 49 | 50 | 51 | sources 52 | 53 | 54 | 55 | 56 | 57 | imgui 58 | 59 | 60 | imgui 61 | 62 | 63 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_metal/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # You will need SDL2 (http://www.libsdl.org): 3 | # brew install sdl2 4 | # 5 | 6 | #CXX = g++ 7 | #CXX = clang++ 8 | 9 | EXE = example_sdl2_metal 10 | IMGUI_DIR = ../.. 11 | SOURCES = main.mm 12 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 13 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl2.cpp $(IMGUI_DIR)/backends/imgui_impl_metal.mm 14 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 15 | 16 | LIBS = -framework Metal -framework MetalKit -framework Cocoa -framework IOKit -framework CoreVideo -framework QuartzCore 17 | LIBS += `sdl2-config --libs` 18 | LIBS += -L/usr/local/lib 19 | 20 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends -I/usr/local/include 21 | CXXFLAGS += `sdl2-config --cflags` 22 | CXXFLAGS += -Wall -Wformat 23 | CFLAGS = $(CXXFLAGS) 24 | 25 | %.o:%.cpp 26 | $(CXX) $(CXXFLAGS) -c -o $@ $< 27 | 28 | %.o:$(IMGUI_DIR)/%.cpp 29 | $(CXX) $(CXXFLAGS) -c -o $@ $< 30 | 31 | %.o:$(IMGUI_DIR)/backends/%.cpp 32 | $(CXX) $(CXXFLAGS) -c -o $@ $< 33 | 34 | %.o:%.mm 35 | $(CXX) $(CXXFLAGS) -ObjC++ -fobjc-weak -fobjc-arc -c -o $@ $< 36 | 37 | %.o:$(IMGUI_DIR)/backends/%.mm 38 | $(CXX) $(CXXFLAGS) -ObjC++ -fobjc-weak -fobjc-arc -c -o $@ $< 39 | 40 | all: $(EXE) 41 | @echo Build complete 42 | 43 | $(EXE): $(OBJS) 44 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 45 | 46 | clean: 47 | rm -f $(EXE) $(OBJS) 48 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl2/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need SDL2 (http://www.libsdl.org): 6 | # Linux: 7 | # apt-get install libsdl2-dev 8 | # Mac OS X: 9 | # brew install sdl2 10 | # MSYS2: 11 | # pacman -S mingw-w64-i686-SDL2 12 | # 13 | 14 | #CXX = g++ 15 | #CXX = clang++ 16 | 17 | EXE = example_sdl2_opengl2 18 | IMGUI_DIR = ../.. 19 | SOURCES = main.cpp 20 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 21 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl2.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl2.cpp 22 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 23 | UNAME_S := $(shell uname -s) 24 | 25 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 26 | CXXFLAGS += -g -Wall -Wformat 27 | LIBS = 28 | 29 | ##--------------------------------------------------------------------- 30 | ## BUILD FLAGS PER PLATFORM 31 | ##--------------------------------------------------------------------- 32 | 33 | ifeq ($(UNAME_S), Linux) #LINUX 34 | ECHO_MESSAGE = "Linux" 35 | LIBS += -lGL -ldl `sdl2-config --libs` 36 | 37 | CXXFLAGS += `sdl2-config --cflags` 38 | CFLAGS = $(CXXFLAGS) 39 | endif 40 | 41 | ifeq ($(UNAME_S), Darwin) #APPLE 42 | ECHO_MESSAGE = "Mac OS X" 43 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl2-config --libs` 44 | LIBS += -L/usr/local/lib -L/opt/local/lib 45 | 46 | CXXFLAGS += `sdl2-config --cflags` 47 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 48 | CFLAGS = $(CXXFLAGS) 49 | endif 50 | 51 | ifeq ($(OS), Windows_NT) 52 | ECHO_MESSAGE = "MinGW" 53 | LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl2` 54 | 55 | CXXFLAGS += `pkg-config --cflags sdl2` 56 | CFLAGS = $(CXXFLAGS) 57 | endif 58 | 59 | ##--------------------------------------------------------------------- 60 | ## BUILD RULES 61 | ##--------------------------------------------------------------------- 62 | 63 | %.o:%.cpp 64 | $(CXX) $(CXXFLAGS) -c -o $@ $< 65 | 66 | %.o:$(IMGUI_DIR)/%.cpp 67 | $(CXX) $(CXXFLAGS) -c -o $@ $< 68 | 69 | %.o:$(IMGUI_DIR)/backends/%.cpp 70 | $(CXX) $(CXXFLAGS) -c -o $@ $< 71 | 72 | all: $(EXE) 73 | @echo Build complete for $(ECHO_MESSAGE) 74 | 75 | $(EXE): $(OBJS) 76 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 77 | 78 | clean: 79 | rm -f $(EXE) $(OBJS) 80 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl2/README.md: -------------------------------------------------------------------------------- 1 | 2 | # How to Build 3 | 4 | - On Windows with Visual Studio's IDE 5 | 6 | Use the provided project file (.vcxproj). Add to solution (imgui_examples.sln) if necessary. 7 | 8 | - On Windows with Visual Studio's CLI 9 | 10 | ``` 11 | set SDL2_DIR=path_to_your_sdl2_folder 12 | cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_opengl2.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console 13 | # ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries 14 | # or for 64-bit: 15 | cl /Zi /MD /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_opengl2.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console 16 | ``` 17 | 18 | - On Linux and similar Unixes 19 | 20 | ``` 21 | c++ `sdl2-config --cflags` -I .. -I ../.. -I ../../backends main.cpp ../../backends/imgui_impl_sdl2.cpp ../../backends/imgui_impl_opengl2.cpp ../../imgui*.cpp `sdl2-config --libs` -lGL 22 | ``` 23 | 24 | - On Mac OS X 25 | 26 | ``` 27 | brew install sdl2 28 | c++ `sdl2-config --cflags` -I .. -I ../.. -I ../../backends main.cpp ../../backends/imgui_impl_sdl2.cpp ../../backends/imgui_impl_opengl2.cpp ../../imgui*.cpp `sdl2-config --libs` -framework OpenGl 29 | ``` 30 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl2/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl2_opengl2 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl2/example_sdl2_opengl2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl3/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need SDL2 (http://www.libsdl.org): 6 | # Linux: 7 | # apt-get install libsdl2-dev 8 | # Mac OS X: 9 | # brew install sdl2 10 | # MSYS2: 11 | # pacman -S mingw-w64-i686-SDL2 12 | # 13 | 14 | #CXX = g++ 15 | #CXX = clang++ 16 | 17 | EXE = example_sdl2_opengl3 18 | IMGUI_DIR = ../.. 19 | SOURCES = main.cpp 20 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 21 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl2.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp 22 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 23 | UNAME_S := $(shell uname -s) 24 | LINUX_GL_LIBS = -lGL 25 | 26 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 27 | CXXFLAGS += -g -Wall -Wformat 28 | LIBS = 29 | 30 | ##--------------------------------------------------------------------- 31 | ## OPENGL ES 32 | ##--------------------------------------------------------------------- 33 | 34 | ## This assumes a GL ES library available in the system, e.g. libGLESv2.so 35 | # CXXFLAGS += -DIMGUI_IMPL_OPENGL_ES2 36 | # LINUX_GL_LIBS = -lGLESv2 37 | ## If you're on a Raspberry Pi and want to use the legacy drivers, 38 | ## use the following instead: 39 | # LINUX_GL_LIBS = -L/opt/vc/lib -lbrcmGLESv2 40 | 41 | ##--------------------------------------------------------------------- 42 | ## BUILD FLAGS PER PLATFORM 43 | ##--------------------------------------------------------------------- 44 | 45 | ifeq ($(UNAME_S), Linux) #LINUX 46 | ECHO_MESSAGE = "Linux" 47 | LIBS += $(LINUX_GL_LIBS) -ldl `sdl2-config --libs` 48 | 49 | CXXFLAGS += `sdl2-config --cflags` 50 | CFLAGS = $(CXXFLAGS) 51 | endif 52 | 53 | ifeq ($(UNAME_S), Darwin) #APPLE 54 | ECHO_MESSAGE = "Mac OS X" 55 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl2-config --libs` 56 | LIBS += -L/usr/local/lib -L/opt/local/lib 57 | 58 | CXXFLAGS += `sdl2-config --cflags` 59 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 60 | CFLAGS = $(CXXFLAGS) 61 | endif 62 | 63 | ifeq ($(OS), Windows_NT) 64 | ECHO_MESSAGE = "MinGW" 65 | LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl2` 66 | 67 | CXXFLAGS += `pkg-config --cflags sdl2` 68 | CFLAGS = $(CXXFLAGS) 69 | endif 70 | 71 | ##--------------------------------------------------------------------- 72 | ## BUILD RULES 73 | ##--------------------------------------------------------------------- 74 | 75 | %.o:%.cpp 76 | $(CXX) $(CXXFLAGS) -c -o $@ $< 77 | 78 | %.o:$(IMGUI_DIR)/%.cpp 79 | $(CXX) $(CXXFLAGS) -c -o $@ $< 80 | 81 | %.o:$(IMGUI_DIR)/backends/%.cpp 82 | $(CXX) $(CXXFLAGS) -c -o $@ $< 83 | 84 | all: $(EXE) 85 | @echo Build complete for $(ECHO_MESSAGE) 86 | 87 | $(EXE): $(OBJS) 88 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 89 | 90 | clean: 91 | rm -f $(EXE) $(OBJS) 92 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl3/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl2_opengl3 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_opengl3/example_sdl2_opengl3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | sources 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | imgui 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | sources 56 | 57 | 58 | 59 | 60 | 61 | imgui 62 | 63 | 64 | imgui 65 | 66 | 67 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_sdlrenderer2/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need SDL2 (http://www.libsdl.org): 6 | # Linux: 7 | # apt-get install libsdl2-dev 8 | # Mac OS X: 9 | # brew install sdl2 10 | # MSYS2: 11 | # pacman -S mingw-w64-i686-SDL2 12 | # 13 | 14 | #CXX = g++ 15 | #CXX = clang++ 16 | 17 | EXE = example_sdl2_sdlrenderer2 18 | IMGUI_DIR = ../.. 19 | SOURCES = main.cpp 20 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 21 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl2.cpp $(IMGUI_DIR)/backends/imgui_impl_sdlrenderer2.cpp 22 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 23 | UNAME_S := $(shell uname -s) 24 | 25 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 26 | CXXFLAGS += -g -Wall -Wformat 27 | LIBS = 28 | 29 | ##--------------------------------------------------------------------- 30 | ## BUILD FLAGS PER PLATFORM 31 | ##--------------------------------------------------------------------- 32 | 33 | ifeq ($(UNAME_S), Linux) #LINUX 34 | ECHO_MESSAGE = "Linux" 35 | LIBS += -lGL -ldl `sdl2-config --libs` 36 | 37 | CXXFLAGS += `sdl2-config --cflags` 38 | CFLAGS = $(CXXFLAGS) 39 | endif 40 | 41 | ifeq ($(UNAME_S), Darwin) #APPLE 42 | ECHO_MESSAGE = "Mac OS X" 43 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl2-config --libs` 44 | LIBS += -L/usr/local/lib -L/opt/local/lib 45 | 46 | CXXFLAGS += `sdl2-config --cflags` 47 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 48 | CFLAGS = $(CXXFLAGS) 49 | endif 50 | 51 | ifeq ($(OS), Windows_NT) 52 | ECHO_MESSAGE = "MinGW" 53 | LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl2` 54 | 55 | CXXFLAGS += `pkg-config --cflags sdl2` 56 | CFLAGS = $(CXXFLAGS) 57 | endif 58 | 59 | ##--------------------------------------------------------------------- 60 | ## BUILD RULES 61 | ##--------------------------------------------------------------------- 62 | 63 | %.o:%.cpp 64 | $(CXX) $(CXXFLAGS) -c -o $@ $< 65 | 66 | %.o:$(IMGUI_DIR)/%.cpp 67 | $(CXX) $(CXXFLAGS) -c -o $@ $< 68 | 69 | %.o:$(IMGUI_DIR)/backends/%.cpp 70 | $(CXX) $(CXXFLAGS) -c -o $@ $< 71 | 72 | all: $(EXE) 73 | @echo Build complete for $(ECHO_MESSAGE) 74 | 75 | $(EXE): $(OBJS) 76 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 77 | 78 | clean: 79 | rm -f $(EXE) $(OBJS) 80 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_sdlrenderer2/README.md: -------------------------------------------------------------------------------- 1 | 2 | # How to Build 3 | 4 | - On Windows with Visual Studio's CLI 5 | 6 | ``` 7 | set SDL2_DIR=path_to_your_sdl2_folder 8 | cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_sdlrenderer2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_sdlrenderer.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /subsystem:console 9 | # ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries 10 | # or for 64-bit: 11 | cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_sdlrenderer2.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_sdlrenderer.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL2.lib SDL2main.lib /subsystem:console 12 | ``` 13 | 14 | - On Linux and similar Unixes 15 | 16 | ``` 17 | c++ `sdl2-config --cflags` -I .. -I ../.. main.cpp ../../backends/imgui_impl_sdl2.cpp ../../backends/imgui_impl_sdlrenderer2.cpp ../../imgui*.cpp `sdl2-config --libs` -lGL 18 | ``` 19 | 20 | - On Mac OS X 21 | 22 | ``` 23 | brew install sdl2 24 | c++ `sdl2-config --cflags` -I .. -I ../.. main.cpp ../../backends/imgui_impl_sdl2.cpp ../../backends/imgui_impl_sdlrenderer2.cpp ../../imgui*.cpp `sdl2-config --libs` -framework OpenGl 25 | ``` 26 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_sdlrenderer2/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl2_sdlrenderer_ 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_sdlrenderer2.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_sdlrenderer2/example_sdl2_sdlrenderer2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | imgui 27 | 28 | 29 | imgui 30 | 31 | 32 | sources 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_vulkan/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | 3 | @set OUT_EXE=example_sdl2_vulkan 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I %VULKAN_SDK%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 /libpath:%VULKAN_SDK%\lib32 SDL2.lib SDL2main.lib shell32.lib vulkan-1.lib 7 | 8 | @set OUT_DIR=Debug 9 | mkdir %OUT_DIR% 10 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D ImTextureID=ImU64 %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 11 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl2_vulkan/example_sdl2_vulkan.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | sources 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | imgui 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_opengl3/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need SDL3 (http://www.libsdl.org) which is still unreleased/unpackaged. 6 | 7 | #CXX = g++ 8 | #CXX = clang++ 9 | 10 | EXE = example_sdl3_opengl3 11 | IMGUI_DIR = ../.. 12 | SOURCES = main.cpp 13 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 14 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl3.cpp $(IMGUI_DIR)/backends/imgui_impl_opengl3.cpp 15 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 16 | UNAME_S := $(shell uname -s) 17 | LINUX_GL_LIBS = -lGL 18 | 19 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 20 | CXXFLAGS += -g -Wall -Wformat 21 | LIBS = 22 | 23 | ##--------------------------------------------------------------------- 24 | ## OPENGL ES 25 | ##--------------------------------------------------------------------- 26 | 27 | ## This assumes a GL ES library available in the system, e.g. libGLESv2.so 28 | # CXXFLAGS += -DIMGUI_IMPL_OPENGL_ES2 29 | # LINUX_GL_LIBS = -lGLESv2 30 | ## If you're on a Raspberry Pi and want to use the legacy drivers, 31 | ## use the following instead: 32 | # LINUX_GL_LIBS = -L/opt/vc/lib -lbrcmGLESv2 33 | 34 | ##--------------------------------------------------------------------- 35 | ## BUILD FLAGS PER PLATFORM 36 | ##--------------------------------------------------------------------- 37 | 38 | ifeq ($(UNAME_S), Linux) #LINUX 39 | ECHO_MESSAGE = "Linux" 40 | LIBS += $(LINUX_GL_LIBS) -ldl `sdl3-config --libs` 41 | 42 | CXXFLAGS += `sdl3-config --cflags` 43 | CFLAGS = $(CXXFLAGS) 44 | endif 45 | 46 | ifeq ($(UNAME_S), Darwin) #APPLE 47 | ECHO_MESSAGE = "Mac OS X" 48 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl3-config --libs` 49 | LIBS += -L/usr/local/lib -L/opt/local/lib 50 | 51 | CXXFLAGS += `sdl3-config --cflags` 52 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 53 | CFLAGS = $(CXXFLAGS) 54 | endif 55 | 56 | ifeq ($(OS), Windows_NT) 57 | ECHO_MESSAGE = "MinGW" 58 | LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl3` 59 | 60 | CXXFLAGS += `pkg-config --cflags sdl3` 61 | CFLAGS = $(CXXFLAGS) 62 | endif 63 | 64 | ##--------------------------------------------------------------------- 65 | ## BUILD RULES 66 | ##--------------------------------------------------------------------- 67 | 68 | %.o:%.cpp 69 | $(CXX) $(CXXFLAGS) -c -o $@ $< 70 | 71 | %.o:$(IMGUI_DIR)/%.cpp 72 | $(CXX) $(CXXFLAGS) -c -o $@ $< 73 | 74 | %.o:$(IMGUI_DIR)/backends/%.cpp 75 | $(CXX) $(CXXFLAGS) -c -o $@ $< 76 | 77 | all: $(EXE) 78 | @echo Build complete for $(ECHO_MESSAGE) 79 | 80 | $(EXE): $(OBJS) 81 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 82 | 83 | clean: 84 | rm -f $(EXE) $(OBJS) 85 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_opengl3/README.md: -------------------------------------------------------------------------------- 1 | 2 | # How to Build 3 | 4 | ## Windows with Visual Studio's IDE 5 | 6 | Use the provided project file (.vcxproj). Add to solution (imgui_examples.sln) if necessary. 7 | 8 | ## Windows with Visual Studio's CLI 9 | 10 | Use build_win32.bat or directly: 11 | ``` 12 | set SDL2_DIR=path_to_your_sdl3_folder 13 | cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL3.lib opengl32.lib /subsystem:console 14 | # ^^ include paths ^^ source files ^^ output exe ^^ output dir ^^ libraries 15 | # or for 64-bit: 16 | cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x64 SDL3.lib SDL2mainopengl32.lib /subsystem:console 17 | ``` 18 | 19 | ## Linux and similar Unixes 20 | 21 | Use our Makefile or directly: 22 | ``` 23 | c++ `sdl3-config --cflags` -I .. -I ../.. -I ../../backends 24 | main.cpp ../../backends/imgui_impl_sdl3.cpp ../../backends/imgui_impl_opengl3.cpp ../../imgui*.cpp 25 | `sdl3-config --libs` -lGL -ldl 26 | ``` 27 | 28 | ## macOS 29 | 30 | Use our Makefile or directly: 31 | ``` 32 | brew install sdl3 33 | c++ `sdl3-config --cflags` -I .. -I ../.. -I ../../backends 34 | main.cpp ../../backends/imgui_impl_sdl3.cpp ../../backends/imgui_impl_opengl3.cpp ../../imgui*.cpp 35 | `sdl3-config --libs` -framework OpenGl -framework CoreFoundation 36 | ``` 37 | 38 | ## Emscripten 39 | 40 | As of 2023-05-30 Emscripten doesn't support SDL3 yet. 41 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_opengl3/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl3_opengl3 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib opengl32.lib shell32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_opengl3/example_sdl3_opengl3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | sources 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | imgui 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | sources 56 | 57 | 58 | 59 | 60 | 61 | imgui 62 | 63 | 64 | imgui 65 | 66 | 67 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_sdlrenderer3/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with MSYS2/MINGW, Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # You will need SDL3 (http://www.libsdl.org) which is still unreleased/unpackaged. 6 | 7 | #CXX = g++ 8 | #CXX = clang++ 9 | 10 | EXE = example_sdl3_sdlrenderer3 11 | IMGUI_DIR = ../.. 12 | SOURCES = main.cpp 13 | SOURCES += $(IMGUI_DIR)/imgui.cpp $(IMGUI_DIR)/imgui_demo.cpp $(IMGUI_DIR)/imgui_draw.cpp $(IMGUI_DIR)/imgui_tables.cpp $(IMGUI_DIR)/imgui_widgets.cpp 14 | SOURCES += $(IMGUI_DIR)/backends/imgui_impl_sdl3.cpp $(IMGUI_DIR)/backends/imgui_impl_sdlrenderer3.cpp 15 | OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) 16 | UNAME_S := $(shell uname -s) 17 | LINUX_GL_LIBS = -lGL 18 | 19 | CXXFLAGS = -std=c++11 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends 20 | CXXFLAGS += -g -Wall -Wformat 21 | LIBS = 22 | 23 | ##--------------------------------------------------------------------- 24 | ## BUILD FLAGS PER PLATFORM 25 | ##--------------------------------------------------------------------- 26 | 27 | ifeq ($(UNAME_S), Linux) #LINUX 28 | ECHO_MESSAGE = "Linux" 29 | LIBS += -ldl `sdl3-config --libs` 30 | 31 | CXXFLAGS += `sdl3-config --cflags` 32 | CFLAGS = $(CXXFLAGS) 33 | endif 34 | 35 | ifeq ($(UNAME_S), Darwin) #APPLE 36 | ECHO_MESSAGE = "Mac OS X" 37 | LIBS += -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo `sdl3-config --libs` 38 | LIBS += -L/usr/local/lib -L/opt/local/lib 39 | 40 | CXXFLAGS += `sdl3-config --cflags` 41 | CXXFLAGS += -I/usr/local/include -I/opt/local/include 42 | CFLAGS = $(CXXFLAGS) 43 | endif 44 | 45 | ifeq ($(OS), Windows_NT) 46 | ECHO_MESSAGE = "MinGW" 47 | LIBS += -lgdi32 -lopengl32 -limm32 `pkg-config --static --libs sdl3` 48 | 49 | CXXFLAGS += `pkg-config --cflags sdl3` 50 | CFLAGS = $(CXXFLAGS) 51 | endif 52 | 53 | ##--------------------------------------------------------------------- 54 | ## BUILD RULES 55 | ##--------------------------------------------------------------------- 56 | 57 | %.o:%.cpp 58 | $(CXX) $(CXXFLAGS) -c -o $@ $< 59 | 60 | %.o:$(IMGUI_DIR)/%.cpp 61 | $(CXX) $(CXXFLAGS) -c -o $@ $< 62 | 63 | %.o:$(IMGUI_DIR)/backends/%.cpp 64 | $(CXX) $(CXXFLAGS) -c -o $@ $< 65 | 66 | all: $(EXE) 67 | @echo Build complete for $(ECHO_MESSAGE) 68 | 69 | $(EXE): $(OBJS) 70 | $(CXX) -o $@ $^ $(CXXFLAGS) $(LIBS) 71 | 72 | clean: 73 | rm -f $(EXE) $(OBJS) 74 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_sdlrenderer3/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_sdl3_sdlrenderer3 4 | @set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_sdlrenderer3.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console 9 | -------------------------------------------------------------------------------- /imgui/examples/example_sdl3_sdlrenderer3/example_sdl3_sdlrenderer3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {20b90ce4-7fcb-4731-b9a0-075f875de82d} 6 | 7 | 8 | {f18ab499-84e1-499f-8eff-9754361e0e52} 9 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 10 | 11 | 12 | 13 | 14 | imgui 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | sources 24 | 25 | 26 | sources 27 | 28 | 29 | imgui 30 | 31 | 32 | imgui 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx10/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_win32_directx10 4 | @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\backends\imgui_impl_dx10.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d10.lib d3dcompiler.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx10/example_win32_directx10.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} 6 | 7 | 8 | {08e36723-ce4f-4cff-9662-c40801cf1acf} 9 | 10 | 11 | 12 | 13 | imgui 14 | 15 | 16 | imgui 17 | 18 | 19 | imgui 20 | 21 | 22 | sources 23 | 24 | 25 | sources 26 | 27 | 28 | 29 | 30 | imgui 31 | 32 | 33 | sources 34 | 35 | 36 | imgui 37 | 38 | 39 | imgui 40 | 41 | 42 | sources 43 | 44 | 45 | sources 46 | 47 | 48 | imgui 49 | 50 | 51 | imgui 52 | 53 | 54 | 55 | 56 | 57 | imgui 58 | 59 | 60 | imgui 61 | 62 | 63 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx11/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_win32_directx11 4 | @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | 10 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx11/example_win32_directx11.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {0587d7a3-f2ce-4d56-b84f-a0005d3bfce6} 6 | 7 | 8 | {08e36723-ce4f-4cff-9662-c40801cf1acf} 9 | 10 | 11 | 12 | 13 | imgui 14 | 15 | 16 | imgui 17 | 18 | 19 | imgui 20 | 21 | 22 | sources 23 | 24 | 25 | sources 26 | 27 | 28 | 29 | 30 | imgui 31 | 32 | 33 | sources 34 | 35 | 36 | imgui 37 | 38 | 39 | imgui 40 | 41 | 42 | imgui 43 | 44 | 45 | sources 46 | 47 | 48 | sources 49 | 50 | 51 | imgui 52 | 53 | 54 | 55 | 56 | 57 | imgui 58 | 59 | 60 | imgui 61 | 62 | 63 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx12/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @REM Important: to build on 32-bit systems, the DX12 backends needs '#define ImTextureID ImU64', so we pass it here. 3 | @set OUT_DIR=Debug 4 | @set OUT_EXE=example_win32_directx12 5 | @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" 6 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx12.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp 7 | @set LIBS=d3d12.lib d3dcompiler.lib dxgi.lib 8 | mkdir Debug 9 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D ImTextureID=ImU64 /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 10 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx12/example_win32_directx12.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {fb3d294f-51ec-478e-a627-25831c80fefd} 6 | 7 | 8 | {4f33ddea-9910-456d-b868-4267eb3c2b19} 9 | 10 | 11 | 12 | 13 | imgui 14 | 15 | 16 | imgui 17 | 18 | 19 | imgui 20 | 21 | 22 | sources 23 | 24 | 25 | sources 26 | 27 | 28 | 29 | 30 | imgui 31 | 32 | 33 | sources 34 | 35 | 36 | imgui 37 | 38 | 39 | imgui 40 | 41 | 42 | sources 43 | 44 | 45 | sources 46 | 47 | 48 | imgui 49 | 50 | 51 | imgui 52 | 53 | 54 | 55 | 56 | 57 | imgui 58 | 59 | 60 | 61 | 62 | imgui 63 | 64 | 65 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx9/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_win32_directx9 4 | @set INCLUDES=/I..\.. /I..\..\backends /I "%DXSDK_DIR%/Include" 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx9.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp 6 | @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d9.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_directx9/example_win32_directx9.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {a82cba23-9de0-45c2-b1e3-2eb1666702de} 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | sources 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | imgui 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | 56 | 57 | 58 | imgui 59 | 60 | 61 | imgui 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_opengl3/build_win32.bat: -------------------------------------------------------------------------------- 1 | @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. 2 | @set OUT_DIR=Debug 3 | @set OUT_EXE=example_win32_opengl3 4 | @set INCLUDES=/I..\.. /I..\..\backends 5 | @set SOURCES=main.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp 6 | @set LIBS=opengl32.lib 7 | mkdir %OUT_DIR% 8 | cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% 9 | -------------------------------------------------------------------------------- /imgui/examples/example_win32_opengl3/example_win32_opengl3.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {a82cba23-9de0-45c2-b1e3-2eb1666702de} 10 | 11 | 12 | 13 | 14 | sources 15 | 16 | 17 | imgui 18 | 19 | 20 | imgui 21 | 22 | 23 | imgui 24 | 25 | 26 | imgui 27 | 28 | 29 | sources 30 | 31 | 32 | imgui 33 | 34 | 35 | sources 36 | 37 | 38 | 39 | 40 | imgui 41 | 42 | 43 | imgui 44 | 45 | 46 | imgui 47 | 48 | 49 | sources 50 | 51 | 52 | sources 53 | 54 | 55 | sources 56 | 57 | 58 | 59 | 60 | 61 | sources 62 | 63 | 64 | -------------------------------------------------------------------------------- /imgui/examples/libs/emscripten/emscripten_mainloop_stub.h: -------------------------------------------------------------------------------- 1 | // What does this file solves? 2 | // - Since Dear ImGui 1.00 we took pride that most of our examples applications had their entire 3 | // main-loop inside the main() function. That's because: 4 | // - It makes the examples easier to read, keeping the code sequential. 5 | // - It permit the use of local variables, making it easier to try things and perform quick 6 | // changes when someone needs to quickly test something (vs having to structure the example 7 | // in order to pass data around). This is very important because people use those examples 8 | // to craft easy-to-past repro when they want to discuss features or report issues. 9 | // - It conveys at a glance that this is a no-BS framework, it won't take your main loop away from you. 10 | // - It is generally nice and elegant. 11 | // - However, comes Emscripten... it is a wonderful and magical tech but it requires a "main loop" function. 12 | // - Only some of our examples would run on Emscripten. Typically the ones rendering with GL or WGPU ones. 13 | // - I tried to refactor those examples but felt it was problematic that other examples didn't follow the 14 | // same layout. Why would the SDL+GL example be structured one way and the SGL+DX11 be structured differently? 15 | // Especially as we are trying hard to convey that using a Dear ImGui backend in an *existing application* 16 | // should requires only a few dozens lines of code, and this should be consistent and symmetrical for all backends. 17 | // - So the next logical step was to refactor all examples to follow that layout of using a "main loop" function. 18 | // This worked, but it made us lose all the nice things we had... 19 | 20 | // Since only about 3 examples really need to run with Emscripten, here's our solution: 21 | // - Use some weird macros and capturing lambda to turn a loop in main() into a function. 22 | // - Hide all that crap in this file so it doesn't make our examples unusually ugly. 23 | // As a stance and principle of Dear ImGui development we don't use C++ headers and we don't 24 | // want to suggest to the newcomer that we would ever use C++ headers as this would affect 25 | // the initial judgment of many of our target audience. 26 | // - Technique is based on this idea: https://github.com/ocornut/imgui/pull/2492/ 27 | #ifdef __EMSCRIPTEN__ 28 | #include 29 | #include 30 | static std::function MainLoopForEmscriptenP; 31 | static void MainLoopForEmscripten() { MainLoopForEmscriptenP(); } 32 | #define EMSCRIPTEN_MAINLOOP_BEGIN MainLoopForEmscriptenP = [&]() 33 | #define EMSCRIPTEN_MAINLOOP_END ; emscripten_set_main_loop(MainLoopForEmscripten, 0, true) 34 | #else 35 | #define EMSCRIPTEN_MAINLOOP_BEGIN 36 | #define EMSCRIPTEN_MAINLOOP_END 37 | #endif 38 | -------------------------------------------------------------------------------- /imgui/examples/libs/emscripten/shell_minimal.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Dear ImGui Emscripten example 7 | 30 | 31 | 32 | 33 | 63 | {{{ SCRIPT }}} 64 | 65 | 66 | -------------------------------------------------------------------------------- /imgui/examples/libs/glfw/COPYING.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2002-2006 Marcus Geelnard 2 | Copyright (c) 2006-2010 Camilla Berglund 3 | 4 | This software is provided 'as-is', without any express or implied 5 | warranty. In no event will the authors be held liable for any damages 6 | arising from the use of this software. 7 | 8 | Permission is granted to anyone to use this software for any purpose, 9 | including commercial applications, and to alter it and redistribute it 10 | freely, subject to the following restrictions: 11 | 12 | 1. The origin of this software must not be misrepresented; you must not 13 | claim that you wrote the original software. If you use this software 14 | in a product, an acknowledgment in the product documentation would 15 | be appreciated but is not required. 16 | 17 | 2. Altered source versions must be plainly marked as such, and must not 18 | be misrepresented as being the original software. 19 | 20 | 3. This notice may not be removed or altered from any source 21 | distribution. 22 | 23 | -------------------------------------------------------------------------------- /imgui/examples/libs/glfw/lib-vc2010-32/glfw3.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/examples/libs/glfw/lib-vc2010-32/glfw3.lib -------------------------------------------------------------------------------- /imgui/examples/libs/glfw/lib-vc2010-64/glfw3.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/examples/libs/glfw/lib-vc2010-64/glfw3.lib -------------------------------------------------------------------------------- /imgui/examples/libs/usynergy/README.txt: -------------------------------------------------------------------------------- 1 | 2 | uSynergy client -- Implementation for the embedded Synergy client library 3 | version 1.0.0, July 7th, 2012 4 | Copyright (c) 2012 Alex Evans 5 | 6 | This is a copy of the files once found at: 7 | https://github.com/symless/synergy-core/tree/790d108a56ada9caad8e56ff777d444485a69da9/src/micro 8 | 9 | -------------------------------------------------------------------------------- /imgui/misc/README.txt: -------------------------------------------------------------------------------- 1 | 2 | misc/cpp/ 3 | InputText() wrappers for C++ standard library (STL) type: std::string. 4 | This is also an example of how you may wrap your own similar types. 5 | 6 | misc/debuggers/ 7 | Helper files for popular debuggers. 8 | With the .natvis file, types like ImVector<> will be displayed nicely in Visual Studio debugger. 9 | 10 | misc/fonts/ 11 | Fonts loading/merging instructions (e.g. How to handle glyph ranges, how to merge icons fonts). 12 | Command line tool "binary_to_compressed_c" to create compressed arrays to embed data in source code. 13 | Suggested fonts and links. 14 | 15 | misc/freetype/ 16 | Font atlas builder/rasterizer using FreeType instead of stb_truetype. 17 | Benefit from better FreeType rasterization, in particular for small fonts. 18 | 19 | misc/single_file/ 20 | Single-file header stub. 21 | We use this to validate compiling all *.cpp files in a same compilation unit. 22 | Users of that technique (also called "Unity builds") can generally provide this themselves, 23 | so we don't really recommend you use this in your projects. 24 | -------------------------------------------------------------------------------- /imgui/misc/cpp/README.txt: -------------------------------------------------------------------------------- 1 | 2 | imgui_stdlib.h + imgui_stdlib.cpp 3 | InputText() wrappers for C++ standard library (STL) type: std::string. 4 | This is also an example of how you may wrap your own similar types. 5 | 6 | imgui_scoped.h 7 | [Experimental, not currently in main repository] 8 | Additional header file with some RAII-style wrappers for common Dear ImGui functions. 9 | Try by merging: https://github.com/ocornut/imgui/pull/2197 10 | Discuss at: https://github.com/ocornut/imgui/issues/2096 11 | 12 | See more C++ related extension (fmt, RAII, syntaxis sugar) on Wiki: 13 | https://github.com/ocornut/imgui/wiki/Useful-Extensions#cness 14 | -------------------------------------------------------------------------------- /imgui/misc/cpp/imgui_stdlib.h: -------------------------------------------------------------------------------- 1 | // dear imgui: wrappers for C++ standard library (STL) types (std::string, etc.) 2 | // This is also an example of how you may wrap your own similar types. 3 | 4 | // Changelog: 5 | // - v0.10: Initial version. Added InputText() / InputTextMultiline() calls with std::string 6 | 7 | // See more C++ related extension (fmt, RAII, syntaxis sugar) on Wiki: 8 | // https://github.com/ocornut/imgui/wiki/Useful-Extensions#cness 9 | 10 | #pragma once 11 | 12 | #include 13 | 14 | namespace ImGui 15 | { 16 | // ImGui::InputText() with std::string 17 | // Because text input needs dynamic resizing, we need to setup a callback to grow the capacity 18 | IMGUI_API bool InputText(const char* label, std::string* str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = nullptr, void* user_data = nullptr); 19 | IMGUI_API bool InputTextMultiline(const char* label, std::string* str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = nullptr, void* user_data = nullptr); 20 | IMGUI_API bool InputTextWithHint(const char* label, const char* hint, std::string* str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = nullptr, void* user_data = nullptr); 21 | } 22 | -------------------------------------------------------------------------------- /imgui/misc/debuggers/README.txt: -------------------------------------------------------------------------------- 1 | 2 | HELPER FILES FOR POPULAR DEBUGGERS 3 | 4 | imgui.gdb 5 | GDB: disable stepping into trivial functions. 6 | (read comments inside file for details) 7 | 8 | imgui.natstepfilter 9 | Visual Studio Debugger: disable stepping into trivial functions. 10 | (read comments inside file for details) 11 | 12 | imgui.natvis 13 | Visual Studio Debugger: describe Dear ImGui types for better display. 14 | With this, types like ImVector<> will be displayed nicely in the debugger. 15 | (read comments inside file for details) 16 | 17 | -------------------------------------------------------------------------------- /imgui/misc/debuggers/imgui.gdb: -------------------------------------------------------------------------------- 1 | # GDB configuration to aid debugging experience 2 | 3 | # To enable these customizations edit $HOME/.gdbinit (or ./.gdbinit if local gdbinit is enabled) and add: 4 | # add-auto-load-safe-path /path/to/imgui.gdb 5 | # source /path/to/imgui.gdb 6 | # 7 | # More Information at: 8 | # * https://sourceware.org/gdb/current/onlinedocs/gdb/gdbinit-man.html 9 | # * https://sourceware.org/gdb/current/onlinedocs/gdb/Init-File-in-the-Current-Directory.html#Init-File-in-the-Current-Directory 10 | 11 | # Disable stepping into trivial functions 12 | skip -rfunction Im(Vec2|Vec4|Strv|Vector|Span)::.+ 13 | -------------------------------------------------------------------------------- /imgui/misc/debuggers/imgui.natstepfilter: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 22 | 23 | (ImVec2|ImVec4|ImStrv)::.+ 24 | NoStepInto 25 | 26 | 27 | (ImVector|ImSpan).*::operator.+ 28 | NoStepInto 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /imgui/misc/debuggers/imgui.natvis: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | 16 | 17 | {{Size={Size} Capacity={Capacity}}} 18 | 19 | 20 | Size 21 | Data 22 | 23 | 24 | 25 | 26 | 27 | {{Size={DataEnd-Data} }} 28 | 29 | 30 | DataEnd-Data 31 | Data 32 | 33 | 34 | 35 | 36 | 37 | {{x={x,g} y={y,g}}} 38 | 39 | 40 | 41 | {{x={x,g} y={y,g} z={z,g} w={w,g}}} 42 | 43 | 44 | 45 | {{Min=({Min.x,g} {Min.y,g}) Max=({Max.x,g} {Max.y,g}) Size=({Max.x-Min.x,g} {Max.y-Min.y,g})}} 46 | 47 | Min 48 | Max 49 | Max.x - Min.x 50 | Max.y - Min.y 51 | 52 | 53 | 54 | 55 | {{Name {Name,s} Active {(Active||WasActive)?1:0,d} Child {(Flags & 0x01000000)?1:0,d} Popup {(Flags & 0x04000000)?1:0,d} Hidden {(Hidden)?1:0,d}} 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /imgui/misc/fonts/Cousine-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/Cousine-Regular.ttf -------------------------------------------------------------------------------- /imgui/misc/fonts/DroidSans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/DroidSans.ttf -------------------------------------------------------------------------------- /imgui/misc/fonts/Karla-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/Karla-Regular.ttf -------------------------------------------------------------------------------- /imgui/misc/fonts/ProggyClean.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/ProggyClean.ttf -------------------------------------------------------------------------------- /imgui/misc/fonts/ProggyTiny.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/ProggyTiny.ttf -------------------------------------------------------------------------------- /imgui/misc/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/egomeh/anno1800-scripting-api/716d85f74124f50e6d98208f2698ee1d76cb9061/imgui/misc/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /imgui/misc/freetype/README.md: -------------------------------------------------------------------------------- 1 | # imgui_freetype 2 | 3 | Build font atlases using FreeType instead of stb_truetype (which is the default font rasterizer). 4 |
by @vuhdo, @mikesart, @ocornut. 5 | 6 | ### Usage 7 | 8 | 1. Get latest FreeType binaries or build yourself (under Windows you may use vcpkg with `vcpkg install freetype --triplet=x64-windows`, `vcpkg integrate install`). 9 | 2. Add imgui_freetype.h/cpp alongside your project files. 10 | 3. Add `#define IMGUI_ENABLE_FREETYPE` in your [imconfig.h](https://github.com/ocornut/imgui/blob/master/imconfig.h) file 11 | 12 | ### About Gamma Correct Blending 13 | 14 | FreeType assumes blending in linear space rather than gamma space. 15 | See FreeType note for [FT_Render_Glyph](https://freetype.org/freetype2/docs/reference/ft2-glyph_retrieval.html#ft_render_glyph). 16 | For correct results you need to be using sRGB and convert to linear space in the pixel shader output. 17 | The default Dear ImGui styles will be impacted by this change (alpha values will need tweaking). 18 | 19 | ### Testbed for toying with settings (for developers) 20 | 21 | See https://gist.github.com/ocornut/b3a9ecf13502fd818799a452969649ad 22 | 23 | ### Known issues 24 | 25 | - Oversampling settings are ignored but also not so much necessary with the higher quality rendering. 26 | 27 | ### Comparison 28 | 29 | Small, thin anti-aliased fonts typically benefit a lot from FreeType's hinting: 30 | ![comparing_font_rasterizers](https://user-images.githubusercontent.com/8225057/107550178-fef87f00-6bd0-11eb-8d09-e2edb2f0ccfc.gif) 31 | 32 | ### Colorful glyphs/emojis 33 | 34 | You can use the `ImGuiFreeTypeBuilderFlags_LoadColor` flag to load certain colorful glyphs. See the 35 | ["Using Colorful Glyphs/Emojis"](https://github.com/ocornut/imgui/blob/master/docs/FONTS.md#using-colorful-glyphsemojis) section of FONTS.md. 36 | 37 | ![colored glyphs](https://user-images.githubusercontent.com/8225057/106171241-9dc4ba80-6191-11eb-8a69-ca1467b206d1.png) 38 | 39 | ### Using OpenType SVG fonts (SVGinOT) 40 | - *SVG in Open Type* is a standard by Adobe and Mozilla for color OpenType and Open Font Format fonts. It allows font creators to embed complete SVG files within a font enabling full color and even animations. 41 | - Popular fonts such as [twemoji](https://github.com/13rac1/twemoji-color-font) and fonts made with [scfbuild](https://github.com/13rac1/scfbuild) is SVGinOT 42 | - Requires: [lunasvg](https://github.com/sammycage/lunasvg) v2.3.2 and above 43 | 1. Add `#define IMGUI_ENABLE_FREETYPE_LUNASVG` in your `imconfig.h`. 44 | 2. Get latest lunasvg binaries or build yourself. Under Windows you may use vcpkg with: `vcpkg install lunasvg --triplet=x64-windows`. 45 | -------------------------------------------------------------------------------- /imgui/misc/single_file/imgui_single_file.h: -------------------------------------------------------------------------------- 1 | // dear imgui: single-file wrapper include 2 | // We use this to validate compiling all *.cpp files in a same compilation unit. 3 | // Users of that technique (also called "Unity builds") can generally provide this themselves, 4 | // so we don't really recommend you use this in your projects. 5 | 6 | // Do this: 7 | // #define IMGUI_IMPLEMENTATION 8 | // Before you include this file in *one* C++ file to create the implementation. 9 | // Using this in your project will leak the contents of imgui_internal.h and ImVec2 operators in this compilation unit. 10 | 11 | #ifdef IMGUI_IMPLEMENTATION 12 | #define IMGUI_DEFINE_MATH_OPERATORS 13 | #endif 14 | 15 | #include "../../imgui.h" 16 | #ifdef IMGUI_ENABLE_FREETYPE 17 | #include "../../misc/freetype/imgui_freetype.h" 18 | #endif 19 | 20 | #ifdef IMGUI_IMPLEMENTATION 21 | #include "../../imgui.cpp" 22 | #include "../../imgui_demo.cpp" 23 | #include "../../imgui_draw.cpp" 24 | #include "../../imgui_tables.cpp" 25 | #include "../../imgui_widgets.cpp" 26 | #ifdef IMGUI_ENABLE_FREETYPE 27 | #include "../../misc/freetype/imgui_freetype.cpp" 28 | #endif 29 | #endif 30 | --------------------------------------------------------------------------------