Compaq 4DT3D Version 5.03 PowerStorm 4D40T/4D50T/4D60T/4D51T UINX Graphics Support for Tru64 UNIX V5.0/V5.0A/V5.1 Compaq Computer Corporation Marlboro, Massachusetts Release Notes December 2000 Possession, use, or copying of the software described in this publication is authorized only pursuant to a valid written license from Compaq or an authorized sublicensor. Compaq Computer Corporation makes no representations that the use of its products in the manner described in this publication will not infringe on existing or future patent rights, nor do the descriptions contained in this publication imply the granting of licenses to make, use, or sell equipment or software in accordance with this description. Copyright @ Compaq Computer Corporation 2000 All rights reserved. AlphaServer, AlphaStation, DEC, DEC PHIGS, DEC Open3D, DECwindows, Digital, Compaq Open3D, DIGITAL PHIGS, OpenVMS, TURBOchannel and the Digital logo are trademarks of Compaq Computer Corporation. Compaq, the Compaq logo, the Digital logo, and PowerStorm are registered in the United States Patent and Trademark Office. The following are third-party trademarks: Motif is a registered trademark of The Open Group in the United States and other countries OpenGL is a registered trademark of Silicon Graphics, Inc. PostScript and Display PostScript are registered trademarks of Adobe Systems, Incorporated. UNIX is a registered trademark in the United States and other countries licensed exclusively through X/Open Company Ltd. X Window System is a trademark of the Massachusetts Institute of Technology. Preface This document contains the release notes for Compaq PowerStorm 4D40T/4D50T/4D51T/4D60T UNIX Graphics Support for Tru64 UNIX V5.0/V5.0A/V5.1. Release notes are supplied in ASCII format and is located in the following location: * /usr/lib/4DT503/4dt3d503.release_notes CHAPTER 1 PRODUCT INSTALLATION OVERVIEW The following devices are supported: * PCI-based based PowerStorm 4D40T, 4D50T, 4D51T & 4D60T This release contains software for the following specific graphics options: * PowerStorm 4D40T, PowerStorm 4D50T, PowerStorm 4D51T, PowerStorm 4D60T This release contains optional support for the following: * OpenGL. * Overlay Support via Extended Visuals 1.1 Required License Compaq software requires a Compaq Open3D Product Authorization Key (PAK) for 3D server operation. This PAK should come in hardcopy with this software, and should be registered before you install this software. If you do not register the PAK before starting the software, the server will run in 2D mode only (no OpenGL server support). 1.2 Prerequisite Software You can install this software only on systems that are running Tru64 UNIX Version 5.0, 5.0A or 5.1. Before installing 4DT3D, you must remove all previous versions from the system. After you have installed this version, if you upgrade or reinstall the operating system version, you must first deinstall this software. Once the operating system change has been made, then reinstall this graphics software. In order to use the PowerStorm 4D51T, the workstation or server must have a firmware level of the SRM Console of at least 6.7-250. If newer firmware is necessary, it may be obtained from the following WWW site: ftp://ftp.digital.com/pub/DEC/Alpha/firmware/index.html 1.3 Problem Reporting Problems should be reported using the standard Integrated Problem Management Tool (IPMT). 1.4 Installing 4DT on Compaq Tru64 UNIX Systems When installing 4DT, you should note the following: The Compaq 4DT3D Extensions Clause is required for all graphics options supported. In multihead configurations you must edit the configuration file and rebuild the kernel manually. Please refer to the installation guide for more details. 1.4.1 Organization of the 4DT503 Kit The 4DT503 kit has five subsets: 4DTZE3500 Provides basic 4DT device support. This subset is Mandatory. 4DTCONFIG500 Makes sure that your system is configured properly after installation. This subset is Mandatory. 4DTGLBASE500 Provides OpenGL support. This subset is Optional. 4DTGLEXAM500 Contains OpenGL examples. This subset is Optional. 4DTGLMAN500 Contains OpenGL Man pages. This subset is Optional. "Mandatory", means that if you install the 4DT503 kit, those subsets will be installed unconditionally. The installation procedure will however allow you to choose among the Optional subsets. If you choose not to install the kit at all, no subsets will be installed. Note that the supported graphics options are enabled only after you install the kit. Optional subsets can not be installed without the Mandatory subsets, but if you install the 4DT kit without installing one or more of the Optional subsets, any of the omitted Optional subsets can be installed at a later time without re-installing the Manadatory subsets. You may have to edit some server configuration files before rebooting the system. See Section 1.4.2 for more information on editing the configuration files. 1.4.2 Modifications to /usr/var/X11/Xserver.conf The Xserver configuration file /usr/var/X11/Xserver.conf contains startup information for the server. The X server reads and acts on certain options and information in this file. 1.4.2.1 Compaq 4DT 3D Extensions Clause The GLBASE subset installation adds the Compaq 4DT3D extensions clause, which causes the Xserver to load these extensions. If you do not want the installation to load some of the extensions, remove the appropriate lines from /usr/var/X11/Xserver.conf file. The Compaq 4DT 3D extensions clause is as follows(note the nesting of < > pairs): ! Start 4DT 3D Extensions List extensions < < _dec_GLX lib_dec_GLX.so __GLX_LoadInit GLX > < directx libdirectx.so DirectXInit > < extMultibuf libextMultibuf.so MultibufferExtensionInit > < _dec_glXDECpeer lib_dec_glXDECpeer.so InitglXDECExtension DEC-PEER-GLX > > ! End 4DT 3D Extensions List If the extensions clause is not in the file Xserver.conf, the server will not load the 3D extensions. 1.5 Alternate Console Instead of using the graphics display as the system console, it is possible to attach an external ASCII terminal to serial port 1 and have console interactions take place on that device. This is done at the boot prompt (>>>). To use an external terminal, the commands are: >>> set console serial >>> init To return to the graphics display as console, the commands are: >>> set console graphics >>> init CHAPTER 2 NEW WITH THIS RELEASE Compaq 4DT3D Version 5.03 supports Compaq Tru64 UNIX 5.0, 5.0A and 5.1. This section describes new and changed functionality that is being released for the first time with Version 5.03. 2.1 New Hardware There is no new hardware supported with this release. 2.2 New Software No new software is included in this release. 2.3 Problems fixed in this release Build of glut examples in /usr/examples/GL/libglut, /usr/examples/GL/libglut/lib/glut/libglut.so and widget examples in /usr/examples/GL/widgets have been fixed. The following bugs have been fixed: * Missing Geometry using UniGraphics (UG) application. * Line antialiased geometry is wrong color in some cases using UG. * Hidden lines that are antialiased in HSR are visible in UG, and should be hidden * Tiff images at new positions not displayed until Refresh on UG. * Portion of XDrawLineSegments not drawn in some cases using UG V16. * DirectX extension shouldn't wipe out shared memory segments. * Vectored Xlib needs rebuild to fix core dumps. * Memory leaks. * 4DT50x kit should not install libX11.so for UNIX 5.1 . * Unresolved symbol "gluNurbsCallback". * X server hangs while running a series of UG V16 tests. * Enabling line antialiasing causes incorrect Z buffer manipulation in UG. 2.4 Internet Distribution and Installation The Compaq 4DT3D software will be made available via the Internet. Please use the following procedure to locate the kit. 1. Using a web browser, access URL http://www.support.compaq.com/open3d/ . Click on "Mature Products". 2. Pick 4DT3D for Compaq Tru64 UNIX 5.0/5.0A/5.1 Kit to ftp the kit. 3. Use tar to extract the files from 4DT503.tar into a directory: tar -xvf 4DT503.tar 4. Use setld to load the kit: setld -l 4DT503 In addition to the released software, this site also contains pointers to these release notes and to later, field-test versions of software. The site http://www.compaq.com/support/ also contains pointers to other software and software patches. CHAPTER 3 RELEASE INFORMATION FOR POWERSTORM 4D40T, 4D50T, 4D51T, 4D60T 3.1 Product Summary Compaq 4DT3D Version 5.03 supports Compaq Tru64 UNIX 5.0, 5.0A and 5.1. Compaq 4DT3D Version 5.03 contains the graphics support for the PowerStorm models 4D40T, 4D50T, 4D51T and 4D60T. The software has several components: * Device Dependent Code for the X server 2D graphics support. This piece of code is mainly used for connections over an external network. * OpenGL Direct Rendered graphics support libraries. These libraries are used by applications written to the OpenGL V1.1 standard. * Direct Rendered X11. These libraries replace the existing Xlib and increase the performance of X applications when run locally. NOTE There is no PEX support for any of the PowerStorm 4D40T, 4D50T, 4D51T, 4D60T boards. 3.2 Prerequisite Hardware The AlphaStations which support these devices are listed in the Software Product Description (SPD). To get the expected performance from these graphics options, an AlphaStation with a CPU clock-speed of 266 MHz or higher is recommended. 3.3 After the Installation Once the installation of the PowerStorm 4D40T, 4D50T, 4D51T and 4D60T software has been completed, the machine needs to be rebooted. This reboot will enable the graphics devices. 3.4 Known Restrictions This section of the document contains known restrictions with the current software. 3.4.1 General Restrictions These restrictions apply to all applications and graphics interfaces. 3.4.1.1 Applications That Link With Static Libraries Applications which link against the static libraries (.a files) provided in previous releases of Compaq Open3D or Compaq Tru64 UNIX, will not work correctly. Applications linking against static libraries should be re-linked to use the shareable object libraries. Future bugfixes and performance optimizations will be automatically available to these applications, without further re-linking. (If an application must be linked against a static library, it must be (re-)linked against a static library from this release.) 3.4.1.2 Multihead Support with the PowerStorm 4D40T, 4D50T, 4D51T and 4D60T The default behavior for two multi-head cards in an AlphaStation 600 is: The console output will go to the monitor attached to the bottom-most card. When the server starts up, screen 0 will be the top-most card. If it is preferable for the console output and screen 0 to be displayed on the same monitor, this can be achieved by disabling the VGA on the bottom-most card via a jumper in the upper left hand corner of the graphics card. Additional multihead support is defined through the matrix given in the Software Product Description (SPD). 3.4.2 OpenGL Restrictions This section describes restrictions in the OpenGL software in this release. 3.4.2.1 Applications Coded to Request Indirect Rendering Only The PowerStorm 4D40T, 4D50T, 4D51T and 4D60T graphics boards are specifically optimized to run Direct Rendered OpenGL applications. Some applications have been coded to request Indirect Rendered OpenGL rendering contexts. Those applications will not perform optimally on these graphics boards. By default OpenGL software for PowerStorm 4D40T, 4D50T, 4D51T and 4D60T returns a Direct Rendered OpenGL rendering context whenever the connection is "direct", i.e., when DISPLAY is :0 or direct:0. If necessary, this behavior can be overridden by defining this environment variable: setenv ALLOWINDIRECT 1 3.4.2.2 GLX Pixmap Support No GLXPixmap rendering is supported for contexts marked direct. 3.4.2.3 Texture Image Size Limitation There is a limitation on the Texture Image size in this release: the maximum of either height or width of texture images is 1024. 3.4.2.4 4D Vertex Handling Incorrect in Some Cases There are several cases of 4D vertices that are not handled correctly. 3.4.2.5 MIPMAP Rendering If the range of 1/W (inverse W) values for vertices is very large, then the texture mapping with mipmaps may exhibit some artifacts. 3.4.2.6 GLUT Restrictions The glutIdleFunc(func) call does NOT store the current context along with the function func. When func is called, therefore, the current context is unpredictable. func should always do a glutSetWindow() call before any other drawing operations. 3.4.2.7 Primitives Outside a glBegin/glEnd Block If vertex calls are placed in a display list and executed without first calling glBegin, the server may generate Graphic Engine errors. This can also cause the server to hang, requiring a reinitialization and reboot of the system. This should only happen when there are programming errors, since all drawing is required to be between glBegin and glEnd calls. 3.4.2.8 Antialiasing in Color Index Mode The antialiasing modes (GL_POINT_SMOOTH, GL_LINE_SMOOTH, and GL_POLYGON_SMOOTH) and color index mode do not work correctly together. Flat-shaded lines and polygons do not get drawn. Smooth-shaded objects do get drawn, but they do not use the correct color indices. 3.4.3 Performance and System Characteristics The PowerStorm 4D40T, 4D50T, 4D51T and 4D60T subsystem is significantly different from other graphics devices provided by Compaq. It differs in the following ways: * Direct Rendering OpenGL. All previous products. Some applications have been written assuming indirect rendering only. These programs will run on the PowerStorm 4D40T, 4D50T, 4D51T and 4D60T boards, although they will not perform optimally. * Client Side Display Lists. When OpenGL display lists use direct rendering, these lists are stored in the same address space as the application code and data. When compared to other graphics hardware, the user address space requirements will be higher. However, the overall memory requirements (i.e., the virtual space for the client and the server) should be the same or smaller. The implication is that a larger user virtual address space may be required. * Direct Rendered X11 2D. Much of the 2D graphics is also direct rendered by default. This gives much better performance when the number of objects provided to xlib routines are small. Some applications have been written to assume a client/server model. These should run without change. To get the error detection that the protocol provides, change the DISPLAY environment variable to be 'unix:0' and the application will run without the benefit of direct rendering. 3.4.3.1 Texture Mapping and Performance Many applications use multiple texture maps. It is suggested that applications that require multiple textures be written (or rewritten) to use the OpenGL 1.1 texture object functionality or the Texture Object Extension. 3.4.3.2 OpenGL Pixmap Performance The OpenGL specification precludes direct rendering to pixmaps. This limits the performance of drawing to GLXPixmaps. To use GLXPixmaps when running on a local (:0 or direct:0) display, create an indirect rendering context and set the following environment variable: setenv ALLOWINDIRECT 1 It is recommended that any application that extensively uses GLXPixmap drawing be recoded to use drawing to the back buffer. The performance will be significantly better on this and most other OpenGL-based graphics options. 3.4.3.3 RGB Format Some graphics options from Digital used a non-standard format for 24-plane TrueColor pixel formats call "BGR". In this format, the least significant 8 bits of the pixel correspond to the blue component, while the most significant 8 bits correspond to the red component. The PowerStorm 4D40T, 4D50T, 4D51T and 4D60T graphics option uses the opposite format called "RGB" which allows better performance with OpenGL-based applications. On the PowerStorm 4D60T option, there are two 32-plane RGBA visuals (single and double-buffered) for OpenGL where the most significant 8 bits correspond to the OpenGL "alpha" buffer. In the double-buffered RGBA visual, the color components are double-buffered while the alpha component is single-buffered. Care must be taken to supply the color components of images in the correct order. In particular, the color components of images obtained from other graphics devices may need to be re-ordered. (Applications written to TrueColor that did not specifically look at the visual information to determine the location of the color values may look like red and blue are swapped, i.e., objects that were blue will be red on these graphics options.) NOTE On all PowerStorm 4D40T, 4D50T, 4D51T and 4D60T options running under UNIX, there is also an 8-plane TrueColor visual *not* supported by OpenGL. This visual is in "BGR" format where the least-significant 2 bits are the blue component, the next 3 bits are the green component, and the most significant 3 bits are the red component. 3.4.3.4 Usage of Shared Memory by the PowerStorm 4D40T, 4D50T, 4D51T and 4D60T In order to improve performance, the PowerStorm 4D40T, 4D50T, 4D51T and 4D60T systems make extensive use of shared memory to send information to the server. Shared memory is used for the following types of data: * X connections when using the DISPLAY :0 * OpenGL rendering contexts * Texture map data However, the system imposes a limit on the number of shared memory segments that a process can access concurrently and the total amount of shared memory the system allows. At times, an X client may run up against this limit. If this occurs, client applications will display the following warning: "dxlib warning: server shmget failed" or other errors from applications indicating that they are out of memory when using some of the above types of data. 3.4.4 PowerStorm 4D40T, 4D50T, 4D51T, 4D60T Supported Video Modes The following table lists the supported video modes for the PowerStorm 4D40T, 4D50T, 4D51T, and 4D60T. Supported Video Modes (*=default) --------------------------------------------------------------- Resolution 4D60T 4D40/50/51T (Hor x Ver) Refresh Rates Refresh Rates ----------- --------------- ------------------- 1920x1200 60..65 not available 1920x1080 60..75; 60* not available 1600x1280 60..75; 70* not available 1600x1200 60..80; 75* not available 1280x1024 60..85, 66, 72; 75* 60..85, 66, 72; 75* (a) 1152x900 60..95; 76* 60..95; 76* (a) 1024x768 60..115; 75* 60..115; 75* 1024x864 60..140; 60* 60..140; 60* 800x600 60..140, 72; 75* 60..140, 72; 75* 720x400 70 70 640x480 60..150, 72; 75* 60..150, 72; 75* 512x512 60 60 (a) Supported, but backing store may not be available at this resolution. (See note at end of this section.) Each supported graphics mode can be selected by starting the Xserver with the appropriate command-line arguments. These command line arguments are as follows: * -screen Selects the desired screen resolution. * -vsync Selects the desired screen refresh rate. * -I -e3bpp Selects the desired number of video planes. The -screen and -vsync options should be used in conjunction with each other. Using the -vsync option alone will not work. Using the -screen option alone will select the proper screen resolution, but may select an incompatible refresh rate. The -screen and -vsync options must select one of the supported modes from the above table. Using unsupported combinations of -screen and -vsync may produce undesirable results. The only possible values that can be used with the -e3bpp option are 102 and 128. Other values are invalid. Note the use of the -I argument in conjunction with the -e3bpp option. The -I argument indicates to the server that all following arguments are device-specific and should be ignored by the device-independent layer of the server. For this reason, device-dependent options, such as -e3bpp, should come last on the Xserver command line, and should be preceded by a -I argument. Only one -I argument is necessary, regardless of the number of device-dependent options. To change the command-line arguments that the Xserver uses, login as root and edit the file /usr/var/X11/Xserver.conf. Search for the following lines in this file, which indicate the command-line arguments: ! 4DXXT Server args start -pn -nice -2 -bs -su ! 4DXXT Server args end Append your changes to the arguments already listed, and then restart the server. You may prefer to log in remotely to do this. The default graphics mode for the 4D40T and 4D50T graphics options are 1280x1024 @ 75Hz, in 102-plane mode. This is equivalent to the following command-line options: ! 4DXXT Server args start -pn -nice -2 -bs -su -screen 1280x1024 -vsync 75 -I -e3bpp 102 ! 4DXXT Server args end The default graphics mode for the 4D60T graphics option is 1280 x 1024 @75Hz, in 128-plane mode. This is equivalent to the following command-line options: ! 4DXXT Server args start -pn -nice -2 -bs -su -screen 1280x1024 -vsync 75 -I -e3bpp 128 ! 4DXXT Server args end To run a PowerStorm 4D40T, 4D50T, 4D51T or 4D60T in 128-plane mode at 1024x768 @ 70Hz, use the following command-line options: ! 4DXXT Server args start -pn -nice -2 -bs -su -screen 1024x768 -vsync 70 -I -e3bpp 128 ! 4DXXT Server args end To restore the default graphics mode, simply remove all of the -screen, -vsync, and -e3bpp options from the command line in /usr/var/X11/Xserver.conf. If there are no other device-dependent options, remove the -I argument as well. NOTE In order to improve performance, the PowerStorm 4D40T, 4D50T, 4D51T, 4D60T family of graphics options uses offscreen video memory to provide backing store for certain types of clients. These clients include all OpenGL clients, and X clients that are rendering to the display :0. In some graphics modes, there may not be enough offscreen video memory to provide backing store. In cases where backing store is required, switching to a lower resolution or changing from 128-plane mode to 102-plane mode will reserve enough offscreen memory to provide backing store. 3.4.5 Enabling Save Unders and Backing Store for 4D40T, 4D50T, 4D51T, 4D60T Devices The default condition of all graphics devices except the PowerStorm 4D40T/4D50T/4D51T/4D60T is to enable both backing store and save unders. For the PowerStorm 4D40T/4D50T/4D51T/4D60T devices, the default condition remains to disable backing store and save unders. In order to enable backing store and save unders, add these arguments to /var/X11/Xserver.conf: "-I +e3bs +e3su ". The line to edit is near the end of the file, where the arguments ("args") are added, and looks like this: ! you specify command line arguments here args < ! 4DXXT Server args start -pn -nice -2 -bs -su ! 4DXXT Server args end -pn > Add this string: "-I +e3bs +e3su" to the end of the last line. The resulting "args" lines look like this: ! you specify command line arguments here args < ! 4DXXT Server args start -pn -nice -2 -bs -su -I +e3bs +e3su ! 4DXXT Server args end -pn > After making this edit, shutdown the machine and re-boot. CHAPTER 4 CORE SERVER FUNCTIONALITY FOR GRAPHICS ACCELERATORS 4.6 Overlay Support 4.6.1 Technical Background The overlay window is a PseudoColor visual. Pixel 0 is always the transparent pixel. To get the visualID of the overlay visual, you need to get the SERVER_OVERLAY_VISUALS property from the root window. To retrieve the property and interpret the data associated with it, consider the following example: property_name: SERVER_OVERLAY_VISUALS property_type: SERVER_OVERLAY_VISUALS format: 32 The contents of the property is a LIST of the following data structure: SERVER_OVERLAY_VISUALS { overlay_visual: VISUALID transparent_type: {None, TransparentPixel, TransparentMask} value: CARD32 layer: CARD32 } For the devices with overlay planes, the server returns a list that contains one element. The element consists of four long-words, as described above. You would typically receive the following information: 0x00000027 /* VisualID */ 0x00000001 /* Indicates that the transparent_type is TransparentPixel */ 0x00000000 /* The transparent pixels value is 0 */ 0x00000001 /* The layer is 1 */ Once you have the VisualID, you can retrieve the rest of the information about the overlay visual and colormap by calling the routine XGetVisualInfo. Overlay windows and regular windows are in different layers, so drawing in an overlay window will not disturb the pixels of the regular window, and vice versa. If you draw an invisible pixel into an overlay window, the pixel of the nonoverlay window beneath that window will show through. 4.6.2 Motif Window Manager for Overlays Compaq Tru64 UNIX supplies a Motif window manager with an option to support overlays. This is located in /usr/bin/X11. However, this window manager option (mwm -Overlay) has numerous problems and is not recommended or supported. It is strongly suggested that you share colormaps with the window manager, as the hardware supports only one colormap for the overlay planes. This can be achieved by querying the server property name SERVER_OVERLAY_COLORMAPS. This property will return the 32-bit value that is the overlay colormap ID. If you create and install your own colormap, you will have overlay colormaps alternating on the screen, which will have the effect of changing the colors of the window managers borders and banners. 4.7 Multiple Colormaps Options with multiple colormaps support multiple, simultaneously-installed colormaps. Applications should not install or deinstall colormaps themselves. The window manager should perform these actions. However, the application is responsible for providing the window manager with hints as to which colormaps to install or deinstall. You provide this information using the Xlib function XSetWMColormapWindows(). This function sets the WM_COLORMAP_ WINDOWS property for a given window. For information on how to use this function and how the window manager interprets the property, see The X Window System by Scheifler and Gettys, 3rd Edition (Section 14.1.11, Setting and Reading the WM_COLORMAP_WINDOWS Property, pages 425-426, and Section 4.1.8, Colormaps, page 649-651). Applications written and debugged on systems with only one colormap may appear incorrect on a system with multiple colormaps. There are several application errors that can cause this, but the most prevalent is not having the correct colormap associated with all the windows that require it. To correct this problem, use XChangeWindowAttributes to set the colormap for all windows in the application that require the colormap. CHAPTER 5 KNOWN RESTRICTIONS AND PROBLEMS This section describes the known restrictions with the 5.03 versions of Compaq 4DT3D. 5.2 X Restrictions This section describes restrictions related to the X Window System. 5.2.1 Backing Store Support Backing store requires significant amounts of off-screen memory. If a small piece of a window is occluded, the off-screen memory requirements for the window depend on the size of the window, not on the occluded fragment. (This is the design of backing store as supplied by the X Consortium.) This memory requirement can cause problems. When this memory is used up, the performance is degraded. For example, if you see unacceptable pauses in the windowing system when pulling down menus or changing window focus, these are probably caused by backing store. Therefore, Compaq recommends that you use backing store sparingly, and try to have only one window on the screen that requests backing store. This allows extra room in off-screen memory for pixmaps. If you continue to have problems that you suspect are caused by backing store, you can disable this option and try the operation again. To turn off backing store and save unders, add the options "-bs -su" to the command line arguments in the /usr/var/X11/Xserver.conf file: ! you specify command line arguments here args < ! 4DXXT Server args start -pn -nice -2 -bs -su ! 4DXXT Server args end -pn > NOTE You should save the original /usr/var/X11/Xserver.conf file before editing it. If an args command does not exist in the file /usr/var/X11/Xserver.conf, add one at the end of the file: ! you specify command line arguments here args < -pn -nice -2 -bs -su > To have your edits taken into account, you must stop and restart the server. To stop the server, enter the command: # /sbin/init.d/xlogin stop The server will exit. Then, log in to the system as root and enter the following command to restart the server: # /sbin/init.d/xlogin start 5.2.2 Save Under Support Save unders are disabled by default. The X Consortium implementation of save unders turns on backing store for occluded windows, however, which potentially uses large amounts of off-screen memory and causes performance to degrade. For example, when save unders are enabled, you may see pauses in menu and windowing operations as backing store is enabled and disabled on windows that are under menus. 5.2.3 Multihead Support * The specification for multihead support for graphics options is now contained in the Software Product Description (SPD) for Open3D. 5.4 OpenGL Restrictions This section describes restrictions on using OpenGL software. 5.4.1 Non-Compaq Example Imakefiles Compaq has included in this release a modified version of the OpenGL example code available via anonymous ftp from SGI. Although the source code from SGI should compile and run unaltered on a Compaq system, it may not. Compaq has corrected problems with 64-bit integers and pointers that are not apparent on a 32-bit SGI system. In addition, the Imakefiles from SGI are not portable. If you want to build the example code, we strongly recommend that you use the sources provided by Compaq in /usr/examples/GL. Because the Imakefiles and Makefiles provided by SGI will not work correctly on a Compaq Tru 64 UNIX system, you must at least use the Compaq-supplied Imakefiles to produce a Makefile. To make a Makefile from an Imakefile, use the xmkmf command in the directory containing the Imakefile. 5.4.2 Antialiased Operations The following restrictions apply to antialiased operations: * Antialiased polygons for OpenGL are not supported. The primitives are rendered, but not antialiased. * OpenGL antialiased lines may not be rendered completely within the OpenGL specifications. 5.7 Problem with Diskless Management System (DMS) Support The 4DT3D software installs files in directories that are considered "write only" by the Diskless Management System (DMS) standards. Operation of 4DT3D devices in a DMS environment may not be correct. This is under review for a change in a future release. 5.12 Slow Dragging of Opaque Windows There have been reports that dragging opaque windows on PowerStorm 4D40T/4D50T/4D51T/4D60T systems is slow. This can only be improved by changing window to drag in Outline Mode. 5.13 OpenGL Sample and Example Programs May Not Build Correctly The previous Open3D release contained several kitting errors which prevented correct compilation of the OpenGL sample and example programs. While most of these have been fixed, a few remain in this kit and are noted here. 5.13.1 Missing Source Files and Directories The glut examples in /usr/examples/GL/libglut is missing the progs/sgi-stereo example files. They are omitted because they use a stereo method that is not supported by 4DT. When you build the libglut examples, it will fail when it tries to build progs/sgi-stereo. Since it is the last item to be built, all other glut examples and libglut.so should have been built. They have not been fully tested however, so Compaq recommends that you use the existing library /usr/shlib/libglut.so rather than the one you built in /usr/examples/GL/libglut/lib/glut/libglut.so . These glut examples and library are old, newer versions of glut can be downloaded from http://reality.sgi.com/opengl/glut3/. These newer versions sometimes do not compile right away on Tru64 UNIX. There is no glx_samples directory. 5.13.2 Incomplete Makefiles The make Makefiles will not build all programs automatically. The ones that do not build automatically can be built by moving to the correct subdirectory and manually invoking the Imake script. 5.16 Console Display on Multihead Systems In general, the console display output in multihead systems will appear on the monitor attached to the graphics card installed in the lowest-numbered slot in the workstation. (Refer to the manuals that came with the workstation to determine the slot-numbering order.) CHAPTER 6 Application Notes for OpenGL Stereo Rendering for PowerStorm 4D40T, 4D50T, 4D51T and 4D60T This section is intended to give a brief overview of the stereo implementation that is available for the PowerStorm 4DT family of graphics adapters. OpenGL stereo as described in this document is currently only supported on Compaq Tru64 UNIX. This document does not discuss algorithms for generating stereo views from a 3D scene, and it does not discuss how to write a stereo application using OpenGL. (Although an example of a simple stereo application is given at the end of this document). The OpenGL stereo implementation for the PowerStorm 4D40, 4D50, 4D51, 4D60T family was intended to be as transparent as possible, and thus take advantage of pre-existing (and well-documented) API's. This version of this document describes the stereo capabilities of the PowerStorm 4DT series of graphics adapters, as implemented in Compaq Open3D Version 4.96. Customers using beta or field test versions of software that include stereo support for this series of graphics adapters are encouraged to upgrade, as this release contains numerous bug fixes and improvements. 6.1 Stereo Support Stereo support for the Powerstorm 4D40T, 4D50T, 4D51T, 4D60T family of graphics adapters conforms to the model defined by the OpenGL standard. An application can render a stereoscopic scene by simply drawing to the appropriate left or right buffers. The hardware mechanics of rendering in stereo mode are completely transparent to the applications developer. The form of stereo rendering that has been implemented is commonly referred to as 'stereo-in-a-window'. A stereo scene can be rendered into a normal window on the screen. Pixels that are displayed in a stereo window will have a normal aspect ratio. Other monoscopic applications can displayed on the same screen, and will appear normal. Multiple stereo windows and monoscopic windows can be displayed simultaneously, can overlap and can be managed by a standard window manager. 6.2 Enabling Stereo from an Application To enable stereo rendering, two things must be done. The graphics adapter must be using a screen resolution that supports stereo, and an application must select a visual or pixel format that supports stereo. To determine if your current configuration will support stereo, use a program such as xglinfo to list all of the visuals that GL supports. If you see visuals that have the 'STEREO' attribute, then stereo will be available to applications that request it. If you only see visuals with the 'MONO' attribute, then either your software is not correctly installed or you have selected a screen resolution that does not support stereo. See the section titled Supported Screen Resolutions and Refresh Rates to make sure that you have selected a resolution that supports stereo. From a user program, you can determine if the system is stereo capable by calling glXGetConfig() with the requested attribute set to GLX_STEREO. For an OpenGL implementation layered on the X Window System, simply use glXChooseVisual() to select an appropriate stereo visual. Use glXCreateContext() to create a new GLX rendering context using the visual that was selected. When the application calls glXMakeCurrent() with this context, the screen will be switched into stereo mode, and rendering can proceed as normal. The same effect can be achieved using a GL toolkit that supports stereo. For example, when using the OpenGL Utility Toolkit (GLUT), simply OR in the GLUT_STEREO bit to the mode argument when calling glutInitDisplayMode(). Selecting the left or right stereo buffer is accomplished through the standard call to glDrawBuffer(). When the context or window used for stereo rendering is destroyed, the screen is switched back out of stereo mode. If multiple contexts are being used for stereo rendering, the screen is not switched out of stereo mode until the last of these contexts is destroyed. 6.3 Supported Hardware This stereo implementation requires a PowerStorm 4D40T, 4D50T, 4D51T or 4D60T graphics adapter and compatible MultiSync monitor. StereoGraphics and NuVision stereo hardware are both supported by this implementation. Note that the stereo connector on the back of the PowerStorm 4DT cards is different from the stereo connector on the back of other Digital graphics adapters. Contact the manufacturer of your stereo hardware to obtain the proper cables to connect your stereo hardware to your PowerStorm 4D40T, 4D50T, 4D51T, 4D60T card. The cable should match the mini-DIN connector on the back of the PowerStorm card. 6.4 Supported Screen Resolutions and Refresh Rates In order to support normal aspect ratio pixels in stereo mode, the frame buffer is divided into two full height left and right buffers. Because of the increased memory requirements associated with maintaining separate left and right buffers, the maximum screen resolution for each graphics adapter will be slightly smaller than in non-stereo mode. Maximum Stereo Resolutions PowerStorm Model Planes Per Max Pixel Resolution -------------------------------------------- 4D60T 102 1280x1024 128 1152x900 4D50T/4D40T/4D51T 102 800x600 128 800x600 To select a particular screen resolution and vertical refresh rate, use the '-screen' and '-vsync' command line options in the X server configuration file. To select an additional vertical refresh rate to be used when the screen is in stereo mode, use the '-I -e3stereo ' command line arguments in the Xserver configuration file. Replace by one of the vertical refresh rates in the table below. Note that the maximum refresh rates indicated may not be supported by all hardware, nor by all monitors. If you omit the '-I -e3stereo ' arguments in the Xserver configuration file, the server will continue to use the same refresh rate that it was using when the screen was in monoscopic mode. This will be the value that was specified with the '-vsync' parameter, or the default refresh rate for this resolution. The first time that the screen is switched into stereo mode, the Xserver will print out the refresh rate that is being used for stereo. If no '-vsync' or '-e3stereo' arguments were given, the Xserver will note that stereo mode is using the default refresh rate. This information can be found in the Xserver error log (/var/dt/Xerrors or /var/X11/xdm/xdm-errors). See your system administrator or refer to your documentation and release notes for more information on configuring the Xserver via the configuration file. The following table lists all of the resolutions and corresponding vertical refresh rates supported by PowerStorm 4D40T, 4D50T, 4D51T, 4D60T graphics adapters. Note that not all of these resolutions are supported in all configurations. (For example, only the 4D60T is capable of the highest resolutions, and the very highest require a 4D60T operating in 102 bpp mode). To determine the maximum possible stereo resolution for a given configuration, consult the previous table. There are no real restrictions on the refresh frequency that is used at a given resolution. You may pick any of the available frequencies for the resolution you have chosen, within the limits of your display hardware. Note also that these refresh rates are per frame, so in stereo mode, divide by two to get the effective refresh rate per eye. In the comment column, The asterisk ('*') indicates the default refresh rate for a particular resolution. This is the value that you should get if you select this resolution and do not use the '-vsync' option. A frequency range of "xx..yy" indicates that the entire range is supported, in 5 Hz intervals. Supported Video Modes ------------------------------------------------------------ Resolution 4D60T 4D40T, 4D50T, 4D51T (Hor x Ver) Refresh Rates Refresh Rates ----------- --------------- ------------- 1920x1200 60..65 not available 1920x1080 60..75; 60* not available 1600x1280 60..75; 70* not available 1600x1200 60..80; 75* not available 1280x1024 60..85, 66, 72; 75* 60..85, 66, 72; 75* 1152x900 60..95; 76* 60..95; 76* 1024x768 60..115; 75* 60..115; 75* 1024x864 60..140; 60* 60..140; 60* 800x600 60..140, 72; 75* 60..140, 72; 75* 720x400 70 70 640x480 60..150, 72; 75* 60..150, 72; 75* 512x512 60 60 6.5 Supported Visuals [NOTE: the following information applies only to OpenGL implementations layered on the X Window System.] GL stereo is currently supported on single and double buffered TrueColor-24 and PseudoColor-8 visuals. Future support will include DirectColor visuals. 6.6 Backing Store [NOTE: the following information applies only to OpenGL implementations layered on the X Window System.] Backing store is currently not supported when rendering in stereo mode. Windows that have their backing store attribute set will have backing store turned off while the screen is in stereo mode and will receive exposure events. When the screen returns to monoscopic mode, these windows will have backing store re-enabled. Backing store for any obscured regions will have been lost, but will be available for subsequent window operations. 6.7 Performance When the graphics adapter is in stereo mode, the rendering performance of monoscopic applications will be lower than normal. Because of this, it is recommended that when stereoscopic rendering is no longer required, the adapter be switched out of stereo mode. This reduction in performance is most apparent in applications that draw large, simple primitives. Large rectangle fills are the best example of this. Rendering complex three-dimensional scenes with many polygons or textured polygons should not suffer significant performance degradation. Switching between normal and stereo modes is fairly expensive, so switching back to normal mode is only required when it is unlikely that stereo rendering will be performed in the near future. An application that renders in both mono and stereo should remain in stereo mode for as long as stereo rendering is required. 6.8 Left and Right Construction Planes [NOTE: the following information applies only to OpenGL implementations layered on the X Window System.] As described above, in this stereo implementation, the frame buffer is divided into separate full-height left and right buffers. This means that when the screen is in stereo mode, the left and right buffers use separate portions of the frame buffer for the construction planes. (Depth buffer, alpha buffer, and stencil buffer). This does not cause problems in normal rendering, but it can cause unexpected results when an application reads and writes to these buffers. OpenGL implicitly assumes that there is only one of each of these construction buffers. In the case of an application that reads from these planes (via glReadPixels), data will always be fetched from the buffer associated with the left stereo buffer. When an application writes to these buffers (via glDrawPixels) the data is replicated and sent to both the left and right buffers. Note that having separate depth, stencil, and alpha buffers for the left and right stereo buffers will not cause problems for monoscopic applications that are running when the screen is in stereo mode. For these applications, the same information is rendered in both the left and right buffers, so both sets of construction planes will be identical. 6.9 Common Questions [NOTE: the following information applies only to OpenGL implementations layered on the X Window System.] Q: I tried to start a stereo application, but it couldn't find an appropriate visual. What gives? A: In later versions of the stereo software, if the Xserver is running at a resolution that does not support stereo, then no GL visuals that support stereo will be available. Again, check to make sure that you are using a resolution that supports stereo. (You can use the program 'xglinfo' to see what GL visuals are available). Q: When I am running an application in stereo mode, why don't certain things always get redrawn properly? A: If your application does not handle expose events, or relies on backing store to handle redraws of obscured areas, you may experience problems when running in stereo mode, since backing store is turned off. Q: I have an application that uses DECstereo. Will it work with a PowerStorm 4D40T, 4D50T, 4D51T, 4D60T card? A: No. DECstereo is not supported on these cards. Q: When I run 'xstereo -i', it says that the display is not stereo capable. A: (See the previous question). xstereo works with the older DECstereo, and is not supported on the PowerStorm 4D40T, 4D50T, 4D51T, 4D60T series cards. Q: I need to have my X-only application render in stereo. How do I do this? A: Right now, stereo is only supported for GL applications. 6.10 Application Example Demonstration of a simple stereo application in OpenGL and GLUT. This application puts a crude stereo image of a paper airplane on the screen, rotating about its center. This program uses perspective depth, which draws things in the distance smaller. The only correct way to do this in gl is with the "window" subroutine made to perform asymmetric projection by the use of parallel cameras. It is incorrect to angle the cameras inward so that their lines of gaze intersect at a point in space. For orthographic display (no perspective -- things in the distance drawn the same size as things up close) it is correct to angle the cameras inward. The gl "perspective" may be used in this case if one wishes. For proposed standards for stereoscopic display see "Stereo Image Display on Microcomputers" by Dennis J. Adams and Albert F. G. Xthona, available free from: StereoGraphics Corporation 2171 East Francisco Blvd. San Rafael, CA 94901 (415) 459-4500 The original version of the program before modification, was by Robert Akka published in The CrystalEyes Handbook, distributed by StereoGraphics. Richard Bradley at StereoGraphics states that the original program is in the public domain. Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted, provided that this permission notice appears on all copies of the software. The name of IBM Corporation may not be used in any advertising or publicity pertaining to the use of the software. IBM makes no warranty or representations about the suitability of the software for any purpose. It is provided "AS IS" without any express or implied warranty, including the implied warranties of merchantability, fitness for a particular purpose and non-infringement. IBM shall not be liable for any direct, indirect, special, or consequential damages resulting from the loss of use, data, or projects, whether in an action of contract or tort, arising out of or in connection with the use or performance of this software. Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted, provided that this permission notice appears on all copies of the software. The software is provided "AS IS" without any express or implied warranty, including the implied warranties of merchantability, fitness for a particular purpose and non-infringement. Digital Equipment Corporation (DEC) shall not be liable for any direct, indirect, special, or consequential damages resulting from the loss of use, data, or projects, whether in an action of contract or tort, arising out of or in connection with the use or performance of this software. Except as contained in this notice, the name of DEC shall not be used in advertising or otherwise to promote the sale, use or other dealings in this software without prior written authorization from DEC. /* * * plane.c (OpenGL version) * Draws rotating paper airplane in stereo. * * Converted to use OpenGL Utility Toolkit * Rick Hammerstone, Digital, December 1996. * * Converted to OpenGL by Silicon Graphics Corp. 4Dgifts program toogl. * Further modified by James S. Lipscomb and Keh-Shin Cheng, IBM Research, * March 1995. Uses Motif. * * Original program in GL by Robert Akka * StereoGraphics Corporation * April 2, 1991 * * Compile with: * cc -o plane plane.c -lglut -lGLU -lGL -lXmu -lXi -lXext -lX11 -lm * * Hit to stop program. */ #include #include #include #include /* * Speed of rotation in degrees per update. */ #define VELOCITY -0.2 float yAngle = 0; GLenum rgb, doubleBuffer; void Reshape(int width, int height) { glViewport(0, 0, width, height); } void Key(unsigned char key, int x, int y) { if (key == 27) exit(0); } void Init() { glMatrixMode(GL_PROJECTION); } void DrawAirplane() { static float airplane[9][3] = { { 0.0, 0.5, -4.5 }, { 3.0, 0.5, -4.5 }, { 3.0, 0.5, -3.5 }, { 0.0, 0.5, 0.5 }, { 0.0, 0.5, 3.25}, { 0.0, -0.5, 5.5 }, {-3.0, 0.5, -3.5 }, {-3.0, 0.5, -4.5 }, { 0.0, -0.5, -4.5 } }; glColor3f(1.00, 0.19, 0.69); /* violet: r=1, g=.19, b=.69 */ glBegin(GL_LINE_LOOP); glVertex3fv(airplane[6]); glVertex3fv(airplane[7]); glVertex3fv(airplane[1]); glVertex3fv(airplane[2]); glVertex3fv(airplane[4]); glEnd(); glBegin(GL_LINE_LOOP); glVertex3fv(airplane[0]); glVertex3fv(airplane[4]); glVertex3fv(airplane[5]); glVertex3fv(airplane[8]); glEnd(); glBegin(GL_LINE_LOOP); glVertex3fv(airplane[6]); glVertex3fv(airplane[3]); glVertex3fv(airplane[2]); glEnd(); } void Plane(float yAngle) { glRotatef(yAngle, 0, 1, 0); glRotatef(-10, 1, 0, 0); DrawAirplane(); } void StereoProjection(float left, float right, float bottom, float top, float near, float far, float zero_plane, float dist, float eye) { /* * Perform the perspective projection for one eye's subfield. The * projection is in the direction of the negative z axis. * * -6.0, 6.0, -4.8, 4.8, * * left, right, bottom, top = the coordinate range, in the plane of zero * parallax setting, which will be displayed on the screen. The ratio * between (right-left) and (top-bottom) should equal the aspect ratio * of the display. * * 6.0, -6.0, * * near, far = the z-coordinate values of the clipping planes. * * 0.0, * * zero_plane = the z-coordinate of the plane of zero parallax setting. * * 14.5, * * dist = the distance from the center of projection to the plane * of zero parallax. * * -0.31 * * eye = half the eye separation; positive for the right eye subfield, * negative for the left eye subfield. */ float xmid, ymid, clip_near, clip_far, topw, bottomw, leftw, rightw, dx, dy, n_over_d; dx = right - left; dy = top - bottom; xmid = (right + left) / 2.0; ymid = (top + bottom) / 2.0; clip_near = dist + zero_plane - near; clip_far = dist + zero_plane - far; n_over_d = clip_near / dist; topw = n_over_d * dy / 2.0; bottomw = -topw; rightw = n_over_d * ( dx / 2.0 - eye); leftw = n_over_d * (-dx / 2.0 - eye); /* Need to be in projection mode for this. */ glLoadIdentity(); glFrustum(leftw, rightw, bottomw, topw, clip_near, clip_far); glTranslatef(-xmid - eye, -ymid, -zero_plane - dist); } void DrawScene(void) { glDrawBuffer(doubleBuffer ? GL_BACK : GL_FRONT); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glDrawBuffer(doubleBuffer ? GL_BACK_LEFT : GL_FRONT_LEFT); glPushMatrix(); StereoProjection(-6.0, 6.0, -4.8, 4.8, 6.0, -6.0, 0.0, 14.5, -0.31); Plane(yAngle); glPopMatrix(); glDrawBuffer(doubleBuffer ? GL_BACK_RIGHT : GL_FRONT_RIGHT); glPushMatrix(); StereoProjection(-6.0, 6.0, -4.8, 4.8, 6.0, -6.0, 0.0, 14.5, 0.31); Plane(yAngle); glPopMatrix(); if (doubleBuffer) glutSwapBuffers(); else glFlush(); yAngle -= VELOCITY; if (yAngle < 0) yAngle = 360.0 + yAngle; /* degrees */ } GLenum Args(int argc, char **argv) { GLint i; rgb = GL_TRUE; doubleBuffer = GL_TRUE; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-ci") == 0) { rgb = GL_FALSE; } else if (strcmp(argv[i], "-rgb") == 0) { rgb = GL_TRUE; } else if (strcmp(argv[i], "-sb") == 0) { doubleBuffer = GL_FALSE; } else if (strcmp(argv[i], "-db") == 0) { doubleBuffer = GL_TRUE; } else { printf("%s (Bad option).\n", argv[i]); return GL_FALSE; } } return GL_TRUE; } int main(int argc, char **argv) { GLenum type; glutInit(&argc, argv); Args(argc, argv); type = GLUT_STEREO; type |= (rgb) ? GLUT_RGB : GLUT_INDEX; type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; glutInitDisplayMode(type); glutInitWindowSize(300, 300); glutCreateWindow("Airplane"); Init(); glutReshapeFunc(Reshape); glutKeyboardFunc(Key); glutIdleFunc(DrawScene); glutDisplayFunc(DrawScene); glutMainLoop(); return 0; }