Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





OpenGL & multithreading (al ataquerrr)...

Iniciado por Emotion, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Emotion

                                Hola, pues vamos con otra preguntita avanzada para no perder la costumbre :sonriendo:

Vereis, puedo renderizar multiples contextos o incluso todos los objetos de una pasada (es decir, lo normal). Pero tengo un problema y es que me gustaria implementar multithreading en las llamadas a OpenGL, lo que pasa es que no se si las admite (por logica pienso que no, sino la tarjeta se volveria loca con multiples instancias de comandos al buffer de comandos).

Alguien ha jugado un poco con el tema?

Saludos
                               
G3: Get the Power!

Drácula

                                Yo no lo he probado, pero no creo que funcione por tu mismo razonamiento. Piensa que entre, por ejemplo, dos glvertex3f, se podría colar la otra tarea!!
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Emotion

                                Lo imaginaba, por eso puse el comentario entre parentesis (para que no se notara que me moria de la vergüenza :riendo:)

No, ya en serio... la verdad es que lo imaginaba y en el fondo me da cosa, ya que la pipeline que estoy diseñando para mi motor lo hace casi todo en paralelo, desde la carga de ficheros, la reproduccion de video o audio, la transformacion geometrica, el VSD y algunas cosas mas, pero hubiera estado bien el soporte de multiples instancias. Quien sabe... a lo mejor me da tiempo de proponer eso para el OpenGL 2.0 :riendo:

Saludos
                               
G3: Get the Power!

Drácula

                                Utilizar un sistema en paralelo conlleva muchos riesgos, porque ya sabes que tienes que controlar muchos más aspectos de los que controlarías si utilizaras un sistema secuencial. Pero también es mucho más potente y tecnológicamente me parece muy avanzado. ¡Espero que también sea fácil de utilizar,porque sería la leche!
Yo utilicé un sistema así en un editor de terrenos fractales y la verdad es que...prefiero no utilizarlo! Pero sólo porque es mucho más cómodo hacerlo secuencial.                                
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

Juan Mellado

                                Emotion...

Queda claro que no se puede llamar a funciones de OpenGL sobre un mismo contexto desde threads distintos (al menos sin utilizar objetos de sincronización como semáforos, regiones críticas, etc...), ya que OpenGL almacena su estado interno en una estructura global. Lo cual, por cierto, es una de las razones por las que las llamadas a las funciones de OpenGL necesitan pocos parámetros [por lo general, no empeceís a buscarme contra-ejemplos].

Lo que si se puede es llamar a funciones OpenGL desde distintas threads para contextos distintos, aún perteneciendo esos contextos a la misma ventana. Para los más inexpertos (como yo) que quieran ver como hacerlo hay un ejemplo muy sencillo en la web de Microsoft. Buscad:

Implementing Multiple Threads in an OpenGL Application (Q128122)

Saludos, Juan Mellado                                

Emotion

                                para Dracula:

Pues si, la verdad es que, si las cosas siguen saliendome bien, el motor sera muy facil de utilizar. Tan solo has de pedir al motor el recurso que te interesa, ya que el loader (cargador de ficheros) esta en una hebra atento a tus peticiones y tambien el listener (modulo de audio), asi como el linker (modulo de red), y los demas...

En fin.. que pena que en OpenGL no se puedan llevar varias hebras para el mismo contexto, pero al menos podre renderizar varias ventanas simultaneamente :sonriendo:

Si consigo hacerlo funcionar del todo (o al menos una parte), compilare un video e intentare meterlo en internet para que los del foro lo veais... ;D

para Juan Mellado:

Gracias por la respuesta, ya lo comprobe y es como tu dices... solo un contexto para una hebra.. en fin, que se le va a hacer...

para fiero (creo):

No se si aun andaras por el foro, pero la solucion al problema que tenias con el codigo SIMD es la siguiente:

solo has de declarar la variable de tipo vector con una sentencia delante, que es la siguiente:

tu ponias algo asi:   vector v;
y lo que debes poner es: _declspec(align(16)) vector v;

La razon es que, segun el manual de Intel, los datos deben estar alineados a 16bytes (128bits) para que la instruccion que utilizas sea efectiva, ya que tratas de usar una estructura de datos propia con las instrucciones SIMD (creo que estas utilizando una organizacion de tipo AOS (Array of Structures)).

Saludos
                               
G3: Get the Power!

fiero

                                hola Emotion
pues si, estoy por aqui, pero ahora me dejas fuera de combate, no recuerdo haber posteado nada sobre un problema con las SIMD, será otro colega... de todas formas, gracias por la explicación porque yo utilizo muchos vectores de estructuras, y mejor que estén alineados,.... nunca te acostarás.....

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

Emotion

                                Vaya... pues entonces quien dijo lo de las SIMD??? jurjur que lio :oops:

Bueno, es igual... si te sirve el codigo, pues yo me alegro :sonriendo:

Saludos
                               
G3: Get the Power!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.