1

OpenGL FBO を使用してオフスクリーン レンダリングを行う。FBO を作成するためのメイン コード フラグメントを以下に示します。

glGenFramebuffers(1, &fbo);

// Create new framebuffers with new size.
int maxSize; glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE,  &maxSize);
glGenRenderbuffers(1,&clrRbo)
glBindRenderbuffer(GL_RENDERBUFFER,clrRbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, (std::min)(maxSize,m_localvp.pix_width),(std::min)(maxSize, m_localvp.pix_height));

glGenRenderbuffers(1,&stencilRbo);  
glBindRenderbuffer(GL_RENDERBUFFER,stencilRbo); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, (std::min)(maxSize,m_localvp.pix_width),(std::min)(maxSize, m_localvp.pix_height));

// Bind new framebuffers to FBO;
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, clrRbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilRbo);
// Checke FBO status
checkFramebufferStatus();

上記のコードは、一部のグラフィック ハードウェアでは機能しますが、他のハードウェアでは機能しません。また、glCheckFramebufferStatus() で報告されるエラーは GL_FRAMEBUFFER_UNSUPPORTED です。これは、色またはステンシル形式の内部形式がレンダリングできないことを意味します。

コードが実行されるグラフィック ハードウェアでサポートされている正しい色またはステンシル レンダリング可能な内部形式を取得するにはどうすればよいですか? または、異なる OpenGL バージョンやハードウェア実装間でコードを移植可能にするにはどうすればよいですか?

私の研究:

  • glGetInternalformat() は、OpenGL 4.1 以降でのみサポートされています。古い OpenGL バージョンでこの関数の同じ機能を取得できる場合は?
  • これは、GL_STENCIL_INDEX8 が唯一のステンシル レンダリング可能な形式であると言っていますが、それは正しいですか? 私のコードでは機能しません。
  • このドキュメントは、サポートされているすべての形式の列挙型を示しています。内部フォーマットと基本フォーマットの違いは何ですか。
4

1 に答える 1