c# - memcpy NativeArray Index to NativeArray Index, Length,怎么办?
问题描述
Unity 中的 NativeArrays 没有从一个到另一个的部分复制功能。
有多种解决方法(NativeSlices 和 GetSubArray),但理想的方法是零检查、全信任、memcpy。
但是,我能想到的最接近的是这个,它什么也没做;
using Unity.Collections ;
using Unity.Collections.LowLevel.Unsafe ;
namespace Unity.Collections {
public static class NativeArrayExtensions {
public static unsafe void CopySuperFast <T> (
this NativeArray<T> src, int srcIndex,
NativeArray<T> dst, int dstIndex,
int length ) where T : struct {
GCHandle dstHandle = GCHandle.Alloc ( dst, GCHandleType.Pinned ) ;
GCHandle srcHandle = GCHandle.Alloc ( src, GCHandleType.Pinned ) ;
UnsafeUtility.MemCpy (
( void* ) ( dstHandle.AddrOfPinnedObject ( )
+ dstIndex * UnsafeUtility.SizeOf<T> ( ) ),
( void* ) ( srcHandle.AddrOfPinnedObject ( )
+ srcIndex * UnsafeUtility.SizeOf<T> ( ) ),
length ) ;
dstHandle.Free ( );
srcHandle.Free ( ) ;
}
}
}
解决方案
我不相信这会回答您的问题,但我无法将其正确格式化为评论。
namespace Unity.Collections
{
public static class NativeArrayExtensions
{
public static unsafe void CopySuperFast<T>(
this NativeArray<T> src, int srcIndex,
NativeArray<T> dst, int dstIndex,
int length
) where T : unmanaged
{
T* srcPtr = (T*)NativeArrayUnsafeUtility.GetUnsafeBufferPointerWithoutChecks(src);
{
var d = dst.GetUnsafePtr();
UnsafeUtility.MemCpy(d, srcPtr + dstIndex, sizeof(T) * length);
}
}
}
}
上面的代码片段未经测试,我不确定它是否会起作用。更多将其留在这里作为您可能弄清楚的起点。
推荐阅读
- ios - 将对象从 Realm 数据库传输到另一个 UITabBar 控制器
- javascript - 为什么我收到错误:TypeError:“_co.form.submit 不是函数”?
- c - 通过 memcpy 将“指向 const 的指针”复制到“指向非 const 的指针”
- javascript - 如何在amcharts中设置我的饼图容器的高度?
- android-recyclerview - android中recyclerView的控制流程
- spring - 无法建立 Hibernate SessionFactory;嵌套异常
- reinforcement-learning - openai-gym pong:我怎样才能让 reset() 更随机
- git - 将下载的 repo 的提交添加到原始提交历史并允许拉取请求
- powershell - 重命名文件夹时,power shell 提示找不到文件错误
- python - Python:返回时解包的值太多