1

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

4

2 回答 2

0

如果您想直接呈现到 On-Screen ,请使用此代码而不是您使用的代码

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 
于 2013-02-26T23:22:54.303 回答
0

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

您可以对 FBO 进行中间渲染。但是您必须先将其 blit 或渲染到默认帧缓冲区,然后才能使用交换缓冲区调用。

于 2013-02-26T07:42:12.897 回答