Hi Marcus,
On Mon, Aug 18, 2014 at 5:06 AM, Marcus Lindblom Sonestedt <[email protected]>
wrote:
> Hello,
>
> The loop below is at the end of OSGWIndow.cpp (around line 1650), and runs
> infintely if there is no context. In that case, GL_INVALID_OPERATION is
> returned all the time, and the loop never exits.
>
> This happens if a PassiveWindow is destroyed while there is no current
> active context.
>
> Maybe, in PassiveWindow, one should call wgl/glx GetCurrentContext, thus
> allowing hasContext() to return false? (Or check if you get the same error
> twice in a row, but that's fixing the symptom, not the cause...)
>
> if(testGLErrors && this->hasContext() == true)
> {
> GLenum glerr;
>
> while((glerr = glGetError()) != GL_NO_ERROR)
> {
> FWARNING(("Window::frameExit: Caught stray OpenGL "
> "error %s (%#x).\n",
> gluErrorString(glerr),
> glerr));
>
> #ifndef OSG_DEBUG
> FWARNING(("Rerun with debug-libraries to get more accurate "
> "information.\n"));
> #endif
> }
> }
>
I'm a little reluctant to add context calls, as those tend to be expensive
and/or disruptive (pipe flushing). There's not really any reason why
GetCurrentContext should be, but in practice it's hard to predict how
expensive those calls are.
While I agree that an infinite loop is very bad behavior, is there a reason
you need to call frameExit while no context is active? In other words, can
we call this a user error? ;)
Yours
Dirk
------------------------------------------------------------------------------
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users