How to improve performance of NX 3.5.0 with CAD applications that use OpenGL
In NX 3.5.0, OpenGL applications can use GLX extension, but only indirect
rendering is actually used. To be able to implement features like display migration and session resilience, NX needs to translate the GLX primitives in the corresponding graphic output, by using the MESA library. In this case, the application can't use the hardware directly.
The data sent over the network, through the NX link, is the data produced by the NX agent when handling the drawing operation produced by GLX Mesa. It is not
GLX traffic but X core protocol data.
Many studies have demonstrated that, for a remote display system, the GLX extension is hardly the best solution. See the following documents for an example of alternate approach:
http://www.nomachine.com/documentation/pdf/sdwe_ispa2003.pdf
http://www.nomachine.com/documentation/pdf/SME-02-GSHARV.pdf
For special applications, like engineering and CAD apps, the OpenGL hardware can be made directly available to the X applications by changing the NX configuration:
- In the NX client GUI, go to "Configure -> Desktop -> Unix -> Custom -> Settings"
Select "Floating Window" and set the "Disable X agent encoding" check box.
Note that, when doing so, session suspension and resume will be disabled, as well as some other NX advanced capabilities.
Apart from the use of the GLX extension, there are different ways X can leverage the OpenGL capabilities of the graphic card. For example an X server may let the OpenGL hardware render all the graphic output, not only the output of the GLX extension. This alternative approach to X acceleration has been tested with very good results by the Xegl experimental X server. Unfortunately the work on Xegl has been recently discontinued due to the lack of resources. You should be able to learn more about Xegl by searching the X.org or the Freedesktop mailing lists.
What to do when encountering an OpenGL error, an GLX version error
or when OpenGL application rendering fails
Setting the LIBGL_ALWAYS_INDIRECT variable ion the server can help.
The command is
export LIBGL_ALWAYS_INDIRECT=1
or in a C shell
setenv LIBGL_ALWAYS_INDIRECT 1
A bug report has been filed for RHEL6:
"OpenGL application fails to run correctly when using RHEL6 remotely"
https://access.redhat.com/knowledge/solutions/207003
