From: Brian P. <bri...@tu...> - 2006-08-31 19:00:57
|
Paul Melis wrote: > Hi Brian, > > Brian Paul wrote: > >> Paul Melis wrote: >> >>> Hello, >>> I'm wondering if the following is possible with Chromium (I've >>> already got a bit of success, but no glory yet): >>> >>> I have an application, a molecular visualisation package, that I'd >>> like to run on a 3-screen cylindrical projection setup. I've got a >>> chromium configuration to work that does the non-planar tiling. But >>> since the application was meant as a normal desktop application, the >>> opengl window not only shows molecular structures and stuff in 3D, >>> but also contains GUI elements (buttons, text, a command input line, >>> etc) drawn in opengl. I don't think these elements, that are probably >>> rendered in ortho2d mode, can be made to display correctly on the >>> cylindrical screen, nor is it that important. I'd like to "cut out" >>> that part of the viewport where the molecules are visible and only >>> distribute the geometry visible in that part. Is there a way to set >>> up chromium to get this done? >> >> >> >> You might try writing a new SPU that examined the matrix operations >> (glOrtho, glFrustum(), etc) to determine whether the 2D or 3D stuff >> was being drawn, then no-op rendering commands as needed. > > > I indeed took this route after your suggestion, writing a "filter3d" SPU > and it seems to work fine in identifying the right parts to keep and > what to throw away. But I'm having trouble with one aspect of this > approach. > > As the GUI elements drawn provide functions that are still usable and > some even unavailable in the separate GUI app made in Tcl/Tk the > application is using, I'd like to keep the GUI elements on the master > node where the app is controlled. In effect letting the opengl stream > pass through unmodified. > > So my basic idea is: > 1. run the visualisation app on a master node, where it runs as usual in > the eyes of a user. the user can interact using mouse/keyboard and also > use the GUI elements drawn in opengl. > 2. run 3 render nodes that each display a part of the 3D geometry, but > not any of the GUI elements > > Chromium is working behind the scenes on the master node intercepting > the opengl stream and distributing it to the 3 nodes using the tilesort > SPU. The problem is where to put my filter3d SPU. > If I try to attach it on the slave side, once for each of the 3 nodes, > it doesn't seem to have an effect. Could it be that opengl commands such > as Viewport and MatrixMode are influenced by the tile-sorting? Perhaps > an Ortho call is left out (as that is what the filter3d SPU basically > looks for)? Yes, that may be the case. The tilesort SPU and crservers do manipulate the viewport and projection. > If I put filter3d before the tilesort SPU then the distributed scene is > correct, none of the GUI elements are left in and I only get the "pure > 3D" geometry. > But then I don't have a non-filtered display on the master node anymore :-/ > > It feels like I need to split the opengl stream somewhere and send a > filtered one to the render nodes and an unfiltered one to the master. Is > this possible in an efficient way? Other people have tried this, with mixed results, by adding another tilesort SPU to the mix which uses two identical tiles. > In the docs it is mentioned that Chromium uses a graph-structure in > defining the connections between nodes, but I assume that with SPUs you > can only create a chain and not a split? The only way to split today is with the tilesort SPU. -Brian |