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.
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
Carai, segun esto deberé crearme un hilo por objeto, un poco heavy no? (nooo) Si tengo 20 controles en pantalla buajjjjj <_<
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
Si claro :blink: pero no me funciona.
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.
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
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.
Thanks, ahora lo entiendo (uoh) , ya esta arreglado.
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
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.
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.
te refieres a hacer lo siguiente:
HGLRC rc = wglCreateContext(hDC);
wglMakeCurrent(hDC,rc);
//render
..
wglMakeCurrent(0,0);
wglDeleteContext(rc);
en cada frame?
Si
eficiencia rocks
pues tu diras, si hay otra solucion la espero ;)