Опитвам се да създам програма за редактиране на снимки с помощта на OpenGL ES2 на iOS. Искам да мога да модифицирам части от снимка с помощта на фрагментния шейдър. Например, ако потребителят докосне екрана, тази точка ще бъде изпратена до фрагментния шейдър. Фрагментният шейдър ще добави ефект в рамките на определен радиус на точката.
Това, от което се нуждая, е модификациите, направени във фрагментния шейдър, да бъдат запазени до следващия кадър. Четох, че начинът да направите това е да настроите втори обект на буфер на рамка, който е свързан с текстура. Ето какво прави програмата:
Текущата текстура 0 ли е? Ако е така, това е първото теглене, така че рисуваме снимката към нашия FBO (т.е. текстурата се проектира върху 2D правоъгълник). След това начертайте отново правоъгълника на екрана, но този път използвайте FBO като източник на текстура. След това рисуваме текстурата на FBO обратно към FBO.
i.e.
if(_currentTextureID == 0)
_currentTextureID = _imageTexture
else
_currentTextureID = _frameBufferTextureID;
glBindFrameBuffer(GL_FRAMEBUFFER, _frameBufferID)
[self drawTexture: _currentTextureID];
[self bindDrawable]
[self drawTexture: _currentTextureID];
Този вид работа, но тъй като методът за рисуване се извиква многократно, изображението се размазва. Мислех, че може да е, защото не можете да изобразите текстура в нейния собствен FBO, така че опитах с два FBO, но и това не проработи. Аз съм сравнително нов в OpenGL, така че всеки съвет ще бъде много оценен!
Ето линк към пълния източник: