繁体   English   中英

分层图像作为具有高层数的帧缓冲区

[英]Layered images as framebuffer with high number of layers

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

请注意,我的主要问题是缺乏有关此主题的信息。 文档非常短,非立方体贴图分层图像上的部分甚至更短。 对于涵盖该主题的任何教程(不是多维数据集映射问题),我都将感到满意。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM