编辑:您可以使用不安全的代码...您只需手动编辑 proj 文件。
当我可以在手机上使用本机 C++ 代码时,为什么或为什么 WP8 上的 C# 不支持不安全代码(我没想到这一点)?我的意思是,拜托,我对 Microsoft 试图强行使用 C# 的做法感到非常失望。
MS 未来有计划在 WP8 上支持此功能吗?我将着色器常量从 C# 传递到 C++,并使用不安全的代码来优化此过程,但在 WP8 上,我将被迫在比 PC 慢得多的设备上以某种缓慢的方式执行此操作,这使得这非常令人沮丧。
作为将 vector4 传递给 C++ 的示例,我会这样做:
public unsafe void Set(Vector4 value)
{
com.Set((int)&value, sizeof(Vector4));
}
然后在 C++ 中:
void ShaderVariableCom::Set(__int32 data, int size)
{
void* ptr = (void*)data;
if (vertexOffset != -1) memcpy(vertexBytes + vertexOffset, ptr, size);
if (pixelOffset != -1) memcpy(pixelBytes + pixelOffset, ptr, size);
}
任何人都可以在没有不安全代码的情况下快速完成此操作吗?
我找到了解决方案。
对于简单的向量类型只需执行以下操作:
Marshal.StructureToPtr(vector, nativePtr, false);
对于数组来说:
var data = new Vector[10];
int size = Marshal.SizeOf(data[0]);
for (int i = 0; i != data.Length; ++i)
{
Marshal.StructureToPtr(data[i], nativePtr + (size * i), false);
}
如果有人有更好的答案,也很高兴知道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)