我想使用分层图像(分辨率为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非常短,非立方体贴图上的图像分层图像更短。我会很高兴任何涵盖这个主题的教程(不是立方体贴图问题)。
答案 0 :(得分:1)
在这种情况下你可以遇到许多限制,但首先想到的是gl_MaxGeometryOutputVertices
。 OpenGL实现可以将您限制为在单个几何着色器调用中输出少至256个顶点。如果达到此限制,则可以将几何着色器拆分为多个调用。实际上,对于大量分层渲染,无论如何都应该使用GS调用。
如果您使用更多详细信息更新问题,尤其是完整几何着色器,我可以为您提供更详细的答案。如果您还不熟悉GS调用,请包括如何设置GS调用。