标签: bufferblock

OpenGL 4.5-着色器存储缓冲区对象布局

我正在尝试使用着色器存储缓冲区对象(又名缓冲区块),但有些事情我还没有完全掌握。我想做的是在其中存储不确定数量的灯光的(简化)数据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)

c++ opengl-4 shader-storage-buffer bufferblock

5
推荐指数
0
解决办法
1510
查看次数