mirror of
https://github.com/pkdawson/imgui-godot.git
synced 2026-09-18 12:44:18 +00:00
WIP C++ example
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -7,3 +7,7 @@ export_presets.cfg
|
||||
.godot/
|
||||
*.user
|
||||
Properties/
|
||||
build/
|
||||
build.*/
|
||||
*.dll
|
||||
doc/cpp-demo/MyGame/addons/
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
<RootNamespace>DearImGuiforGodotDemo</RootNamespace>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="doc\**" />
|
||||
<EmbeddedResource Remove="doc\**" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ImGui.NET" Version="1.88.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -2,6 +2,7 @@ using Godot;
|
||||
using ImGuiNET;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace ImGuiGodot;
|
||||
|
||||
@@ -229,6 +230,29 @@ public partial class ImGuiLayer : CanvasLayer
|
||||
}
|
||||
}
|
||||
|
||||
// WIP, this will probably be changed or moved
|
||||
public unsafe Godot.Collections.Array<long> GetImGuiPtrs(string version, int ioSize, int vertSize, int idxSize)
|
||||
{
|
||||
if (version != ImGui.GetVersion() ||
|
||||
ioSize != Marshal.SizeOf<ImGuiIO>() ||
|
||||
vertSize != Marshal.SizeOf<ImDrawVert>() ||
|
||||
idxSize != sizeof(ushort))
|
||||
{
|
||||
throw new PlatformNotSupportedException($"ImGui version mismatch, use {ImGui.GetVersion()}-docking");
|
||||
}
|
||||
|
||||
IntPtr mem_alloc = IntPtr.Zero;
|
||||
IntPtr mem_free = IntPtr.Zero;
|
||||
void* user_data = null;
|
||||
ImGui.GetAllocatorFunctions(ref mem_alloc, ref mem_free, ref user_data);
|
||||
|
||||
return new(){
|
||||
(long)ImGui.GetCurrentContext(),
|
||||
(long)mem_alloc,
|
||||
(long)mem_free
|
||||
};
|
||||
}
|
||||
|
||||
private static void OnNodeRemoved(Node node)
|
||||
{
|
||||
// signals declared in C# don't (yet?) work like normal Godot signals,
|
||||
|
||||
14
doc/cpp-demo/.clang-format
Normal file
14
doc/cpp-demo/.clang-format
Normal file
@@ -0,0 +1,14 @@
|
||||
Language: Cpp
|
||||
BasedOnStyle: Microsoft
|
||||
AccessModifierOffset: -4
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AlignEscapedNewlines: Left
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BinPackArguments: false
|
||||
BinPackParameters: true
|
||||
PointerAlignment: Left
|
||||
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterNamespace: false
|
||||
AfterExternBlock: false
|
||||
50
doc/cpp-demo/CMakeLists.txt
Normal file
50
doc/cpp-demo/CMakeLists.txt
Normal file
@@ -0,0 +1,50 @@
|
||||
cmake_minimum_required(VERSION 3.24)
|
||||
|
||||
# set up vcpkg
|
||||
if (WIN32)
|
||||
set(VCPKG_TARGET_TRIPLET x64-windows-static-md)
|
||||
endif()
|
||||
file(TO_CMAKE_PATH "$ENV{VCPKG_ROOT}" VCPKG_ROOT)
|
||||
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
|
||||
|
||||
project(demoext CXX)
|
||||
|
||||
if (NOT TARGET godot-cpp)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
godot-cpp
|
||||
GIT_REPOSITORY https://github.com/godotengine/godot-cpp
|
||||
GIT_TAG master # watch out, something will break eventually
|
||||
)
|
||||
FetchContent_MakeAvailable(godot-cpp)
|
||||
endif()
|
||||
|
||||
find_package(imgui CONFIG REQUIRED)
|
||||
find_package(implot CONFIG REQUIRED)
|
||||
find_package(freetype CONFIG REQUIRED)
|
||||
find_package(GTest CONFIG REQUIRED)
|
||||
|
||||
add_library(demoext SHARED)
|
||||
add_subdirectory(src)
|
||||
|
||||
target_link_libraries(demoext PUBLIC
|
||||
godot-cpp
|
||||
imgui::imgui
|
||||
freetype
|
||||
implot::implot
|
||||
)
|
||||
target_include_directories(demoext PRIVATE src)
|
||||
target_compile_features(demoext PRIVATE cxx_std_20)
|
||||
target_compile_definitions(demoext PUBLIC IMGUI_DISABLE_INCLUDE_IMCONFIG_H)
|
||||
|
||||
set_property(TARGET demoext PROPERTY OUTPUT_NAME "demoext.$<IF:$<CONFIG:Debug>,debug,release>")
|
||||
|
||||
install(TARGETS demoext RUNTIME DESTINATION bin)
|
||||
|
||||
enable_testing()
|
||||
add_executable(demotest test/test.cpp)
|
||||
target_include_directories(demotest PRIVATE src)
|
||||
target_link_libraries(demotest PRIVATE GTest::gtest_main demoext)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(demotest)
|
||||
40
doc/cpp-demo/CMakePresets.json
Normal file
40
doc/cpp-demo/CMakePresets.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"version": 1,
|
||||
"cmakeMinimumRequired": {
|
||||
"major": 3,
|
||||
"minor": 20,
|
||||
"patch": 0
|
||||
},
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "debug",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build.debug",
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"CMAKE_INSTALL_PREFIX": "MyGame",
|
||||
"CMAKE_BUILD_TYPE": "Debug"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "release",
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build.release",
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"CMAKE_INSTALL_PREFIX": "MyGame",
|
||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||
"CMAKE_INTERPROCEDURAL_OPTIMIZATION": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "msvc",
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"binaryDir": "${sourceDir}/build",
|
||||
"cacheVariables": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"CMAKE_INSTALL_PREFIX": "MyGame"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
10
doc/cpp-demo/MyGame/MyGame.csproj
Normal file
10
doc/cpp-demo/MyGame/MyGame.csproj
Normal file
@@ -0,0 +1,10 @@
|
||||
<Project Sdk="Godot.NET.Sdk/4.0.0-beta">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="ImGui.NET" Version="1.88.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
19
doc/cpp-demo/MyGame/MyGame.sln
Normal file
19
doc/cpp-demo/MyGame/MyGame.sln
Normal file
@@ -0,0 +1,19 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyGame", "MyGame.csproj", "{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
ExportDebug|Any CPU = ExportDebug|Any CPU
|
||||
ExportRelease|Any CPU = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
|
||||
{3FFFFA7D-AD43-4770-AE3F-2BA38FF919E4}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
7
doc/cpp-demo/MyGame/default_env.tres
Normal file
7
doc/cpp-demo/MyGame/default_env.tres
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_resource type="Environment" load_steps=2 format=3 uid="uid://dtd3q2x2ulcsi"]
|
||||
|
||||
[sub_resource type="Sky" id="1"]
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
sky = SubResource("1")
|
||||
14
doc/cpp-demo/MyGame/demoext.gdextension
Normal file
14
doc/cpp-demo/MyGame/demoext.gdextension
Normal file
@@ -0,0 +1,14 @@
|
||||
[configuration]
|
||||
|
||||
entry_symbol = "demoext_init"
|
||||
|
||||
[libraries]
|
||||
|
||||
macos.debug = "res://bin/demoext.debug.framework"
|
||||
macos.release = "res://bin/demoext.release.framework"
|
||||
windows.debug.x86_64 = "res://bin/demoext.debug.dll"
|
||||
windows.release.x86_64 = "res://bin/demoext.release.dll"
|
||||
linux.debug.x86_64 = "res://bin/demoext.debug.so"
|
||||
linux.release.x86_64 = "res://bin/demoext.release.so"
|
||||
linux.debug.arm64 = "res://bin/demoext.debug.so"
|
||||
linux.release.arm64 = "res://bin/demoext.release.so"
|
||||
1
doc/cpp-demo/MyGame/icon.svg
Normal file
1
doc/cpp-demo/MyGame/icon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="translate(32 32)"><path d="m-16-32c-8.86 0-16 7.13-16 15.99v95.98c0 8.86 7.13 15.99 16 15.99h96c8.86 0 16-7.13 16-15.99v-95.98c0-8.85-7.14-15.99-16-15.99z" fill="#363d52"/><path d="m-16-32c-8.86 0-16 7.13-16 15.99v95.98c0 8.86 7.13 15.99 16 15.99h96c8.86 0 16-7.13 16-15.99v-95.98c0-8.85-7.14-15.99-16-15.99zm0 4h96c6.64 0 12 5.35 12 11.99v95.98c0 6.64-5.35 11.99-12 11.99h-96c-6.64 0-12-5.35-12-11.99v-95.98c0-6.64 5.36-11.99 12-11.99z" fill-opacity=".4"/></g><g stroke-width="9.92746" transform="matrix(.10073078 0 0 .10073078 12.425923 2.256365)"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247-27.992-1.997-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142 0 .284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 919.24059 771.67186)"/><path d="m0 0v-47.514-6.035-5.492c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325c5.09692 6.4164715 9.92323 13.494208 13.621 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027 0-.052-.006-.075-.006-.024 0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.4426579-6.973692 9.2079702-13.9828876 13.621-19.449z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 104.69892 525.90697)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c.015-3.498.06-7.33.06-8.093 0-34.374 43.605-50.896 97.781-51.086h.066.067c54.176.19 97.766 16.712 97.766 51.086 0 .777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 784.07144 817.24284)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 389.21484 625.67104)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 367.36686 631.05679)"/><path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 511.99336 724.73954)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 634.78706 625.67104)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 656.64056 631.05679)"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
37
doc/cpp-demo/MyGame/icon.svg.import
Normal file
37
doc/cpp-demo/MyGame/icon.svg.import
Normal file
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d08m2uvixtsgf"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
11
doc/cpp-demo/MyGame/main.tscn
Normal file
11
doc/cpp-demo/MyGame/main.tscn
Normal file
@@ -0,0 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://d02ytucir7qh2"]
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="MyCppNode" type="MyCppNode" parent="."]
|
||||
36
doc/cpp-demo/MyGame/project.godot
Normal file
36
doc/cpp-demo/MyGame/project.godot
Normal file
@@ -0,0 +1,36 @@
|
||||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=5
|
||||
|
||||
[application]
|
||||
|
||||
config/name="MyGame"
|
||||
run/main_scene="res://main.tscn"
|
||||
config/features=PackedStringArray("4.0", "C#")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[autoload]
|
||||
|
||||
ImGuiLayer="*res://addons/imgui-godot/ImGuiLayer.tscn"
|
||||
|
||||
[dotnet]
|
||||
|
||||
project/assembly_name="MyGame"
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/imgui-godot/plugin.cfg")
|
||||
|
||||
[native_extensions]
|
||||
|
||||
paths=["res://demoext.gdextension"]
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/defaults/default_environment="res://default_env.tres"
|
||||
8
doc/cpp-demo/README.md
Normal file
8
doc/cpp-demo/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
A sample GDExtension using ImGui with a context from imgui-godot. Uses vcpkg and CMake for easy setup and fast builds.
|
||||
|
||||
```
|
||||
cmake --preset msvc
|
||||
|
||||
cmake --build build --target install --config Debug
|
||||
```
|
||||
5
doc/cpp-demo/src/CMakeLists.txt
Normal file
5
doc/cpp-demo/src/CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
target_sources(demoext PRIVATE
|
||||
main.cpp
|
||||
mycppnode.cpp
|
||||
mycppnode.h
|
||||
)
|
||||
36
doc/cpp-demo/src/main.cpp
Normal file
36
doc/cpp-demo/src/main.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <godot_cpp/core/class_db.hpp>
|
||||
#include <godot_cpp/core/defs.hpp>
|
||||
#include <godot_cpp/godot.hpp>
|
||||
#include <imgui.h>
|
||||
#include <mycppnode.h>
|
||||
|
||||
using namespace godot;
|
||||
|
||||
void initialize_demo_module(ModuleInitializationLevel p_level)
|
||||
{
|
||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||
return;
|
||||
|
||||
ClassDB::register_class<MyCppNode>();
|
||||
}
|
||||
|
||||
void uninitialize_demo_module(ModuleInitializationLevel p_level)
|
||||
{
|
||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||
return;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
GDNativeBool GDN_EXPORT demoext_init(const GDNativeInterface* p_interface,
|
||||
const GDNativeExtensionClassLibraryPtr p_library,
|
||||
GDNativeInitialization* r_initialization)
|
||||
{
|
||||
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);
|
||||
|
||||
init_obj.register_initializer(initialize_demo_module);
|
||||
init_obj.register_terminator(uninitialize_demo_module);
|
||||
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
|
||||
|
||||
return init_obj.init();
|
||||
}
|
||||
}
|
||||
66
doc/cpp-demo/src/mycppnode.cpp
Normal file
66
doc/cpp-demo/src/mycppnode.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "mycppnode.h"
|
||||
#include <godot_cpp/classes/node.hpp>
|
||||
#include <godot_cpp/variant/utility_functions.hpp>
|
||||
#include <godot_cpp/classes/input_event.hpp>
|
||||
#include <imgui.h>
|
||||
#include <implot.h>
|
||||
using namespace godot;
|
||||
|
||||
struct MyCppNode::Impl
|
||||
{
|
||||
};
|
||||
|
||||
MyCppNode::MyCppNode() : impl(std::make_unique<Impl>())
|
||||
{
|
||||
}
|
||||
|
||||
MyCppNode::~MyCppNode()
|
||||
{
|
||||
}
|
||||
|
||||
void MyCppNode::_bind_methods()
|
||||
{
|
||||
}
|
||||
|
||||
void MyCppNode::_ready()
|
||||
{
|
||||
// TODO: don't run in editor mode
|
||||
set_process(false);
|
||||
Node* igl = get_node_or_null("/root/ImGuiLayer");
|
||||
if (!igl)
|
||||
return;
|
||||
|
||||
godot::Array imgui_ptrs = igl->call(
|
||||
"GetImGuiPtrs",
|
||||
ImGui::GetVersion(),
|
||||
sizeof(ImGuiIO),
|
||||
sizeof(ImDrawVert),
|
||||
sizeof(ImDrawIdx)
|
||||
);
|
||||
|
||||
if (imgui_ptrs.size() < 3)
|
||||
return;
|
||||
|
||||
int64_t ctx = imgui_ptrs[0];
|
||||
int64_t mem_alloc = imgui_ptrs[1];
|
||||
int64_t mem_free = imgui_ptrs[2];
|
||||
|
||||
ImGui::SetCurrentContext((ImGuiContext*)ctx);
|
||||
ImGui::SetAllocatorFunctions((ImGuiMemAllocFunc)mem_alloc, (ImGuiMemFreeFunc)mem_free);
|
||||
ImPlot::CreateContext();
|
||||
set_process(true);
|
||||
}
|
||||
|
||||
void MyCppNode::_exit_tree()
|
||||
{
|
||||
ImPlot::DestroyContext();
|
||||
}
|
||||
|
||||
void MyCppNode::_process(double delta)
|
||||
{
|
||||
ImPlot::ShowDemoWindow();
|
||||
|
||||
ImGui::Begin("Cpp Window");
|
||||
ImGui::Text("hello from C++");
|
||||
ImGui::End();
|
||||
}
|
||||
27
doc/cpp-demo/src/mycppnode.h
Normal file
27
doc/cpp-demo/src/mycppnode.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
#include <godot_cpp/classes/node.hpp>
|
||||
#include <memory>
|
||||
|
||||
using godot::Node;
|
||||
using godot::InputEvent;
|
||||
using godot::Ref;
|
||||
|
||||
class MyCppNode : public Node
|
||||
{
|
||||
GDCLASS(MyCppNode, Node);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void _ready() override;
|
||||
void _exit_tree() override;
|
||||
void _process(double delta) override;
|
||||
|
||||
MyCppNode();
|
||||
~MyCppNode();
|
||||
|
||||
private:
|
||||
struct Impl;
|
||||
std::unique_ptr<Impl> impl;
|
||||
};
|
||||
8
doc/cpp-demo/test/test.cpp
Normal file
8
doc/cpp-demo/test/test.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
#include <godot_cpp/godot.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <mycppnode.h>
|
||||
|
||||
TEST(SomethingTest, DoAThing)
|
||||
{
|
||||
ASSERT_TRUE(true);
|
||||
}
|
||||
21
doc/cpp-demo/vcpkg.json
Normal file
21
doc/cpp-demo/vcpkg.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "imgui",
|
||||
"features": [
|
||||
"docking-experimental",
|
||||
"freetype"
|
||||
]
|
||||
},
|
||||
"implot",
|
||||
"imguizmo",
|
||||
"gtest"
|
||||
],
|
||||
"builtin-baseline": "6f7ffeb18f99796233b958aaaf14ec7bd4fb64b2",
|
||||
"overrides": [
|
||||
{
|
||||
"name": "imgui",
|
||||
"version": "1.88"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user