0

我想使用分层图像(分辨率为 10-1000 z 的 3D 纹理)作为帧缓冲区的纹理。我通过以下方式设置帧缓冲区的纹理:

glGenTextures(1, &textureName);
glBindTexture(GL_TEXTURE_3D, textureName);
glTexStorage3D(GL_TEXTURE_3D, 1, GL_R32F, width, height, depth);
glBindTexture(GL_TEXTURE_3D, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureName, 0);

然后我在几何着色器中为图层创建几何

void main() {
  for (int layer = 0; layer < textureDepth; ++layer) {
    gl_Layer = layer;
    //generate and emit vertices
    EndPrimitive();
  }
}

对于较小的纹理深度(例如 10),这似乎可行,但对于较大的数字,结果似乎是错误的。有很多地方可能会出错,所以我想确保这是有效的。

  • 我设置正确吗?
  • 我必须查询的层数是否有限制 ( glGetInteger)?
  • 您对将高度分层的图像作为帧缓冲区的性能有任何经验吗?

请注意,我的主要问题是缺乏有关此主题的信息。文档非常短,非立方体贴图分层图像的部分更短。我会很高兴任何涵盖该主题的教程(不是立方体贴图问题)。

4

1 回答 1

1

在这种情况下,您可能会遇到许多限制,但我首先想到的是gl_MaxGeometryOutputVertices. OpenGL 实现可以将您限制为在单个几何着色器调用中输出少至 256 个顶点。如果您遇到此限制,您可以将几何着色器拆分为多个调用。事实上,对于高度分层的渲染,无论如何您都应该使用 GS 调用。

如果你用更多细节更新你的问题,特别是你的完整几何着色器,我可以给你一个更详细的答案。包括如果您还不熟悉如何设置 GS 调用。

于 2013-11-15T00:09:30.900 回答