Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ogl En Dos Ventanas

Iniciado por Degiik, 04 de Julio de 2003, 06:29:38 PM

« anterior - próximo »

Degiik

 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.
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

 
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

Degiik

 Carai, segun esto deberé crearme un hilo por objeto, un poco heavy no?  (nooo)  Si tengo 20 controles en pantalla buajjjjj  <_<  
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

 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

Degiik

 Si claro  :blink:  pero no me funciona.  
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

MA]Mestre

 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.

Degiik

 
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  
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

MA]Mestre

 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.

Degiik

 Thanks, ahora lo entiendo  (uoh) , ya esta arreglado.  
egiik: h-O-5 hoja/ingestión 100mo Vida suspendida ( 1 día )

ethernet

 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

MA]Mestre

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.

MA]Mestre

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.

ethernet

 te refieres a hacer lo siguiente:

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

//render
..

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

en cada frame?

MA]Mestre


ethernet







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.