All Pages
Screens and graphics cards

If you have multiple MultiTactions and multiple graphics card, the configuration gets somewhat complicated. To master this, think of the problem as consisting of two logical phases, i.e, first you need to define a window and then one or more areas inside that window. To understand the reason for areas, look at the example figure below with two graphics cards G1, G2 and three MultiTactions in portrait layout. The G1 has two outputs that are connected to the two leftmost MultiTactions. Even if the MultiTactions are next to each other with no air gap between them, there is a gap corresponding to about 60 pixels between them due to the physical bezel of the MultiTactions. The G1 doesn't know about this and if we simply draw a line across the MultiTactions, the line is offset producing unnatural look. Areas are used to define another set of coordinates to overcome the offset problem for Cornerstone based applications. Points D(1080,0) and E(0,0) denote locations as seen by the two graphics cards, which don't know about the gaps.

MultipleDisplays.svg
Fig.2. Multiple displays. All measures

outside the MultiTactions are in application coordinates."

Usually you want application windows to span the whole visible surface in MultiTactions, but for illustration purposes let's define windows as shown on the right hand figure above. The highlighted region spanning three MultiTactions is what an application programmer sees, i.e., a drawable region with origin at F'(0,0) and width and height being 3144 and 1387 pixels, respectively. The programmer does not have to worry about the non visible regions between the MultiTactions, graphics drawn there simply appear to be hidden under the bezels.

An efficient way to use graphics resources is to define one window per one physical graphics card. In the example G1 produces the window 1 spanning two MultiTactions and the window 2 is produced by G2. The configuration proceeds as follows

  1. Define the location and size of window 1.
  • Location is F(108,213), width and height are 2112 and 1387, respectively.
  1. Define the areas inside window 1.
  • Area in the leftmost screen has location G(0,0), width and height are 972 and 1387, respectively. The application origin is contained in this area at F'(0,0).
  • Area in the middle screen has location I(972,0), width and height are 1080 and 1387, respectively. Note that from G1's point of view, the areas are next to each other with no gap between them. The 60 pixel gap is taken into account when defining the application coordinates at H'(1032,0).
  1. Define the location and size of window 2.
  • Width and height are 972 and 1387, respectively, but the J location depends on the operating system. On Linux, there's a concept of screen and windows are located relative to it. Assuming the screen 0 spans the first two MultiTactions and the screen 1 covers the rightmost MultiTaction, the J has location J(0,213), i.e., it's relative to the screen 1 origin.
  1. Define the area inside window 2.
  • Location is K(0,0), width and height are 972 and 1387, respectively. Again the 60 pixel gap between the two rightmost screens is taken into account when defining the application coordinates at J'(2172,0).

Here is the same in XML (windows only). In the example it was also assumed that the application drawing area "pixels" matched the physical pixels, i.e., not scaling or distortion in the application coordinates.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<multihead>
<window>
<area>
<graphicslocation>0 0</graphicslocation> /* Point F' relative to application drawing coordinates */
<graphicssize>972 1387</graphicssize>
<location>0 0</location> /* Point G relative to window 1 lower left corner */
<size>972 1387</size>
</area>
<area2>
<graphicslocation>1032 0</graphicslocation> /* Point H' relative to application drawing coordinates */
<graphicssize>1080 1387</graphicssize>
<location>972 0</location> /* Point I relative to window 1 lower left corner */
<size>1080 1387</size>
</area2>
<location>108 213</location> /* Point F relative to operating system coordinates*/
<size>2112 1387</size>
</window>
<window2>
<area>
<graphicslocation>2172 0</graphicslocation> /* Point J' relative to application drawing coordinates */
<graphicssize>972 1387</graphicssize>
<location>0 1386</location> /* Point K relative to window 2 lower left corner */
<size>972 1387</size>
</area>
<location>2160 213</location> /* Point J relative to operating system coordinates */
<size>972 1387</size>
</window2>
</multihead>