En lugar de usar glGenTextures()
para obtener una ID de textura sin usar. ¿Puedo elegir aleatoriamente un número, digamos, 99999 y usarlo?¿Está bien usar una ID de textura aleatoria?
lo haré, por supuesto, consulta:
glIsTexture(m_texture)
y asegurarse de que es falsa antes de continuar.
He aquí algunos antecedentes:
Estoy desarrollando una aplicación presentación de diapositivas de imágenes para el mac. La vista previa de la presentación de diapositivas es perfecta. Para guardar la presentación de diapositivas, estoy renderizando a un FBO. Creo un contexto AGL, instancia una textura con glGenTextures()
y la renderizo en un buffer de cuadros. Todo está bien, excepto por un problema menor.
Después de guardar la presentación de diapositivas y volver a la ventana principal, todas las miniaturas de mis imágenes son grises, es decir, las texturas se han borrado.
Lo he investigado y descubrí que las miniaturas de la imagen y mi textura FBO de alguna manera tienen el mismo ID de textura. Cuando elimino mi textura FBO al final de la operación de guardado de diapositivas, las texturas de las miniaturas también se pierden. Esto es extraño porque tengo un contexto AGL durante el guardado, y la interfaz de usuario principal tiene otro contexto AGL, presumiblemente creado en segundo plano por Core Image y sobre el cual no tengo control.
Así que mis opciones, como lo veo ahora, es:
- no elimina la textura FBO.
- Elija al azar una ID de alta textura con la esperanza de que la interfaz de usuario principal no la vaya a usar.
En realidad he leído que no necesariamente tienen que eliminar su textura si se está eliminando el contexto OpenGL AGL. Debido a que eliminar su contexto de OpenGL elimina automáticamente todas las texturas asociadas. ¿Es esto cierto? Si es así, la opción 1 tiene más sentido.
Me doy cuenta de que aquí ocurren cosas divertidas que realmente no puedo explicar. Por ejemplo, después de guardar mi presentación de diapositivas de imágenes en un archivo .mov
, elimino el contexto, que se creó en la misma clase. Por derecho, no debería afectar las texturas creadas en otro contexto. Pero lo hace, y realmente no puedo explicar eso.
Gracias por su respuesta. La asignación manual de una ID de textura está fuera de cuestión, ya que debemos admitir OpenGL 1.4 hasta 3.2. Mi mejor apuesta ahora es no eliminar la textura en absoluto. Por cierto, no puedo votar por tu respuesta porque no tengo suficientes puntos. –
@Nicol: Su segundo párrafo parece bastante * incompleto *. – genpfault
@genpfault: reparado. ¡Gracias! –