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、何らかの理由で気に入らないフレームバッファのアタッチメントに対して、ドライバが拒否権を行使しているということです。

これが発生した場合、他のことを試す以外にできることはあまりありません。おそらく、2D 配列テクスチャにレンダリングします。

于 2012-10-28T06:05:03.067 に答える