如何在glsl es中声明一个返回数组的函数(版本100)

时间:2015-12-01 21:38:46

标签: opengl-es-2.0 glsles

以下着色器方法:

#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; :语法错误:数组大小必须出现在变量名称

之后

1 个答案:

答案 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];
}