我希望将新纹理绑定到现有FBO。但目前它显着降低了我的速度。
int holdTextureId = glGenTextures();
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, panoramaModelsFboId);
glBindTexture(GL_TEXTURE_2D, holdTextureId);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, SAVE_WIDTH, SAVE_HEIGHT, 0,GL_RGBA, GL_INT, (java.nio.ByteBuffer) null);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D, holdTextureId, 0);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, panoramaModelsDepthRenderBufferId);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, SAVE_WIDTH, SAVE_HEIGHT);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,GL_DEPTH_ATTACHMENT_EXT,GL_RENDERBUFFER_EXT, panoramaModelsDepthRenderBufferId);
//Rendering starts here..
// After which I unbind the FBO and use the texture
我有一种感觉glTexImage2D是犯罪者,所以也许在这个过程开始之前创建纹理是一个想法? 另外,我可能不需要每次都创建渲染缓冲区,但是你可以节省一些时间并告诉我是否需要它。:)
答案 0 :(得分:1)
性能打击在于呼叫glTexImage2D
,这是一个非常昂贵的呼叫。如果您只想绑定已存在的纹理,则不必创建新的纹理对象,也不需要重新初始化它。
只需拨打glFramebufferTexture2D
即可。无需提前绑定纹理;实际上,纹理不能被绑定用作帧缓冲目标。