diff --git a/cmake/godotcpp.cmake b/cmake/godotcpp.cmake index a2ee27b5d..ce5ce667b 100644 --- a/cmake/godotcpp.cmake +++ b/cmake/godotcpp.cmake @@ -365,8 +365,9 @@ function(godotcpp_generate) add_library(godot::cpp ALIAS godot-cpp) file(GLOB_RECURSE GODOTCPP_SOURCES LIST_DIRECTORIES NO CONFIGURE_DEPENDS src/*.cpp) + set(GODOTCPP_NATVIS_FILES natvis/godot-cpp.natvis) - target_sources(godot-cpp PRIVATE ${GODOTCPP_SOURCES} ${GENERATED_FILES_LIST}) + target_sources(godot-cpp PRIVATE ${GODOTCPP_SOURCES} ${GENERATED_FILES_LIST} ${GODOTCPP_NATVIS_FILES}) target_include_directories( godot-cpp diff --git a/natvis/godot-cpp.natvis b/natvis/godot-cpp.natvis new file mode 100644 index 000000000..34ebdf971 --- /dev/null +++ b/natvis/godot-cpp.natvis @@ -0,0 +1,540 @@ + + + + {*reinterpret_cast<void**>(opaque),s32} + + *reinterpret_cast<void**>(opaque) + *reinterpret_cast<void**>(opaque),s32 + + + + + + {get_data_ptr(),s32} + + *reinterpret_cast<void**>(opaque) + get_data_ptr(),s32 + + + + + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::Variant*)_cow() + + + + + + + + + + {{empty}} + {{size={_size()}}} + + _size() + + + + + (godot::Variant*)(elem + 16),[2] + elem = *(unsigned char**)elem + idx++ + + + + + + + + + nil + {*reinterpret_cast<bool*>(opaque+8)} + {*reinterpret_cast<long long*>(opaque+8)} + {*reinterpret_cast<double*>(opaque+8)} + + {*(godot::String*)(opaque+8)} + {*(godot::Vector2*)(opaque+8)} + {*(godot::Vector2i*)(opaque+8)} + {*(godot::Rect2*)(opaque+8)} + {*(godot::Rect2i*)(opaque+8)} + {*(godot::Vector3*)(opaque+8)} + {*(godot::Vector3i*)(opaque+8)} + {*(godot::Vector4*)(opaque+8)} + {*(godot::Vector4i*)(opaque+8)} + {*(godot::Plane*)(opaque+8)} + {*(godot::Quaternion*)(opaque+8)} + {*(godot::Color*)(opaque+8)} + {*(godot::StringName*)(opaque+8)} + {*(godot::NodePath*)(opaque+8)} + {*(godot::RID*)(opaque+8)} + {*(godot::Callable*)(opaque+8)} + {*(godot::Signal*)(opaque+8)} + {*(godot::Dictionary*)(opaque+8)} + {*(godot::Array*)(opaque+8)} + + {**(godot::Transform2D**)(opaque+8)} + {**(godot::AABB**)(opaque+8)} + {**(godot::Basis**)(opaque+8)} + {**(godot::Transform3D**)(opaque+8)} + {**(godot::Projection**)(opaque+8)} + + Object(id={*reinterpret_cast<unsigned long long*>(opaque+8)}) + + {{type={_type()}}} + + _type() + *reinterpret_cast<bool*>(opaque+8) + *reinterpret_cast<long long*>(opaque+8) + *reinterpret_cast<double*>(opaque+8) + *(godot::String*)(opaque+8) + *(godot::Vector2*)(opaque+8) + *(godot::Vector2i*)(opaque+8) + *(godot::Rect2*)(opaque+8) + *(godot::Rect2i*)(opaque+8) + *(godot::Vector3*)(opaque+8) + *(godot::Vector3i*)(opaque+8) + **(godot::Transform2D**)(opaque+8) + *(godot::Vector4*)(opaque+8) + *(godot::Vector4i*)(opaque+8) + *(godot::Plane*)(opaque+8) + *(godot::Quaternion*)(opaque+8) + **(godot::AABB**)(opaque+8) + **(godot::Basis**)(opaque+8) + **(godot::Transform3D**)(opaque+8) + **(godot::Projection**)(opaque+8) + *(godot::Color*)(opaque+8) + *(godot::StringName*)(opaque+8) + *(godot::NodePath*)(opaque+8) + *(godot::RID*)(opaque+8) + *(godot::Callable*)(opaque+8) + *(godot::Signal*)(opaque+8) + *(godot::Dictionary*)(opaque+8) + *(godot::Array*)(opaque+8) + + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (unsigned char*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (int*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (long long*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (float*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (double*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::String*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::Vector2*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::Vector3*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::Vector4*)_cow() + + + + + + + + {{empty}} + {{size={_size()}}} + + 0,d + _size() + + _size() + (godot::Color*)_cow() + + + + + + ({x,g}, {y,g}) + + x + y + + + + + ({x}, {y}) + + x + y + + + + + ({x,g}, {y,g}, {z,g}) + + x + y + z + + + + + ({x}, {y}, {z}) + + x + y + z + + + + + ({x,g}, {y,g}, {z,g}, {w,g}) + + x + y + z + w + + + + + ({x}, {y}, {z}, {w}) + + x + y + z + w + + + + + ({x,g}, {y,g}, {z,g}, {w,g}) + + x + y + z + w + + + + + ({r,g}, {g,g}, {b,g}, {a,g}) + + r + g + b + a + + + + + [N: {normal}, D: {d,g}] + + normal,nr + d + + + + + [P: {position}, S: {size}] + + position,nr + size,nr + + + + + [P: {position}, S: {size}] + + position,nr + size,nr + + + + + [P: {position}, S: {size}] + + position,nr + size,nr + + + + + [X: {rows[0]}, Y: {rows[1]}, Z: {rows[2]}] + + rows[0],nr + rows[1],nr + rows[2],nr + + + + + [X: {columns[0]}, Y: {columns[1]}, Z: {columns[2]}, W: {columns[3]}] + + columns[0],nr + columns[1],nr + columns[2],nr + columns[3],nr + + + + + [X: {columns[0]}, Y: {columns[1]}, O: {columns[2]}] + + columns[0],nr + columns[1],nr + columns[2],nr + + + + + [X: ({basis.rows[0].x,g}, {basis.rows[1].x,g}, {basis.rows[2].x,g}), Y: ({basis.rows[0].y,g}, + {basis.rows[1].y,g}, {basis.rows[2].y,g}), Z: ({basis.rows[0].z,g}, {basis.rows[1].z,g}, + {basis.rows[2].z,g}), O: {origin}] + + + + ({basis.rows[0].x,g}, {basis.rows[1].x,g}, {basis.rows[2].x,g}) + + basis.rows[0].x + basis.rows[1].x + basis.rows[2].x + + + + ({basis.rows[0].y,g}, {basis.rows[1].y,g}, {basis.rows[2].y,g}) + + basis.rows[0].y + basis.rows[1].y + basis.rows[2].y + + + + ({basis.rows[0].z,g}, {basis.rows[1].z,g}, {basis.rows[2].z,g}) + + basis.rows[0].z + basis.rows[1].z + basis.rows[2].z + + + origin,nr + + + + + + + + + + + [empty] + {{absolute={_absolute()}, path[{_path_size()}], subpath[{_subpath_size()}]}} + + + _absolute() + + [empty] + {{size={_path_size()}}} + + + _path_size() + (godot::StringName*)_path_ptr() + + + + + [empty] + {{size={_subpath_size()}}} + + + _subpath_size() + (godot::StringName*)_subpath_ptr() + + + + + +