1
我在OSX 10.7.5上设置了OpenGL 3.2 CORE上下文,并尝试使用分层渲染方法渲染到3D纹理, 。几何着色器功能“gl_layer”支持,但我无法将GL_TEXTURE_3D绑定到我的帧缓冲附件。它返回GL_FRAMEBUFFER_UNSUPPORTED。使用OSX上的OpenGL渲染到3D纹理(多层帧缓冲区附件)
这是我的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);
看起来既不像TEXTURE_2D_ARRAY也不是立方体贴图。只有2D纹理。这看起来很奇怪,因为分层渲染是由3.2 CORE的一部分的几何着色器扩展支持的。那么剩下的分层渲染目标是什么? – FHoenig
@Fhoenig:Cubemaps。最终,实现被允许否决任何它不喜欢的任意理由。这些东西在Windows和Linux上都能正常工作(理所当然,这对你没有什么帮助),所以这不是硬件问题。 –
Cubemaps也没有工作。然后怎样呢? – FHoenig