2012-03-17 16 views
13

Uso GLkit/GLKView en mi proyecto IOS OpenGL ES 2.0 para administrar el FBO/ciclo de vida predeterminado de mi aplicación.Obtener id. De búfer de fotograma predeterminado de GLKView/GLKit

En OpenGL escritorio a fin de obligar OBF defecto (el búfer frontal) que sólo puede llamar glBindFrameBuffer (GL_FRAMEBUFFER, 0), pero esto no es el caso en IOS aplicación ya que se debe crear el defecto OBF sí mismo y que tendrá una identificación única;

El problema es que el estilo de codificación GLKit/GLKView me obliga a usar la función "bindDrawable" de GLKView para activar FBO predeterminado que hace que el diseño de mi sistema de renderización cruzado sea un poco feo (tengo que almacenar el puntero GLKView como vacío * en mi C++ engine class y bridge lo emiten cada vez que quiero realizar un enlace FBO predeterminado)

¿Hay alguna forma de obtener el ID de FBO predeterminado que crea GLKit/GLKView para que pueda almacenarlo y usarlo para vincular el búfer de fotogramas predeterminado en cualquier lugar en mi código?

En la peor me puede volver a crear el defecto OBF mí y dissing GLKit/GLKView pero un buen marco de tal manera que me gustaría seguir utilizándolo.

Lo siento por mi mal inglés y agradecer de antemano cualquier respuesta.

Respuesta

22

quizás usted puede conseguir la "corriente" Identificación framebuffer justo después de su llamada bindDrawable, llamando a algo como:

GLint defaultFBO; 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO); 
+0

Esto funciona muy bien, gracias por su respuesta (Lo sentimos, no puedo votar todavía). –

+0

Impresionante, me alegro de que funcionó para ti. –

0

La respuesta que se da es sin duda la solución adecuada, sin embargo, no aborda el error en su comprensión de la diferencia conceptual entre OpenGL estándar y OpenGL para sistemas integrados. // ----------------------------------------------- creo que es necesario señalar aquí que la llamada a glBindFramebuffer (GL_FRAMEBUFFER, 0) no regresa a la representación del uso de este dispositivo principal a pesar de que parece ser lo que para las máquinas que ejecutan Windows, Unix (Mac) o Linux. Los equipos de escritorio y portátiles no tienen el concepto de un framebuffer principal del sistema predeterminado. Esta idea comenzó con dispositivos portátiles. Cuando hace una llamada de enlace OpenGL con cero como parámetro, entonces lo que está haciendo es establecer esta función en NULL. Es cómo deshabilitar esta función. Es lo mismo con glBindTexture (GL_TEXTURE_2D, 0); Es posible que en algunos dispositivos portátiles el controlador active automáticamente el framebuffer principal del sistema cuando establece el framebuffer en NULL sin activar otro. Esta sería una elección hecha por el fabricante y no es algo en lo que deba contar, esto no es parte de la especificación de OpenGL ES. Para equipos de sobremesa y portátiles, esto es absolutamente necesario ya que se requiere la desactivación del framebuffer para volver al renderizado OpenGL normal. ¡Pero recuerda! esto no es un retorno a cualquier framebuffer principal, está cerrando el buffer de cuadro activado.

0

La forma correcta de vincular el framebuffer predeterminado en GLKit es llamar al método bindDrawable en GLKview.

[self bindDrawable] o [myglkview bindDrawable] dependiendo del contexto.

Cuestiones relacionadas