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 バージョンやハードウェア実装間でコードを移植可能にするにはどうすればよいですか?
私の研究: