在Opengl ES 2(ios)中启用抗锯齿功能

时间:2014-02-12 16:20:10

标签: c++ ios opengl-es antialiasing multisampling

我在IOS中遇到多重采样问题。

我指的是guide

如果向下滚动到

清单4-5创建多重采样缓冲区

你可以清楚地看到我们需要(当然)一个解析缓冲区。但是,它在第​​一步中没有显示任何类型的初始化。我只需要

glGenFramebuffers(1, &resolveBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, resolveBuffer);

什么时候应该初始化我的帧缓冲区对象?

另外,最后一步对我来说并不清楚。

glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];

我应该在哪里做到这一点?它完成了什么?我想我的fbo和vbo之后的抽奖电话,但我不太确定。

有没有人可以查看某种示例项目的链接?我用谷歌搜索但我找不到任何:(

最后,我使用浮动纹理来渲染HDR图像。我必须在这条指令中保留GL_RGBA8_OES吗?

glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA8_OES, width, height);

对我来说,如果此时我已经渲染到了纹理,那我就不太清楚了。

提前感谢!

1 个答案:

答案 0 :(得分:0)

使用与不使用多次采样时相同的代码。然后在其渲染缓冲区glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA8_OES, width, height)上使用多次采样添加额外的帧缓冲区。绘制时,需要绑定样本缓冲区而不是原始缓冲区。完成绘制后,需要将样本缓冲区解析为原始缓冲区:

glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, originalFrameBuffer);
glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, sampleFrameBuffer);
glResolveMultisampleFramebufferAPPLE();

此时你已经填充了原始缓冲区(originalFrameBuffer)并且你可以随意使用它,你甚至可以绑定它并继续绘制它,将它用作纹理或苹果示例中将其渲染缓冲区内容呈现在视图上。