OpenGL懒惰函数(opengl函数仅在第一帧延迟)

时间:2014-11-15 14:47:21

标签: opengl

在我的应用程序的“第一”帧,我不知道为什么'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);

0 个答案:

没有答案