- (void)renderToTextureWithVertices:(const GLfloat *)vertices textureCoordinates:(const GLfloat *)textureCoordinates;
{
[GPUImageOpenGLESContext useImageProcessingContext];
[self setFilterFBO];
[filterProgram use];
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture);
glUniform1i(filterInputTextureUniform, 2);
if (filterSourceTexture2 != 0)
{
glActiveTexture(GL_TEXTURE3);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture2);
glUniform1i(filterInputTextureUniform2, 3);
}
if (filterSourceTexture3 != 0)
{
glActiveTexture(GL_TEXTURE4);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture3);
glUniform1i(filterInputTextureUniform3, 4);
}
if (filterSourceTexture4 != 0)
{
glActiveTexture(GL_TEXTURE5);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture4);
glUniform1i(filterInputTextureUniform4, 5);
}
if (filterSourceTexture5 != 0)
{
glActiveTexture(GL_TEXTURE6);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture5);
glUniform1i(filterInputTextureUniform5, 6);
}
if (filterSourceTexture6 != 0)
{
glActiveTexture(GL_TEXTURE7);
glBindTexture(GL_TEXTURE_2D, filterSourceTexture6);
glUniform1i(filterInputTextureUniform6, 7);
}
glVertexAttribPointer(filterPositionAttribute, 2, GL_FLOAT, 0, 0, vertices);
glVertexAttribPointer(filterTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, textureCoordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
for (id<GPUImageInput> currentTarget in targets)
{
[currentTarget setInputSize:inputTextureSize];
[currentTarget newFrameReady];
}
}