我正在尝试使用着色器存储缓冲区对象(又名缓冲区块),但有些事情我还没有完全掌握。我想做的是在其中存储不确定数量的灯光的(简化)数据n,以便我的着色器可以遍历它们并执行计算。
首先,我说我得到了正确的结果,并且OpenGL没有错误。然而,困扰我不知道为什么它是工作。
因此,在我的着色器中,我得到了以下内容:
struct PointLight {
vec3 pos;
float intensity;
};
layout (std430, binding = 0) buffer PointLights {
PointLight pointLights[];
};
void main() {
PointLight light;
for (int i = 0; i < pointLights.length(); i++) {
light = pointLights[i];
// etc
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中:
struct PointLightData {
glm::vec3 pos;
float intensity;
};
class PointLight {
// ...
PointLightData data;
// ...
};
std::vector<PointLight*> pointLights;
glGenBuffers(1, &BBO);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, BBO);
glNamedBufferStorage(BBO, n * sizeof(PointLightData), NULL, GL_DYNAMIC_STORAGE_BIT);
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, …Run Code Online (Sandbox Code Playgroud)