[SDL] SDL 1.3 and rendering API state management
David Olofson
david at olofson.net
Mon Sep 4 00:58:59 PDT 2006
On Monday 04 September 2006 04:13, Bob Pendleton wrote:
[...]
> David, I do this kind of stuff all the time. The SDL API *must* push
> all attributes, set what it needs, do the job, and restore the
> attribute and return.
The "opengl" renderer doesn't in the version I have, at least. It sets
the state up once, and assumes that no one is messing with it after
that.
> This way the context stays the same from the
> end users point of view.
This has clearly never been the intention. Just like glSDL, the SDL
renderers are not intended to be used together with other code using
the same contexts.
> Someone is going to say that pushing and popping the context is to
> time consuming, I don't believe it.
Well, nothing is free, but all other alternatives seem more or less
nonsensical, or plain do not work, so...
The current initialization takes 9 calls or so. No big deal for
"normal" operation, but push, init, render, pop for every single
SDL_Render*() call...? (For comparison; each SDL_RenderCopy() call
generates around 15 OpenGL calls as it is.)
> The alternative is to put in a wedge layer to capture OpenGL context
> changes (a shadow stack) so that the context can be saved and
> restored out side of OpenGL. And I think that is an even worse idea
> that having a notification API. :-)
Yeah, seems like yet another way to "avoid" overhead by introducing
extra logic that costs more than it can ever save. :-D
> It is better to drop the whole idea than to put in the kind of
> notification API you were talking about. Us mere mortals don't want
> to deal with it and will get it wrong all the time. Consider how few
> people actually check return codes from C standard library
> calls. :-)
Good point. (It only affects people that hack SDL or use OpenGL and/or
Direct3D directly, and want to use SDL 2D libs over it, but that's
bad enough.)
So, I guess it's either hardwiring state saving and restoring into the
SDL renderers, or possibly (if it actually matters) making it
optional by means of an "I want to share the OpenGL/Direct3D context
with the renderer" flag?
> If anything this is an argument for having a higher level SLD3D API
> that can take care of all of this stuff correctly no matter what the
> lower level API is. And, I know how popular that idea is! (Not at
> all.)
And, this layer would still have to actually implement a solution
(explicit support for multiple "clients" per context?), which means
in the end, we'd probably have about the same amount of overhead,
only it's generated by more complex code.
//David Olofson - Programmer, Composer, Open Source Advocate
.------- http://olofson.net - Games, SDL examples -------.
| http://zeespace.net - 2.5D rendering engine |
| http://audiality.org - Music/audio engine |
| http://eel.olofson.net - Real time scripting |
'-- http://www.reologica.se - Rheology instrumentation --'
More information about the SDL
mailing list