Я учусь использовать шейдеры в OpenGL ES.
В качестве примера: вот мой шейдер фрагмента игровой площадки, который берет текущий видеокадр и делает его оттенками серого:
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main() {
highp vec4 theColor = texture2D(videoFrame, textureCoordinate);
highp float avrg = (theColor[0] + theColor[1] + theColor[2]) / 3.0;
theColor[0] = avrg; // r
theColor[1] = avrg; // g
theColor[2] = avrg; // b
gl_FragColor = theColor;
}
theColor
представляет текущий пиксель. Было бы здорово также получить доступ к предыдущему пикселю по этой же координате.
Ради любопытства я хотел бы добавить или умножить цвет текущего пикселя на цвет пикселя в предыдущем кадре рендеринга.
Как я мог сохранить предыдущие пиксели и передать их моему фрагментному шейдеру, чтобы что-то с ними сделать?
Примечание. На iPhone это OpenGL ES 2.0.
dot
, которая отображается на инструкцию, которая выполняет как за один шаг, так и намного быстрее. - person Damon   schedule 25.07.2011dot(theColor.xyz, vec3(0.3333))
. Скалярное произведение умножает два вектора, а затем складывает компоненты. Это именно то, что вы делаете, за исключением того, что это одна инструкция с одним циклом. См. точку - person Damon   schedule 25.07.2011