[Xr] Can the xrs argument be removed?
Bill Spitzak
spitzak at d2.com
Wed May 21 14:28:31 PDT 2003
I would like to recommend that you remove the "XrState*" argument from Xr,
and make it work much more like OpenGL where there is an implied static
context variable.
The benifits are that many pieces of software could then use the Xr calls
directly to draw things. This will greatly enhance portability. Notice that
there are lots of OpenGL drawing demos that can be imbedded into almost all X
toolkits, Windows, and OS/X programs. Conversely notice that there are *no*
such Xlib or DirectX demos, all of them are entire programs. This is directly
due to this "context" argument.
I think the elimination of the need for toolkit and platform specific wrapper
functions around all the Xr calls (or toolkit or platform-specific calls to
get the XrState) is absolutely vital for the success of Xr.
My recommendation is this:
There is thread-local static storage contining an XrState*. You read it
with a new call "XrState* XrGetState()" and "void XrSetState(XrState*)". All
functions that take an XrState* argument are changed to use this static
variable instead, including XrDestroy().
The initial value is NULL. Doing any calls other than XrGetState,
XrSetState, or XrCreate with NULL produces undefined results. (I recommend
this in case there is expense involved in creating an XrState, it can be
deferred until the first drawing is needed)
XrCreate() should both return the new XrState and also set the it as the
current one.
XrDestroy() sets the current state to NULL.
Other benifits:
If you add a rule that you are not allowed to use an XrState in more than one
thread at a time (easily checked with a usage bit set/cleared by XrSetState)
then you may be able to eliminate any locks in the XrState itself. I think
this does not cause any harm to the usability of the API and could be a big
win in speed.
Because the method used to make thread-local static variables is hidden this
is also much more portable than any solution a user of Xr can do.
Because the state only changes when XrSetState is called, large amounts of
cached data may be calculated and stored for the current one, while all the
others are much smaller.
--
,~,~,~,~ ~ ~ ~ ~
/\_ _|_========___ Bill Spitzak
~~~/\/\\~~~~~~\____________/~~~~~~~~ spitzak at d2.com
More information about the cairo
mailing list