Рендирането от към текстура от FBO причинява замъгляване

Опитвам се да създам програма за редактиране на снимки с помощта на 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, така че всеки съвет ще бъде много оценен!

Ето линк към пълния източник:

Изходен код

Това е пример за замъгляване


person James Andrews    schedule 17.02.2014    source източник


Отговори (1)


Както се оказа, проблемът е във фрагментния шейдър. Преди това координатата на текстурата беше представена като lowp vec2. Когато го смених на highp vec2, проблемът изчезна.

person James Andrews    schedule 18.02.2014