schultz@NRL-AIC.ARPA (Alan Schultz) (05/26/88)
I am using CLX and have the following question.
I have a lot of graphics functions that get called often. In each function,
I create a graphics context as needed, and assign it to a temporary
variable. Example:
(defun some-simple-graphics-primitive (x y color)
(let ((gc (create-gcontext :drawable *window*
:foreground color)))
(draw-rectangle *window* gc x y *width* *height*))
)
This is oversimplified, but the basic creation of gc's is demonstrated.
I read in the Xlib manual that gc's are valuable resources, and I also see
that primitives exist in CLX for manipulating gc's that already exist.
QUESTION: Is the above expensive? Or since the gc is assigned to a
temporary variable, is it freed up after the function returns?
I have MANY such functions that get called OFTEN. Is it better to create
one gc at the top level, and then modify it as necessary, or is the above
ok?
Also, is one approach better for time efficiency?
Thanks,
Alan C. Schultz
Code 5510
Navy Center for Applied Research in Artificial Intelligence (NCAR A I)
Naval Research Laboratory
Washington, D.C. 20375-5000
ARPA: schultz@nrl-aic.arpa
(202) 767-2877
RWS@ZERMATT.LCS.MIT.EDU (Robert Scheifler) (05/26/88)
Date: Wed, 25 May 88 16:12:17 EDT
From: Alan Schultz <schultz@nrl-aic.arpa>
(defun some-simple-graphics-primitive (x y color)
(let ((gc (create-gcontext :drawable *window*
:foreground color)))
(draw-rectangle *window* gc x y *width* *height*))
)
QUESTION: Is the above expensive? Or since the gc is assigned to a
temporary variable, is it freed up after the function returns?
GC's are *not* freed just because the local variable binding goes away.
You are creating many resources in the server, and never freeing them.
This is very expensive, and eventually you will run out of resource ids
or memory.
I have MANY such functions that get called OFTEN. Is it better to create
one gc at the top level, and then modify it as necessary
Yes, much better. Take a look at the WITH-GCONTEXT macro, which
provides a dynamic binding mechanism (that C is sorely in need of).