将图像分层为具有大量图层的帧缓冲

时间:2013-11-14 23:07:55

标签: c++ opengl

我想使用分层图像(分辨率为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)?
  • 您是否有任何高度分层图像作为帧缓冲器的性能经验?

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

1 个答案:

答案 0 :(得分:1)

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

如果您使用更多详细信息更新问题,尤其是完整几何着色器,我可以为您提供更详细的答案。如果您还不熟悉GS调用,请包括如何设置GS调用。