【发布时间】:2014-03-17 03:13:54
【问题描述】:
我正在尝试在 iOS 上使用 OpenGL ES2 创建一个照片编辑程序。我希望能够使用片段着色器修改照片的某些部分。例如,如果用户触摸屏幕,该点将被发送到片段着色器。片段着色器将在点的某个半径内添加效果。
我需要将片段着色器中所做的修改保留到下一帧。我读过这样做的方法是设置与纹理相关联的第二个帧缓冲区对象。以下是程序的作用:
当前纹理是 0 吗?如果是这样,这是第一次绘制,所以我们将照片绘制到 FBO(即将纹理投影到 2D 矩形上)。然后将矩形重新绘制到屏幕上,但这次使用 FBO 作为纹理源。之后,我们将 FBO 的纹理绘制回 FBO。
即
if(_currentTextureID == 0)
_currentTextureID = _imageTexture
else
_currentTextureID = _frameBufferTextureID;
glBindFrameBuffer(GL_FRAMEBUFFER, _frameBufferID)
[self drawTexture: _currentTextureID];
[self bindDrawable]
[self drawTexture: _currentTextureID];
这种工作,但由于多次调用 draw 方法,图像变得模糊。我认为这可能是因为您无法将纹理渲染到它自己的 FBO 中,所以我尝试了两个 FBO,但这也不起作用。我对 OpenGL 还很陌生,所以任何建议都将不胜感激!
这里是完整源代码的链接:
【问题讨论】:
标签: ios opengl-es opengl-es-2.0 framebuffer texture2d