Device Guide
DirectX9 (deprecated)
DirectX11
OpenGL (deprecated)
OpenGL2
This document lists various notes, capabilities, and limitations about each Visualize driver interface. These should be taken into consideration when programming your application as not every driver interface is as capable as the others. Some have external software dependencies, and some are not compatible with Visualize (due to bugs in the vendor drivers or other limitations). See the graphics card information page for more details.
In addition to conventional on-screen rendering, all driver interfaces additionally support hardware-accelerated rendering to a memory buffer. For information on how to set up an offscreen rendering context, see section 7.2 of the Core Graphics Programming Guide.
All Visualize windows are double-buffered.
The DirectX9 driver has been deprecated. Please upgrade your applications to DirectX11.
The DirectX9 driver is a shader-based interface to Microsoft's DirectX9 API, and is supported in Windows 8, Windows 7 and Windows Vista SP2.
In your code, the DirectX9 interface can be selected using the Window::Driver::DirectX9 enum value.
Runtime Requirements
In order to use the DirectX9 driver, the d3dcompiler DLL must be made available in the execution environment of the target machine. We distribute this file with the Visualize package. If you are building with Visual Studio 2012 (and hence using the Windows 8.0 SDK), the file is d3dcompiler_46.dll. If you are building with 2013 (8.1 SDK) you need to include the file d3dcompiler_47.dll.
The DirectX11 driver is supported in Windows 8 and Windows 7. In Windows Vista, DirectX11 requires Service Pack 2+, and installation of the most current Vista platform updates as of October 1, 2013.
In your code, the DirectX11 interface can be selected using the Window::Driver::DirectX11 enum value.
Runtime Requirements
In order to use the DirectX11 driver, the d3dcompiler DLL must be made available in the execution environment of the target machine. We distribute this file with the Visualize package. If you are building with Visual Studio 2012 (and hence using the Windows 8.0 SDK), the file is d3dcompiler_46.dll. If you are building with 2013 (8.1 SDK) you need to include the file d3dcompiler_47.dll.
Notes
When depth peeling is requested on a DirectX11 compliant video card, the DX11 driver will utilize a more advanced order-independent transparency algorithm. The algorithm can accurately draw up to 16 layers of transparency with minimal performance implications.
The OpenGL driver has been deprecated. Please upgrade your applications to OpenGL2.
The Visualize OpenGL driver interface requires the host platform to have OpenGL 1.1 or higher. Note that OpenGL 1.1 is not a shader-based API, so shaders and post-processing effects (which depend on shaders) will not work. OpenGL is supported on Windows and Linux.
Linux-specific information
For the OpenGL interface to work, X11 must be running on the host machine.
Limitations
When running an OpenGL application on one platform and displaying on another we have seen a few specific problems:
- Drawing faces with the NoHandedness option requires a view-dependent normal calculation on CPU side, defeating any attempt to use display lists.
- Environment maps in orthographic projection require view-dependent calculations on the CPU on vertex normals, also defeating display lists.
- Effects which require shaders to implement properly are not supported. These include shadow maps, bump mapping, ambient occlusion, bloom, depth of field, and fast silhouettes.
- If full-screen anti-aliasing is enabled, setting more than one layer of depth peeling in "depth peeling options" will have no effect.
- 'opengl' image drivers no longer work with hardware simple shadows on OS X because Apple's pixel buffer implementation NSOpenGLPixelBuffer has been deprecated as of OS X 10.7. Consider using 'opengl2' for shadows instead.
- Bump mapping is not supported
- Model comparison mode is not supported
In your code, the OpenGL interface can be selected using the Window::Driver::OpenGL enum value.
OpenGL2 is a shader-based driver interface that requires the host platform to have OpenGL 2.0+ or OpenGL ES 2.0. The Visualize OpenGL2 driver interface is supported on all platforms.
Limitations
- Depth of field is not supported
- The OpenGL2 driver is not compatible with systems equipped with certain Intel graphics chipsets due to bugs in Intel's OpenGL implementation. Most features work with Core i3 and newer chips with recent Intel drivers (screen-space ambient occlusion being one feature that does not).
- Post process effects (bloom, fast silhouettes, ambient occlusion, and depth of field) are not currently supported on iOS or Android due to GPU limitations on current devices.
In your code, the OpenGL2 interface can be selected using the Window::Driver::OpenGL2 enum value.