1

我在 OSX 10.7.5 上设置了 OpenGL 3.2 CORE 上下文,并尝试使用分层渲染方法渲染到 3D 纹理。支持几何着色器功能“gl_layer” ,但我无法将 GL_TEXTURE_3D 绑定到我的帧缓冲区附件。它返回 GL_FRAMEBUFFER_UNSUPPORTED。

这是我的 MBP 中的卡和驱动程序版本:

AMD Radeon HD 6770M 1024 MB - OpenGL 3.2 核心 (ATI-7.32.12)

此功能与特定扩展 AFAIK 没有直接关系。有谁知道如何确定驱动程序或硬件是否不支持此功能?非常感谢。

下面要重构的代码。我使用 glfw 来设置上下文:

// Initialize GLFW
if (!glfwInit())
    throw "Failed to initialize GLFW";

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

// Open a window and create its OpenGL context
if (!glfwOpenWindow(720, 480, 8, 8, 8, 8, 24, 8, GLFW_WINDOW))
    throw "Failed to open GLFW window";

//
// ...
//

GLuint framebuffer, texture;
GLenum status;
glGenFramebuffers(1, &framebuffer);
// Set up the FBO with one texture attachment
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 256, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture, 0);
status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
    throw status;
//
// status is GL_FRAMEBUFFER_UNSUPPORTED here !!!
//

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDeleteTextures(1, &texture);
glDeleteFramebuffers(1, &framebuffer);
exit(1);
4

1 回答 1

1

有谁知道如何确定驱动程序或硬件是否不支持此功能?

只是告诉你。这就是GL_FRAMEBUFFER_UNSUPPORTED意思:它是驱动程序对它出于任何原因不喜欢的任何帧缓冲区附件行使否决权。

发生这种情况时,您无能为力,只能尝试其他事情。也许渲染到二维数组纹理。

于 2012-10-28T06:05:03.067 回答