OpenGLES - пытаясь получить полноэкранные "следы" - режим одного буфера или копирование фронтбуфера? - PullRequest
1 голос
/ 09 мая 2011

Я пытаюсь получить полноэкранный эффект "следа", похожий на тот, что здесь: http://elenzil.com/progs/js1k

традиционный способ сделать это - не очистить изображение в начале рендеринга, но вместо этого смешайте на большом полигоне, который имеет цвет фона и имеет низкую альфа.

рисование многоугольника в openGL ES довольно просто:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

GLfloat clearRectPts[] = {
                          -0.5f, -0.5f,
                          -0.5f,  0.5f, 
                           0.5f, -0.5f,
                           0.5f,  0.5f,
                         };
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(0.0f, 0.0f, 0.0f, 30.0f / 255.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT , 0, clearRectPts);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_BLEND);

но есть Гоча, что текущие операции GL происходят с буфером, который устарел по сравнению с передним буфером. так что в итоге вы получаете «заикающиеся» изображения.

прежде чем я пойду по пути рендеринга к закадровой текстуре и тому подобному Есть ли известный способ сделать это?

очевидные решения, которые я бы хотел найти, являются следующими:

  • скопировать передний буфер в задний буфер в начале рендеринга.
  • вместо замены буферов, копирование заднего буфера на фронт.
  • запускать с одиночной буферизацией.

1 Ответ

1 голос
/ 09 мая 2011

понял это. kEAGLDrawablePropertyRetainedBacking должно быть ИСТИНА, как показано ниже:

        eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithBool:TRUE],
                                    kEAGLDrawablePropertyRetainedBacking,
                                    kEAGLColorFormatRGBA8,
                                    kEAGLDrawablePropertyColorFormat,
                                    nil];
...