c++ - 分层图像作为具有大量层的帧缓冲区

标签 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非常短,非立方体贴图分层图像上的部分甚至更短。如果有任何教程涵盖此主题(不是立方体贴图问题),我会很高兴。

最佳答案

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

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

关于c++ - 分层图像作为具有大量层的帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19990329/

相关文章:

c++ - 如何使用 XDevAPI 将行结果存储到字符串对象

c++ - 来自调试代码的未使用变量警告

c - 在 opengl 中纹理映射一个圆锥体

c++ - openGL光线拾取

c++ - 使用友元函数重载运算符[]

c++ - 错误 "Cannot open include file",但它不包含在代码中

c++ - 构造用于追加的字符串

c++ - 通过 texture2D 函数使用自动比较从阴影贴图纹理中采样数据

c++ - 带有定向边界框的轴旋转

opengl - 在 Ubuntu 上安装光泽(特别是 OpenGLRaw 依赖项)时出现 "* Missing C library: GL"