Estoy creando una aplicación similar a CAD (basada en Qt), será una interfaz de documentos múltiples y cada documento contendrá alrededor de 5 ventanas gráficas (derivadas de QGLWidget). Como tal, necesito que mi shader plano se comparta en toda la aplicación, y luego los activos 3D (modelos almacenados como VBO) para compartir en cada documento, es decir, las 5 ventanas gráficas.Estrategia para compartir recursos de OpenGL
Pensé que siempre y cuando compartiera el programa de sombreado y las direcciones de VBO GLuint todo funcionará automáticamente, no es así. Creo que debido a que cada viewport/context tiene su propio espacio de direcciones en la tarjeta gráfica, si alguien sabe mejor, ¡infórmenos!
Me gustaría tener el sombreador compilado en el inicio de la aplicación, pero esto está resultando difícil ya que necesito un QGLWidget válido para obtener OpenGL en un estado válido de antemano. Pero como necesito compartir los QGLWidgets (a través de su constructor) para que compartan recursos, uno debe crearse y mostrando antes de que los otros puedan ser instanciados. Pero esto es muy poco práctico ya que varias vistas se muestran al usuario de una vez.
Esto debe ser más fácil de lo que estoy haciendo porque no es nada innovador, pero realmente estoy luchando. ¿Alguien puede indicarme la dirección correcta?
Gracias, Cam
¡Excelente! QGLContext es un poco inútil por sí solo, el método create solo se puede ejecutar una vez que se crea un dispositivo de visualización, que en mi caso se encuentra dentro de un QGLWidget. Así que crearé un _Invisible_ QGLWidget como mi contexto de compilación shader, luego lo pasaré como const QGLWidget * shareWidget arg en el constructor del QGLWidget oculto del documento que contiene los datos de VBO, y ese widget luego se pasa a la ventana visible QGLWidgets. Esencialmente, crear una jerarquía de árbol de QGLWidget. Hacer componentes de GUI invisibles no es muy elegante, pero ahorrará mucho tipeo cuando se trata de portabilidad. – cmannett85
@ cmannett85 En realidad, * es * clase, algo así como: http://blog.qt.digia.com/blog/2011/06/03/threaded-opengl-in-4-8/ – mlvljr