指向计算着色器输入结构的指针
Pointer into input struct of Compute Shader
我的计算着色器再次出现问题...我想将包含指针的结构传递给计算着色器。
这是我的结构示例:
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);
我尝试了很多不同的初始化但都没有成功...
那么,有没有办法分配所有需要的内存(因为我知道在我的指针指向的每个数组中我需要的内存)并将其传递给计算着色器?还是真的不可能将指针传递给计算着色器?
感谢您的帮助!
OpenGL 中的着色器(就此而言 Vulkan/D3D)不能 有指针。您最多可以做的就是提供对其他一些数据结构的索引。所以你可以使 x
成为其他数组的索引。虽然不清楚为什么它需要是一个指针。
我的计算着色器再次出现问题...我想将包含指针的结构传递给计算着色器。 这是我的结构示例:
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);
我尝试了很多不同的初始化但都没有成功...
那么,有没有办法分配所有需要的内存(因为我知道在我的指针指向的每个数组中我需要的内存)并将其传递给计算着色器?还是真的不可能将指针传递给计算着色器?
感谢您的帮助!
OpenGL 中的着色器(就此而言 Vulkan/D3D)不能 有指针。您最多可以做的就是提供对其他一些数据结构的索引。所以你可以使 x
成为其他数组的索引。虽然不清楚为什么它需要是一个指针。