PDA

View Full Version : Rendering context issue



gourou
09-24-2008, 06:37 AM
Hello,

I have asked this question on the beginner's thread but not much luck so far. Maybe someone here could help me further.

I'm working on a simple application (let's call that app. A) that will be launched from within a host application (let's call that app. H). Both applications have an own OpenGL control to render some technical stuff on it.

When I launch A from outside of H, everything displays well on A's canvas. However, when I launch it from within H, its OpenGL becomes black and nothing can be drawn on it.

Could you please give me a hand?
Thanks a lot!

V-man
09-24-2008, 09:21 AM
http://msdn.microsoft.com/en-us/library/ms537558.aspx

A thread can have one current rendering context. A process can have multiple rendering contexts by means of multithreading. A thread must set a current rendering context before calling any OpenGL functions. Otherwise, all OpenGL calls are ignored.

gourou
09-24-2008, 09:56 AM
Thanks V-man!

I'm able to grab the host's rendering context with wglGetCurrentContext() then when I try to set the current context with wglMakeCurrent() this function returns an error 0007D0.

My goal is to have in A an opengl window independent of the one being depicted in H. I do not want to share anything between them.

Is that possible?

Thanks in advance!

yooyo
09-25-2008, 03:38 AM
Change your code to call wglMakeCurrent(rc) before refresh and wglMakeCurrent(NULL) after SwapBuffers. This will ensure that there is no overlapped RC's in same thread. So...
H: event OnPaint
wglMakeCurrent(H_rc);
DrawH();
SwapBuffers()
wglMakeCurrent(NULL);

A: event OnPaint
wglMakeCurrent(A_rc);
DrawA();
SwapBuffers()
wglMakeCurrent(NULL);

And do not call A::OnPaint in the middle of H::OnPaint.

gourou
09-25-2008, 12:52 PM
Thanks a lot Yooyo! I will give it a try.