如何在opengl es2.0中直接渲染framebuffer?

时间:2013-02-26 07:27:46

标签: opengl-es render framebuffer

我想创建一个程序,使用我自己制作的所有fbo来渲染。我知道这样渲染的常见过程:     1. egl init。     2.程序使用。     3.输入纹理数据     4. swapbuffer。 ,但是当我把它变成fbo渲染时,发生了一件我不知道原因的事情。这是我添加的代码:

glGenFramebuffers(1,frame_buf);
    glBindFramebuffer(GL_FRAMEBUFFER, frame_buf);
    glGenRenderbuffers(1, &color_buf);
    glBindRenderbuffer(GL_RENDERBUFFER, s->color_buf);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, s->color_buf);

我认为当我添加它时,gl将在我制作的绑定fbo中运行。但窗口中没有图像显示..

2 个答案:

答案 0 :(得分:0)

当然没有图片出现。一般来说,您必须渲染到默认的帧缓冲区才能使其可见。这就是可见图像的位置:默认的帧缓冲区。

您可以对FBO进行中间渲染。但是在使用交换缓冲区调用之前,你必须将它blit或渲染到默认的帧缓冲区。

答案 1 :(得分:0)

如果要直接渲染到屏幕上,请使用此代码而不是您使用的代码

glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, screen_width, screen_height);

更改

[eaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:(id<EAGLDrawable>)eaglLayer];

glRenderbufferStorage()绘制到屏幕外

如果您在Android中工作,请遵循此规则

#ifdef IOS 

glBindFramebuffer(GL_FRAMEBUFFER,s_FrameBuffer);

#elif ANDROID 

glBindFramebuffer(GL_FRAMEBUFFER,0);

#endif 
相关问题