我想创建一个程序,使用我自己制作的所有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中运行。但窗口中没有图像显示..
答案 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