Schmo
Schmo

Reputation: 353

Is it possible to preserve all the state at once in OpenGL?

If we have several OpenGL contexts, each in its own process, the driver somehow virtualises the device, so that each program thinks it exclusively runs the GPU. That is, if one program calls glEnable, the other one will never notice that.

This could be otherwise done with a ton of glGet calls to save state and its counterparts to restore it afterwards. Obviously, the driver does it more efficiently. However, in userspace we need to track which changes we made to the state and handle them selectively. Maybe it's just me missing something, but I thought it would be nice, for one, to adjust Viewport for a Framebuffer, and then just undo those changes to whatever state they were before.

Maybe there is a way of achieving the effect of a context switch yet within a single program?

Upvotes: 3

Views: 670

Answers (3)

Andon M. Coleman
Andon M. Coleman

Reputation: 43319

The state machine (and command queue, discussed below) are unique to each context. It is much, much higher-level than you are thinking; the state is generally wrapped up nicely in usermode.

As for context-switching in a single process, be aware that each render context in GL is unsynchronized. An implicit flush is generated during a context switch in order to help alleviate this problem. As long as a context is only used by a single thread, this is generally adequate but probably going to negatively impact performance.

Upvotes: 1

genpfault
genpfault

Reputation: 52083

For pre-Core OpenGL there's glPushAttrib()/glPopAttrib() that will let you store off some GL state.

You're probably better off writing your own client-side state shadowing though.

Upvotes: 1

datenwolf
datenwolf

Reputation: 162164

Maybe there is a way of achieving the effect of a context switch yet within a single program?

You may create as many OpenGL contexts in a single process as you like and switch between them. Also with modern GPUs the state of the OpenGL context has little resemblance of what's actually happening on the GPU.

Upvotes: 1

Related Questions