Revision: 72264 http://sourceforge.net/p/brlcad/code/72264 Author: starseeker Date: 2019-01-25 14:14:35 +0000 (Fri, 25 Jan 2019) Log Message: ----------- Fixed multiple issues interfering with generating raytraced images using long object lists in MGED and other tools calling libged's rt command.
The problem manifests when MGED or another tool working through libged's API wants to generate a raytrace image of a scene with a large number of objects. libged's approach to performing this without blocking is to launch an rt command as a subprocess, which means it is necessary to communicate to that subprocess all the details of the view and scene to be raytraced. However, if the scene description is too large it can result in an rt command invocation that exceeds the length allowed by operating systems for command invocation (observed in practice on Windows.) The rt command already supports a command-driven execution mode that was being used for view communication, and expanding the supported command set to allow for scene object specification by piped command avoids the need for crazy long command argument lists. libged was adjusted to used this method for all platforms. This new approach exposed a different limitation of the MGED/rt interaction model, in that rt will not process standard input commands until it has finished its fb_open call. This is not a problem if rt is creating it's own framebuffer, but when it is rendering to an existing MGED framebuffer fb_open doesn't complete until after the libged command execution is done and MGED's callbacks can finalize the fb_open. This causes a hanging condition for long objects lists - libged fills up the stdin pipe and waits for rt to clear it before continuing, but rt doesn't clear it because it is waiting for MGED to finalize the fb_open before it starts processing. Of course, the fb_open finalization won't occur until the libged command completes. The fix for this was to postpone the fb_open call in rt until just before an actual render needs to take place, to allow rt to do most of the stdin processing up front. These issues are things to watch out for in other cases where libged uses subprocess invocation, since such communication is a standard feature of that execution model... Modified Paths: -------------- brlcad/trunk/NEWS Modified: brlcad/trunk/NEWS =================================================================== --- brlcad/trunk/NEWS 2019-01-25 13:48:42 UTC (rev 72263) +++ brlcad/trunk/NEWS 2019-01-25 14:14:35 UTC (rev 72264) @@ -14,6 +14,7 @@ --- 201X-XX-XX Release 7.30.0 --- ---------------------------------------------------------------------- +* fixed rt support for specifying large object lists - Cliff Yapp * new 'gex' tool for low-level .g file exploration - Tom Browder * added support for command-line editing of metaballs - Sean Morrison * added manual page for the 'get' command - Cliff Yapp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits