指向计算着色器

时间:2017-02-22 16:16:41

标签: pointers opengl shader compute-shader shader-storage-buffer

我的计算着色器再次出现问题...我想将包含指针的结构传递给计算着色器。 这是我的结构示例:

struct couleurStruct {
    float r;
    float g;
    float b;
    float a;
    float *x;
};

这是我的SSBO初始化:

couleurStruct *coul;
coul = (couleurStruct *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(couleurStruct), bufMask);
//coul->x = (float *)glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 1 * sizeof(float), bufMask);

coul->r = 0.0;
coul->g = 1.0;
coul->b = 0.0;
coul->a = 1.0;
coul->x[0] = 0.5;

glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, structBuffer);

我尝试了很多不同的初始化但没有成功......

那么,有没有办法分配所需的所有内存(因为我知道我的指针指向的每个数组中需要的内存)并将其传递给计算着色器?或者是否真的无法将指针传递给计算着色器?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

OpenGL中的着色器(以及Vulkan / D3D)不能有指针。您可以做的最多是为其他一些数据结构提供索引。所以你可以使x成为其他数组的索引。虽然不清楚为什么它需要成为一个指针。