Я предлагаю использовать глобальные переменные blurfrom и blurto. Затем настройте все элементы, о которых Вы заботитесь собирающийся присвоить их положение в DOM к переменной blurfrom, когда они теряют фокус. Кроме того, настройте их так, чтобы получение фокуса установило переменную blurto на их положение в DOM. Затем Вы могли использовать другую функцию в целом для анализа blurfrom и blurto данных.
@david хорошая идея ... что вам нужно сделать, это то, что сказал @prideout ... создать текстуру и отрендерить ее ... и каждый раз использовать текстуру на квадроцикле. Убедитесь, что вы рисуете текстуру только один раз, так как в вашем случае все остальное.
- (void)setUpTextureBuffer
{
glGenFramebuffersOES(1, &texturebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, texturebuffer);
// create the texture
glGenTextures(1, &canvastexture);
glBindTexture(GL_TEXTURE_2D, canvastexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, canvastexture, 0);
GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);
if(status != GL_FRAMEBUFFER_COMPLETE_OES) {
NSLog(@"failed to make complete framebuffer object %x", status);
}
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glClearColor(1.0, 1.0, 1.0, 1.0);
glViewport(0, 0, 512, 512);
glClear(GL_COLOR_BUFFER_BIT);
}
//setTargetToTexture() function
glBindFramebufferOES(GL_FRAMEBUFFER_OES, tbuffer);
glBindTexture(GL_TEXTURE_2D, allbrushes);
glViewport(0, 0, 512, 512);
//reset pointers after finishing drawing to textures
glViewport(0, 0, BWIDTH, BHEIGHT);
glVertexPointer(2, GL_FLOAT, 0, canvas); //canvas vertices
glTexCoordPointer(2, GL_FLOAT, 0, texels);
glBindTexture(GL_TEXTURE_2D, boundtexture); //bind to the texture which is the special render target
glBindFramebufferOES(GL_FRAMEBUFFER_OES, fbuffer); //back to normal framebuffer
Поскольку вы не можете использовать presentRenderbuffer
с внеэкранным FBO, вам следует связать его с объектом текстуры с помощью glFramebufferTexture2DOES
, а затем отрендерить текстурированный полный -экранный квад.
Вы не можете представить нормальный буфер рендеринга (созданный с помощью glRenderbufferStorage), он всегда вне экрана. presentRenderbuffer:
может использоваться только для буферов рендеринга, которые были созданы с помощью renderbufferStorage: fromDrawable:
. Если вы проверили возвращаемое значение этого presentRenderbuffer:
, вы должны заметить, что он не работает.
Что вы пытаетесь сделать?