FBOでRECTANGLE_NVしか使えない 解決編
http://d.hatena.ne.jp/toge/20050709#1120910095 の続き。
Frame Bufferに指定するテクスチャのフィルタをGL_LINEARにすることで解決しました。
やった、これでベンダ依存の苦痛から開放されるぞ。
速度としては1024x1024のテクスチャに40個のtriangleを描画して1.4ms。まあ、そこそこですかね?
最適なピクセルフォーマットがありそうなので、もう少し弄ってみますか。
以下成功するコードです。
// FBOの描画対象になるテクスチャの生成(フィルタをLINEARにすること!) glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Framebufferを生成 glGenFramebuffersEXT(1, &framebuffer); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer); // 生成したテクスチャをFramebufferの描画先(色部分)として描画するように設定 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0); // Framebufferをきちんとセットアップ出来たかチェック GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); switch (status) { case GL_FRAMEBUFFER_COMPLETE_EXT: printf("framebuffer supoprted\n"); break; case GL_FRAMEBUFFER_UNSUPPORTED_EXT: printf("framebuffer unsupoprted\n"); break; default: printf("program error\n"); } // この後の描画が通常描画(Windowに直接描画する)になるようにする glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);