Потяните к внеэкранному renderbuffer в OpenGL ES (iPhone)

Я предлагаю использовать глобальные переменные blurfrom и blurto. Затем настройте все элементы, о которых Вы заботитесь собирающийся присвоить их положение в DOM к переменной blurfrom, когда они теряют фокус. Кроме того, настройте их так, чтобы получение фокуса установило переменную blurto на их положение в DOM. Затем Вы могли использовать другую функцию в целом для анализа blurfrom и blurto данных.

12
задан genpfault 18 June 2010 в 15:10
поделиться

3 ответа

@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
2
ответ дан 2 December 2019 в 23:19
поделиться

Поскольку вы не можете использовать presentRenderbuffer с внеэкранным FBO, вам следует связать его с объектом текстуры с помощью glFramebufferTexture2DOES , а затем отрендерить текстурированный полный -экранный квад.

3
ответ дан 2 December 2019 в 23:19
поделиться

Вы не можете представить нормальный буфер рендеринга (созданный с помощью glRenderbufferStorage), он всегда вне экрана. presentRenderbuffer: может использоваться только для буферов рендеринга, которые были созданы с помощью renderbufferStorage: fromDrawable: . Если вы проверили возвращаемое значение этого presentRenderbuffer: , вы должны заметить, что он не работает.

Что вы пытаетесь сделать?

1
ответ дан 2 December 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: