[英]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.