Mi código se acerca a la administración de sombreadores GLSL, que crea cada sombreador y el programa asociado y elimina cada sombreador y programa. Hace poco leí http://www.opengl.org/wiki/GLSL_Object y no se hace constar que:Forma correcta de eliminar el sombreador GLSL?
El objeto de sombreado, debido a que se adjunta al objeto de programa, se seguir existiendo, incluso si elimina el objeto de sombreado. Solo el sistema borrará cuando ya no esté adjunto a ningún objeto del programa (y cuando el usuario haya pedido eliminarlo, por supuesto).
Cómo llego esto correctamente, si llamo glDeleteShader()
en el objeto de sombreado después de enlazar con el programa, sólo necesito para seguir el programa? ¿Es seguro asumir que esto es siempre cierto?
Incluso si es, por supuesto, la misma recomendación ya dada, +1 para el argumento de la memoria práctica y las mediciones. –
Aunque lo que diga es correcto de acuerdo con [la documentación] (http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgram.xml) ("Después del funcionamiento del enlace, las aplicaciones pueden modificar libremente el sombreador adjunto objetos, compilar objetos de sombreado adjuntos, separar objetos de sombreado, eliminar objetos de sombreado y adjuntar objetos de sombreado adicionales."), Me he encontrado con algunos controladores de mal comportamiento que no les gusta cuando sueltas shaders, particularmente en plataformas móviles. Como un problema relacionado con esto me dejó frustrado durante varios días, te recomiendo que NO separe los shaders después de un enlace (eliminar está bien). –
El problema es que simplemente borrar el sombreador sin separarlo podría no liberar la memoria, podría disminuir un conteo de referencia que no irá a 0 hasta que separe el sombreador. el sombreador aún está conectado, el usuario puede volver a llamar al enlace para volver a vincular el programa, por lo que el controlador necesita mantener suficiente información para hacerlo. Por lo tanto, debe sacrificar el uso de memoria con posibles problemas en los controladores rotos ... –