在我的应用程序的“第一”帧,我不知道为什么'glGetTextureLevelParameterivEXT()'函数被延迟。在第一帧之后,这种现象不会发生。
在framebuffer bind方法中调用该函数。此外,这种现象仅发生在使用乒乓技术渲染第二遍的求和区域表中。在此过程中,render方法交换src和dst纹理。在调用glFramebufferTexture2D()和glDrawBuffers()之后,width()调用'glGetTextureLevelParameterivEXT()'函数。我已经替换了这个代码常量。但是,下一个功能也被推迟......奇怪的是,这种现象只发生在我申请的“第一”框架上。
这是我在framebuffer绑定方法中的代码。
uint numDrawBuffers=0;
for( int k=0; k < MAX_COLOR_ATTACHMENTS; k++ )
{
gl::Texture* t=textureList[k]; GLint L=t?layerList[k]:0, M=t?mipLevelList[k]:0; GLuint tex=t?t->ID:0;
bool bnone = activeTargets[k]==NULL&&t==NULL;
GLenum target = activeTargets[k] = (t?t->target:activeTargets[k]); if(t) numDrawBuffers++;
if(bnone){ /* do nothing */ }
else if(target==GL_TEXTURE_1D) glFramebufferTexture1D( GL_FRAMEBUFFER, drawBuffers[k], target, tex, M );
else if(target==GL_TEXTURE_2D) glFramebufferTexture2D( GL_FRAMEBUFFER, drawBuffers[k], target, tex, M );
else if(target==GL_TEXTURE_3D) glFramebufferTextureLayer( GL_FRAMEBUFFER, drawBuffers[k], tex, M, L );
else if(target==GL_TEXTURE_1D_ARRAY) glFramebufferTextureLayer( GL_FRAMEBUFFER, drawBuffers[k], tex, M, L );
else if(target==GL_TEXTURE_2D_ARRAY) glFramebufferTextureLayer( GL_FRAMEBUFFER, drawBuffers[k], tex, M, L );
if(t==NULL) activeTargets[k] = NULL;
}
// if nothing bound, unbind depth buffer and return
if(numDrawBuffers==0){ glBindRenderbuffer(GL_RENDERBUFFER,0); glBindFramebuffer(GL_FRAMEBUFFER,0); return; }
else glDrawBuffers( numDrawBuffers, drawBuffers );
GLint width=t0->width(mipLevel0), height=t0->height(mipLevel0);