From: Tamara M. <tam...@co...> - 2001-12-04 20:24:04
|
Lloyd Wood writes: > One of the tricks that SaVi uses to get a speedup is to group all > drawing updates sent to Geomview within a > (progn\n > blah blah blah > )\n > > so that Geomview doesn't do anything until the program ends, then > applies all the updates to the camera at once. (I presume that you > can nest progn's, and that this wasn't just a fortuitous hack...) Yup, that's correct - you can indeed nest progn's, and it's definitely a good thing to batch up all geometry changes before redrawing. That's definitely the first thing to try. If batching with progns doesn't increase your framerate to the desired level, you could try using binary instead of ASCII communications with Geomview. Although ASCII is much nicer for humans to read for debugging and such, if you're sending over a *lot* of geometry data on every frame you will see a significant speedup from using binary. See http://geomview.sourceforge.net/docs/html/geomview_33.html#SEC36. If you do this you should be aware of the bugs/issues about endianness that were discussed in April and November, see the list archives at http://www.geocrawler.com/archives/3/5646/2001/11/0/ http://www.geocrawler.com/archives/3/5646/2001/4/0/ Finally, another thing that can be useful is to make sure that the external module isn't sending information to Geomview faster than Geomview can render it. It's only really an issue if you need to have bidirectional communication between Geomview and the module - in that case it's irritating to give a command, and then not see its results for many seconds because Geomview is so far behind in processing the commands from the module. So if that's the case for you, then you'll want to wait to send the next frame of information until you get an acknowledgement back from Geomview that it's processed the data from the previous frame. You do this by having a loop like this: - send command to geomview to take one animation step, or draw one frame - send "(echo ok\\n)" - wait for "ok" to come back (the module sees it arrive on standard input) - send another command, etc. or, for a more-efficient variant, you could send the "echo" *before* the command(s) that do the work, so that you'd feel free to send another command as soon as work has *begun* on the previous one. Hope this helps, Tamara --- Tamara Munzner, Compaq Systems Research Center tam...@co..., 650-853-2253 http://graphics.stanford.edu/~munzner |