Opengl 基于FBO的多采样

Opengl 基于FBO的多采样,opengl,Opengl,我已经使用FBO实现了多采样的代码,但它不起作用 glGenTextures( text_num1, tex_image ); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBindTexture( GL_TEXTURE_2D, tex_image[0] ); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texture_width,text

我已经使用FBO实现了多采样的代码,但它不起作用

    glGenTextures( text_num1, tex_image );                      
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glBindTexture( GL_TEXTURE_2D, tex_image[0] );       

    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texture_width,texture_height,0,GL_RGBA,GL_UNSIGNED_BYTE, img1[0].imagedata);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );

//  glBindTexture( GL_TEXTURE_2D, 0 );
    GLint maxSamples;
    glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples);

    glGenFramebuffers(1, &fboID);



    glGenRenderbuffers(1, &colorBufID);
    glBindRenderbuffer(GL_RENDERBUFFER, colorBufID);
    glRenderbufferStorageMultisample(GL_RENDERBUFFER, maxSamples, GL_RGBA,TEST_2D_3D_SRC_WIDTH ,TEST_2D_3D_SRC_HEIGHT );
    //glBindRenderbuffer( GL_RENDERBUFFER, 0 );
     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBufID);
    // glBindFramebuffer(GL_FRAMEBUFFER, 0);

    glGenRenderbuffers(1,&defaultDepthBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
    glRenderbufferStorageMultisample(GL_RENDERBUFFER,maxSamples, GL_DEPTH_COMPONENT, TEST_2D_3D_SRC_WIDTH, TEST_2D_3D_SRC_HEIGHT);
    glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, defaultDepthBuffer );

    GLenum status = glCheckFramebufferStatus( GL_FRAMEBUFFER );

    glBindFramebuffer(GL_FRAMEBUFFER, fboID);





     glGenFramebuffers(1, &frameBufID);
    glBindFramebuffer(GL_FRAMEBUFFER, frameBufID);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex_image[0], 0);

    GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
    glDrawBuffers(1, DrawBuffers);

glActiveTexture( GL_TEXTURE0 );
        glBindTexture( GL_TEXTURE_2D, tex_image[0] );       


        glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texture_width,texture_height,0,GL_RGBA,GL_UNSIGNED_BYTE,img1[0].imagedata);

        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
        glBindFramebuffer( GL_FRAMEBUFFER, 0 );

        glBindFramebuffer( GL_READ_FRAMEBUFFER, fboID );
        glBindFramebuffer( GL_DRAW_FRAMEBUFFER, frameBufID );
        glBlitFramebuffer( 0, 0, TEST_2D_3D_SRC_WIDTH, TEST_2D_3D_SRC_HEIGHT, 0, 0, TEST_2D_3D_SRC_WIDTH, TEST_2D_3D_SRC_HEIGHT, GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT, GL_NEAREST );
        glBindFramebuffer( GL_READ_FRAMEBUFFER, 0 );
        glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 );

        eglSwapBuffers(sEGLDisplay, sEGLSurface);

您当前正在绘图到
frameBufID
而不是
fboID

要解决此问题,请移动此行: 在这里:
然后你将取而代之的是
fboID

你能比“它不起作用”更具体一点吗?到底什么失败了?还有,你的OpenGL版本是什么?站台?纹理大小?您知道您从未真正绘制到
fboID
,对吗?我的意思是,你费尽心思去设置它,但是所有的绘图都是在
frameBuffID
中完成的。然后,您将从从未使用过的帧缓冲区中进行blit。它不起作用并不奇怪。@AndonM.Coleman。。。请您提出修改建议。@RetoKoradi纹理大小为1920*1080。opengles 3.0版。纹理根本没有加载,我得到一个空白屏幕。我是在ARM平台上。因为你们试图反别名,看起来像是一个全屏的四元组,所以我必须提到,这对多重采样并没有任何作用。多重采样仅消除基本体边上的锯齿(例如三角形“锯齿”)。对于纹理抗锯齿,您需要超级采样。此外,在调用
glFramebufferRenderbuffer()
之前,还缺少绑定
fboID
glBindFramebuffer(GL_FRAMEBUFFER, fboID);
glGenFramebuffers(1, &frameBufID);
glBindFramebuffer(GL_FRAMEBUFFER, frameBufID);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex_image[0], 0);

glBindFramebuffer(GL_FRAMEBUFFER, fboID);