Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Degiik en 04 de Julio de 2003, 06:29:38 PM

Título: Ogl En Dos Ventanas
Publicado por: Degiik en 04 de Julio de 2003, 06:29:38 PM
 Hola, como siempre recurro al foro a ver si alguien me puede echar un cable, mi problema es el siguiente.

Supongamos que Subclasifico o  Superclasifico dos labels que son hijos de una tercera ventana. Pues bien, de ambos tengo su procedimiento ventana, y en el mensaje WM_CREATE de ambos me creo el Contexto de Dispositivo para trabajar con OGL ( wglCreateContext... wglMakeCurrent... ). Ahora bien, cuando dibuje alguna primitiva, a cual de las dos ventanas afectara, en cual se dibujará. Como gestiono el trabajo con dos Contextos de Dispositivos.

Gracias, un saludo.
Título: Ogl En Dos Ventanas
Publicado por: ethernet en 05 de Julio de 2003, 11:06:50 AM
 
Citar
The wglMakeCurrent function makes a specified OpenGL rendering context the calling thread's current rendering context. All subsequent OpenGL calls made by the thread are drawn on the device identified by hdc. You can also use wglMakeCurrent to change the calling thread's current rendering context so it's no longer current
sacado de la msdn.

Nunca lo he probado pero supongo q trabajar con varias ventanas sera igual en cuanto a la creacion, formato de pixel y todo eso y le indicas en el hdc tiene q dibujar con wglMakeCurrent

un saludo
Título: Ogl En Dos Ventanas
Publicado por: Degiik en 05 de Julio de 2003, 05:48:12 PM
 Carai, segun esto deberé crearme un hilo por objeto, un poco heavy no?  (nooo)  Si tengo 20 controles en pantalla buajjjjj  <_<  
Título: Ogl En Dos Ventanas
Publicado por: ethernet en 06 de Julio de 2003, 05:04:13 PM
 Si tienes varias ventanas debes tener varios hwnd y cada hwnd su hdc correspondiente con su formato de pixel  ysu correspondiente contexto de ogl. Despues el ogl dibuja en el contexto activo supongo yo.

saludos
Título: Ogl En Dos Ventanas
Publicado por: Degiik en 06 de Julio de 2003, 10:29:53 PM
 Si claro  :blink:  pero no me funciona.  
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 07 de Julio de 2003, 04:24:04 PM
 Este... tienes dos soluciones. O creas y destruyes el contexto dinámicamente en el paint de cada objeto ( como el hdc con BeginPaint,EndPaint,GetDC,ReleaseDC ) , o bien te creas un hilo por objeto, lo cual produce que cada hilo disponga de un dispositivo de contexto independiente.

Como creo que estas en la segunda opción y te da problemas, te diré que desde el hilo debes crear el 'label', de esta forma este será el encagado de recoger todos los mensajes del mismo, como consequencia ese hilo debe estar embuclado en el  ' bucle de mensajes' ( supongo que esto es lo que te falta ).

Un saludo.
Título: Ogl En Dos Ventanas
Publicado por: Degiik en 08 de Julio de 2003, 10:12:03 PM
 
Citarese hilo debe estar embuclado en el ' bucle de mensajes'

No acabo de entederte, esa parte. Tengo el hilo que me genera los labels,y estos estan subclasificados, pero se me quedan como pillados. No lo entiendo  O_O  
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 09 de Julio de 2003, 04:40:36 PM
 es simple...
un hilo es responssable de recoger los mensajes de ventana de todos los 'CreateWindow' que el realize. A partir de esta regla, no puedes crear 'labels' desde un hilo y este acabar sin más. El hilo creador de los labels debe estar enbuclado dentro del bucle de mensajes, como el de la WinMain


   DWORD WINAPI mihilo ( ....

    ....
   bla bla
   CreateWindow (...
   bla bla
   ...
   while (GetMessage (&msg, NULL, 0, 0))
{
               TranslateMessage (&msg);
               DispatchMessage (&msg);
}


de esta forma, los controles creados podrán recibir mensajes y ser procesados en el correspondiente procedimiento ventana.

A ver si arreglas el problema.  B)
Un Saludo.
Título: Ogl En Dos Ventanas
Publicado por: Degiik en 14 de Julio de 2003, 09:51:20 AM
 Thanks, ahora lo entiendo  (uoh) , ya esta arreglado.  
Título: Ogl En Dos Ventanas
Publicado por: ethernet en 14 de Julio de 2003, 07:01:23 PM
 No me creo q haya q crear un thread para poder tener dos ventanas con ogl.
Si lo haces asi al tener varios lo q tienes son dos contextos diferentes y no debes cambiar entre activos, como bien especifica la msdn.

saludos
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 15 de Julio de 2003, 03:52:09 PM
Cita de: "MAMestre"] Este... tienes dos soluciones. O creas y destruyes el contexto dinámicamente en el paint de cada objeto ( como el hdc con BeginPaint,EndPaint,GetDC,ReleaseDC ) , o bien te creas un hilo por objeto, lo cual produce que cada hilo disponga de un dispositivo de contexto independiente.
Un saludo.
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 15 de Julio de 2003, 03:52:44 PM
Cita de: "MAMestre"] Este... tienes dos soluciones. O creas y destruyes el contexto dinámicamente en el paint de cada objeto ( como el hdc con BeginPaint,EndPaint,GetDC,ReleaseDC ) , o bien te creas un hilo por objeto, lo cual produce que cada hilo disponga de un dispositivo de contexto independiente.
Un saludo.
Título: Ogl En Dos Ventanas
Publicado por: ethernet en 16 de Julio de 2003, 01:27:34 PM
 te refieres a hacer lo siguiente:

HGLRC rc = wglCreateContext(hDC);
wglMakeCurrent(hDC,rc);

//render
..

wglMakeCurrent(0,0);
wglDeleteContext(rc);

en cada frame?
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 16 de Julio de 2003, 03:56:52 PM
 Si
Título: Ogl En Dos Ventanas
Publicado por: ethernet en 19 de Julio de 2003, 11:21:13 PM
 eficiencia rocks
Título: Ogl En Dos Ventanas
Publicado por: MA]Mestre en 20 de Julio de 2003, 08:06:55 AM
 pues tu diras, si hay otra solucion la espero  ;)