Tengo un proceso que está haciendo algunas pesadas matemáticas con gl en lugar de la CPU (gl/gpu hasta ahora es aproximadamente 100 veces más rápido que cpu) pero todavía es aproximadamente un minuto para el problema habitual tamaños para estar listo, así que quería una buena barra de progreso para saber cuánto tiempo tomará.Mostrando el progreso de los cálculos gl en qt
Así que configuré mis clases para heredar desde QObject
y tengo una señal currentProgress(int)
que se emite de vez en cuando. Desafortunadamente, mi programa se congela durante el cálculo, por lo que no hay ningún progreso visible. Encontré la solución al llamar al QCoreApplication::processEvents()
, lo que me dio otro problema. Durante esta llamada, se desencadena un repintado de toda la ventana, lo que da lugar a que mi cálculo sea invocado en una recursión infinita, ya que se desencadena por el evento paint.
Ahora todos estos problemas son señales que le dicen a mi ranura de intuición de programación que probablemente haya diseñado mal algo, así que le pregunto ¿cuál es la forma predeterminada de tener una refrescante barra de progreso en qt?
También tenga en cuenta: Cuando deseo insertar el cálculo en otro subproceso, probablemente necesite crear un nuevo contexto GL o al menos mover el existente. Entonces, si ese es el camino a seguir, ¿alguien podría explicarme cómo lograr esto en qt?
EDITAR
Para hacer las cosas más claro que no estoy dibujando a la QGLWidget pero utilizando un FBO. Probablemente sea lo mejor utilizar un contexto propio para los cálculos, pero no sé si es el camino correcto a seguir.
Nueva información
así que traté de seguir su consejo, pero tropezaron con un problema. A QGLContext
parece haber estado conectado a una pantalla/objeto GUI por lo que no puedo crear una fuera de pantalla.
Además, no puedo hacer que la corriente QGLWidget
esté en los otros hilos. Devuelve el error QGLContext::makeCurrent(): Failed.
Además, todas las entradas sobre las que leí eran personas con el mismo problema que yo: querían hacer representaciones en otro hilo y no encontraron una solución.
Tiene razón sobre la recursión, era la razón principal para preguntar, aunque sabía cuál sería la respuesta. Pero la forma en que describes no suena demasiado para mí. También tenga en cuenta que todos mis cálculos están fuera de la pantalla ya que edité en mi pregunta. – Nobody
@ Nadie ¿Por qué no debería ser esto independiente de la plataforma, teniendo en cuenta que Qt incluso tiene una clase para la gestión de pbuffer ('QGLPixelBuffer')? –
@Christian: A habló sobre las funciones wgl que son específicas de Windows. También vi la clase de QT, pero también necesita un contexto actual en su hilo, pero no termino el contexto. – Nobody