Necesito inicializar una textura OpenGL 2D con ceros.¿Cómo inicializar eficientemente la textura con ceros?
¿Por qué? Represento esta textura con OpenCL. A grandes rasgos, las etapas de generación son:
- Crear textura RGBA, inicializar con ceros (lo que contiene píxeles negros transparentes)
- OpenCL: el color de cómputo de píxeles, donde algunos objetos son visibles y escribirlos en esta textura
- OpenGL: agrega asignación de entorno a los píxeles transparentes y muestra la imagen final
Por lo tanto, no es necesario pasar ningún dato de textura real a glTexImage2d
. Pero de acuerdo con la especificación, cuando paso data = NULL, la memoria de textura se asigna pero no se inicializa.
La asignación de una memoria del lado del cliente llena de ceros y que pasa a glTexImage2D
no es una opción muy buena, aunque solo puedo pensar en una.
EDITAR: En realidad, quiero iniciar solo el componente alfa (RGB se anulará de todos modos), pero dudo que esto facilite la situación.
Nunca escuché sobre 'glClearBuffer'. ¿Es esto de una versión muy nueva? ¿Tiene alguna ventaja sobre 'glClear' (o este último incluso está en desuso) ?. –
@Christian: La principal ventaja de ClearBuffer es que puedes borrar buffers específicos. Si tiene varios búferes en el búfer de fotogramas, múltiples objetivos de renderizado, entonces puede desear borrar diferentes colores diferentes. O no borrar alguno en absoluto. No puedes hacer eso con 'glClear'; borra todos los buffers al mismo color claro. 'glClear' no está en desuso, y' glClearBuffer' proviene de GL 3.0 (no hay extensión para él). –
Tenga en cuenta que glClearTexImage solo funciona si el almacenamiento de textura se ha asignado previamente, utilizando una llamada a glTexImage * o glTexStorage *. Simplemente crear la textura usando glBindTexture no es suficiente. Pero esto también se aplica a glTexSubImage2D, por supuesto. – rdb