ParaView/Developer Info
This is a general collection of knowledge to help make developing for ParaView easier.
VTK Development
From Fbertel Wiki Page
VTK Rendering Context behavior to keep in mind
Switching from onscreen to offscreen rendering can change the OpenGL context of the same renderwindow. Those OpenGL context can have different extensions support. For instance, on Windows, the onscreen can use the GPU but the offscreen may use the GDI OpenGL 1.1. It is really nasty in term of tracking available extensions: any class using extensions and caching a flag about the success of extension loading should keep track of the OpenGL context where the function pointers were initialized. It also means that the function pointers (vtkgl::) should be per context, right now it is a list of static global pointers... on top of that they are not reset or swap between context switches.
OpenGL Extension Manager
The OpenGL extension manager calls Render() on the render window to make sure a OpenGL context is created. Basically, it calls a function only for its the side effect. In the first place a function should not have side effects. The OpenGL extension manager should call a function that create the OpenGL context directly. Currently, it causes egg and chicken issues when vtkOpenGLRenderWindow::OpenGLinit calls the openGL extension manager.
Server Manager Development
XML Hints
http://www.paraview.org/Wiki/ServerManager_XML_Hints
Qt Development
QApplication::processEvents()
Because of the testing framework we are unable to safely use processEvents. The testing framework has a busy lock it uses to determine when it should play the next testing event. If that busy lock is running when your code calls processEvents it will cause the tests to start playing, which will break the test. The solution is dependent on where you need to call processEvents.
pqCoreUtilities::processEvents(); pqEventDispatcher::processEvents(); //only in Widgets since widgets can't depend on core
Both methods support the QEventLoop::ProcessEventsFlags flags argument. For more information on processEvents please see the Qt Documentation
Testing
Pause Event
To add a pause to a ParaView XML test:
<pqevent object="<MainWindow>" command="pause" arguments="<msec>" />
Debugging
DebugLeaksView
A great way to track down VTK classes that are leaking is using DebugLeaksView. The widget is designed to work out of the box with any VTK+Qt application- just construct the widget and call show(). More information can be found on the DebugLeaksView page. The vtk code is available in the qt-vtk-debug-leaks-view branch of git://github.com/patmarion/VTK.git and the code to embed the widget into paraview is available in the qt-vtk-debug-leaks-view branch of git://github.com/patmarion/ParaView.git
OpenGL Debugging Tool
ApiTrace is a project to trace, analyze and debug graphics api's. Both OpenGL and Direct3D. To some extend inspired by gDEBugger and Windows PIX. We wanted a tool that would let us slice through huge games and CAD apps to the exact call which causes problems and be able to inspect the entire graphics state, including the shaders, textures and all the buffers. See here for more info
Windows Console Debug Output
To Enable printing of cout and printf during debugging Change the linking properties of the paraview target by right clicking it and selecting properties. In the Property pages drill down through: Configuration Properties -> Linker -> System -> SubSystem. Change Windows(/SUBSYSTEM:WINDOWS) to Console(/SUBSYSTEM:CONSOLE). Build the paraview target. Now when you run ParaView a console Window will also spawn where all your standard output will be printed. Note: Unfortunately if CMake is re-run this property will be reset.
Environment Flags
PARAVIEW_DATA_ROOT
Change the location of the data root for testing.
PV_DEBUG_TEST
Prints debugging information about the testing framework during playback to cout.
PV_ICET_WINDOW_BORDERS
Force render windows to be 400x400 instead of fullscreen
PV_NO_OFFSCREEN_SCREENSHOTS
Disable the use of offsceen screenshots
PV_PLUGIN_DEBUG
Prints debugging information when loading plugins into ParaView.
PV_PLUGIN_PATH
Directories containing plugins to be loaded on startup
PV_PLUGIN_CONFIG_FILE
XML Plugin Configuration Files to specify which plugin to load on startup
PV_SOFTWARE_RENDERING
Force software rendering for ParaView. (This is no longer supported).
PV_LOCK_SAFE
Default behavior is the use of vtkTransmit<Type>Piece. Enable PV_LOCK_SAFE to instead use vtkExtract<Type>Piece classes which are faster but can cause deadlocks.
QT_MAC_NO_NATIVE_MENUBAR
Qt flag to force the Qt menu bar rather than the native mac menu bar.
PV_DEBUG_PANELS
When set, debugging text will be printed out explaining the reason for creation of various widgets on the properties panel (pqPropertiesPanel).
PV_DEBUG_APPLY_BUTTON
When set, debugging text will be printed out to assist developers with the reasons behind the change in state for the "Apply" button on the properties panel (pqPropertiesPanel).
PV_MACRO_PATH
Additional directories defined by the user to store macros