2012-10-28 78 views
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); 

回答

1

是否有人知道如何找出這是否是由驅動程序或硬件不支持?

剛告訴你。這就是GL_FRAMEBUFFER_UNSUPPORTED的含義:它是驅動程序對任何因任何原因而不喜歡的任何幀緩衝附件行使否決權。

當發生這種情況時,除了嘗試其他事情之外,沒有什麼可以做的。也許渲染到二維數組紋理。

+0

看起來既不像TEXTURE_2D_ARRAY也不是立方體貼圖。只有2D紋理。這看起來很奇怪,因爲分層渲染是由3.2 CORE的一部分的幾何着色器擴展支持的。那麼剩下的分層渲染目標是什麼? – FHoenig

+0

@Fhoenig:Cubemaps。最終,實現被允許否決任何它不喜歡的任意理由。這些東西在Windows和Linux上都能正常工作(理所當然,這對你沒有什麼幫助),所以這不是硬件問題。 –

+0

Cubemaps也沒有工作。然後怎樣呢? – FHoenig

相關問題