以下着色器方法:
#pragma unmanaged
complex<double>* NativeFft(double* real_time_data, int data_size) {
// do in-place FFT on data (no allocations)
return reinterpret_cast<complex<double*>>(real_time_data);
}
#pragma managed
array<Complex>^ Transform::Fft(array<double>^ real_time_data) {
if (real_time_data== nullptr) {
throw gcnew ArgumentNullException("'real_time_data' must not be null");
}
int data_size = real_time_data->Length;
pin_ptr<double> data_ptr = &real_time_data[0];
complex<double>* complex_freq_data = NativeFft(data_ptr, data_size);
// now how do I make another reference to the data?
// (I also need the Length field to be halved).
array<Complex>^ managed_complex_freq_data = ???
return managed_complex_freq_data;
}
给我: 错误:0:1:&#39; GetArray&#39; :语法错误:数组大小必须出现在变量名称
之后答案 0 :(得分:2)
我找到了解决此限制的方法。 您可以通过引用修改传入的数组来返回数组。 这是一个示例片段着色器:
void GetArray(inout vec4 array[1])
{
array[0] = vec4(.5,.2,.1,1.0);
}
void main()
{
vec4 test[1];
GetArray(test);
gl_FragColor = test[0];
}