在OSX上使用OpenGL渲染到3D纹理(多层帧缓冲附件)

时间:2012-10-28 04:52:40

标签: macos opengl driver geometry-shader

我在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 CORE(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);

1 个答案:

答案 0 :(得分:1)

  

有人知道如何判断驱动程序或硬件是否不支持它?

刚刚告诉你。这就是GL_FRAMEBUFFER_UNSUPPORTED的含义:驾驶员对任何由于任何理由都不喜欢的任何帧缓冲附件行使否决权。

除非尝试其他事情,否则在发生这种情况时你无能为力。也许渲染为2D数组纹理。