[GRASS-dev] [GRASS GIS] #2033: Moving g.pnmcomp to lib/display to improve render performance of wxGUI

GRASS GIS trac at osgeo.org
Tue Jul 16 12:42:48 PDT 2013


#2033: Moving g.pnmcomp to lib/display to improve render performance of wxGUI
----------------------------------------------+-----------------------------
 Reporter:  huhabla                           |       Owner:  grass-dev@…              
     Type:  enhancement                       |      Status:  new                      
 Priority:  major                             |   Milestone:  7.0.0                    
Component:  wxGUI                             |     Version:  svn-trunk                
 Keywords:  display, Python, multiprocessing  |    Platform:  All                      
      Cpu:  All                               |  
----------------------------------------------+-----------------------------

Comment(by glynn):

 Replying to [ticket:2033 huhabla]:

 > My question would be if this is also possible with d.rast, d.vect and
 other display modules? Hence, moving the code from these modules into the
 display library and calling these functions from dedicated wxGUI sub-
 processes to speed up the rendering?

 Possible? Probably. Sane? No.

 Moving the guts of d.rast/d.vect/etc around won't make it run any faster.
 If the issue is with the communication of the raster data, there are
 faster methods than reading and writing PNM files.

 Both the PNG and cairo drivers support reading and writing 32-bpp BMP
 files where the raster data is correctly aligned for memory mapping.
 Setting GRASS_PNGFILE to a filename with a .bmp suffix selects this
 format, and setting GRASS_PNG_MAPPED=TRUE causes the drivers to mmap() the
 file rather than using read() and write().

 Once you have d.* commands generating BMP files, it shouldn't be necessary
 to add any binary blobs to wxGUI. Compositing should be perfectly viable
 within Python using either numpy, PIL or wxPython (having wxPython perform
 the compositing during rendering may be able to take advantage of video
 hardware).

 Additionally, on X11 (and provided that the cairo library supports it),
 the cairo driver supports rendering directly into an X pixmap which is
 retained in the server (typically in video memory) after the d.* program
 terminates. This has the added advantage that rendering will be performed
 using the video hardware.

 Setting GRASS_PNGFILE to a filename ending in ".xid" selects this option;
 the XID of the pixmap will be written to that file as a hexadecimal value.
 The g.cairocomp module can composite these pixmaps without the image data
 ever leaving video memory ("g.cairocomp -d ..." can be used to delete the
 pixmaps from the server).

 The only missing piece of the puzzle is a way to get wxPython to use an
 existing pixmap (ideally without pulling it into client memory then
 pushing it back out to the server). The cleanest approach would be via
 pycairo and wx.lib.wxcairo, which would also allow g.cairocomp to be
 eliminated, but that's yet another dependency.

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2033#comment:1>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list