• Jueves 28 de Marzo de 2024, 19:19

Autor Tema:  Concurrencia Con Opengl  (Leído 2947 veces)

Pitfall

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Concurrencia Con Opengl
« en: Lunes 8 de Mayo de 2006, 10:15 »
0
Hola a todos! Estoy desarrollando una aplicación en C++ Builder que pinta varias gráficas a la vez con OpenGL. Cada thread se encarga de pintar una gráfica distinta, el problema es que no consigo que los threads trabajen a la vez, sino que se van turnando para pintar, y eso ralentiza la aplicación. Esto es así porque cada vez que un thread pinta llama a la función wglMakeCurrent, pero si no la llamo no pinta. ¿Alguien sabe alguna manera de que los threads trabajen todos a la vez en OpenGL?

Gracias, un saludo!!!

PENTEX

  • Miembro activo
  • **
  • Mensajes: 89
    • Ver Perfil
    • http://black-byte.com/
Re: Concurrencia Con Opengl
« Respuesta #1 en: Miércoles 10 de Mayo de 2006, 01:37 »
0
Podria ser:

- En MSDN proponen "An application can perform multithread drawing by making different rendering contexts current to different threads, supplying each thread with its own rendering context and device context.". Me parece que de todos modos no es una solucion muy satisfactioria. Ellos dicen lo mismo aca

-  Realizar un acumulador de geometrias, texturas, shaders, etc, en un hilo independiente e impedir que los otros hilos dibujen directamente sobre un contexto OpenGL, en vez de esto, haciendolo a travez de hilo acumulador. Tiene la ventaja de volver un sistema grafico OpenGL concurrente de manera segura, desventaja, mas uso de memoria y una abstraccion mas que mantener.

No se me ocurre mas, tal vez exista un api ,toolkit o una libreria que pueda manejar problemas de concurrencia en c++ y/o OpenGL

Camilo.
Rune GameDev

Grupo PENTEX.

Ruben3d

  • Moderador
  • ******
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Concurrencia Con Opengl
« Respuesta #2 en: Miércoles 10 de Mayo de 2006, 21:12 »
0
Hola,

Creo que la solución que propone PENTEX es la mejor y más lógica. Todos los sistemas de dibujo concurrentes que conozco la emplean: encargar a cierto hilo las tareas de pintado, que irá procesando consecutivamente.

Un saludo,

Ruben3d

Pitfall

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Concurrencia Con Opengl
« Respuesta #3 en: Lunes 15 de Mayo de 2006, 10:24 »
0
Gracias por vuestra ayuda. ¿Sabéis si lo de hacer peticiones a un hilo que se encargará de dibujar y procesar las peticiones lo puede hacer OpenGL automáticamente, o tengo que implementarlo yo? ¿Realmente ganaré en velocidad de ejecución?

Creo que no lo comenté, pero yo trabajo en modo ventana, y en cada ventana habrá más de un thread dibujando, además habrá más de una ventana. Como sabéis, cuando se usa OpenGL en modo ventana es necesario llamar a la función wglMakeCurrent, a la que le pasas como parámetros el HDC y el HGLRC donde tendrá que pintarse, y no puede haber 2 asignaciones de este tipo a la vez, por eso no puede haber varios threads pintando a la vez. Vuestra solución me ha gustado, podría ganar algo de tiempo tal como proponéis, lo que no sé es si eso lo puede hacer OpenGL mediante alguna función, o si sabéis de alguna manera de saltarse la limitación de que cada thread tenga que llamar a wglMakeCurrent cada vez que quiera dibujar.

Un saludo!!!