SDK 1.9.1 Release

Today I am excited to announce the release of version 1.9.1 of the Panda3D SDK. This release fixes a lot of bugs and stability issues. With this release, the 1.9 branch is now considered to be stable. We feel that it is now ready to use for production purposes.
Since 1.9.0 was an unstable release not yet ready for deployment, it did not include deployment tools such as pdeploy and packp3d. This release reintroduces them so that Panda3D applications can be deployed against the 1.9 branch of Panda3D.
As discussed in the previous blog post, the issues with installing and running the SDK on Mac OS X 10.11 “El Capitan” have been resolved. An update has also been made to pdeploy so that the installers it generates are compatible with the latest OS X version as well.
Besides the countless bug fixes in this release, a few smaller features have been introduced, mostly to address usability shortcomings. A couple of those will be highlighted in this post.
One of the new features is that Panda3D is now a DPI-aware process on Windows. This solves a problem that was introduced by Windows 8.1, namely that Windows will try to automatically scale windows if the user has configured his monitor to a DPI other than 100%, a feature that is called “DPI virtualization”. This was introduced in order to prevent text from looking too small on high-DPI displays like tablets.
This scaling looks bad in 3-D applications like Panda3D and causes blurring artifacts, particularly in text, as demonstrated in the following screenshots. It also causes Windows to misrepresent the true size of the graphics window and display size, which can lead to other subtle bugs. Panda3D 1.9.1 disables this feature by telling Windows it will take care of any scaling itself.

DPI virtualization
DPI virtualization

DPI-aware scaling
DPI-aware scaling

By default, since developers tend to expect their window not to unexpectedly change their size in pixels, Panda3D will not automatically resize windows when they are dragged to a monitor with a different DPI setting or when the DPI setting is changed in the Control Panel while Panda3D is running. However, this can be turned on by setting the “dpi-window-resize” variable to “true”. For applications that instead wish to keep using Windows’ DPI virtualization, the Config.prc variable “dpi-aware” may be set to “false”, in which case Panda3D will behave as it did in 1.9.0 and earlier.
Another added feature is the M_confined mouse mode. This mouse mode keeps the cursor confined to the window and can be used in cases where M_relative cannot be used but where it is still desirable to prevent the mouse cursor from leaving the window. A new sample program has been added to demonstrate the different mouse modes that are available.
The p3d_TransformTable GLSL input, which makes it easier to implement hardware skinning in a custom GLSL shader, has been backported from the 1.10 branch by user request. Although the fully automatic hardware skinning feature is a 1.10 feature and is not available yet in 1.9.1, this feature should make it easier for people who use custom shaders for their characters. See this forum thread for more information on the subject.
Special thanks go to Ed Swartz, who has contributed a significant amount of fixes and testing effort for this release.
The following issues were fixed in this release:

  • SDK now properly installs in Mac OS X 10.11 “El Capitan”
  • Windows 8.1+ no longer applies DPI virtualization to Panda window
  • Fix ffmpeg library load issue on Mac OS X
  • Fix issues running maya2egg on Mac OS X
  • Fix compiler errors on different platforms
  • Fix various rare crashes
  • Fix crashes on shutdown in threaded pipeline
  • Fix low-level threading crash on ARM machines
  • More reliably and robustly handle failures opening OpenAL device
  • Textures were not being scaled to power-of-2 in some cases
  • Correct scaling of normal vectors with flatten operation
  • Correct positioning of viewing axis when showing lens frustum
  • Add dpi-window-resize option to auto-resize window on DPI change
  • Fix assertions when alpha-file-channel references unknown channel
  • Use OpenGL-style vertex colors by default on non-Windows systems
  • Default vertex column alignment is now 4 bytes
  • Add PNMImage premultiply/unpremultiply methods.
  • Fix incorrect parsing of numbers with exponents in Config.prc
  • Fix for reading URLs mounted via the virtual file system
  • Fix shader generator memory leaks and runtime performance
  • Fix shader generator scaling of binormals and tangents
  • Expose _NET_WM_PID to window managers in X11
  • Fix a range of bugs in tinydisplay renderer.
  • Don’t error when setting lens far distance to infinity
  • Allow passing custom lens to saveCubeMap/saveSphereMap
  • Fix errors in saveCubeMap/saveSphereMap in threaded pipeline
  • Fix DynamicTextFont.makeCopy()
  • Make Texture memory size estimation more accurate
  • Fix various window resizing issues
  • Fix PandaSystem.getCompiler() value for clang (it reported gcc)
  • x2egg no longer replaces face normals with vertex normals
  • Include Eigen headers in Mac and Windows SDK
  • Added geomipterrain-incorrect-normals setting, default=true
  • DisplayInformation resolution list was missing on Windows
  • Upgrade FMOD and Bullet versions on Windows and Mac OS X
  • Various performance optimizations
  • Fixed various other bugs not listed here.

Fixes and improvements for the runtime:

  • Fix splash screen freezing in the X11 web plug-in
  • pdeploy will now handle extracted files (eg. .ico and .cur)
  • Added more options for customizing splash screen
  • Fix missing xml and ast modules from morepy package
  • Certificate dialog is now localized to various languages
  • Fix packp3d error when Python file is not in a package
  • Pass on failing exit status from packaged application
  • Remove annoying “:Packager(warning): No such file” warning
  • Fix issue installing pdeploy-generated .pkg on OS X 10.11

Fixes for the Python API:

  • Fix mysterious and rare crash in tp_traverse
  • Bullet step function accidentally defaulted to step size of 0
  • Fix overflow of file offsets (eg. when seeking in huge files)
  • Fix regression with memoryviews
  • Fix hasattr/getattr of vector classes for invalid attributes
  • Allow passing a long to methods accepting an int
  • Fix crash when passing None to Filename constructor
  • MouseWatcherGroup was erroneously not exposed in 1.9.0
  • ShowBase no longer unmounts VFS when shutting down
  • No longer requires setting PATH to import panda3d.*
  • DirectDialog default geom is once again respected
  • DirectDialog no longer overrides custom frameSize
  • Fix WebcamVideo/MicrophoneAudio.getOptions() methods

Changes relating to the OpenGL renderer:

  • Various performance improvements
  • Fix point/line thickness setting
  • Improve GLSL error reporting
  • Fix Intel driver issues, particularly with geometry shaders
  • Add more error checking for parameter types
  • Integer shader inputs were not being converted to float properly
  • Fix crash passing an undersized array to a GLSL shader input
  • p3d_ColorScale et al may now be declared as vec3
  • Fix flickering when using trans_model_to_apiview in Cg
  • Support wireframe and point rendering modes in OpenGL ES
  • Fix issue with model disappearing in rare cases with GLSL
  • Fix ColorWriteAttrib not working as it should
  • Allow deactivating PStats collectors for GPU timers
  • Memory residency of graphics buffers now tracked by PStats
  • Allow changing OpenGL coordinate system with gl-coordinate-system

Fixes for libRocket integration:

  • libRocket did not work on Mac OS X in 1.9.0
  • Fix inconsistent behavior with non-power-of-2 textures in rocket
  • Use model-path for finding libRocket assets
  • Add missing keys to libRocket keymap
  • libRocket elements showed up white in tinydisplay

The following new features were added:

  • Add -L (lighting) and -P (graphics pipe) pview options
  • Add M_confined mouse mode that keeps cursor in window
  • Add sample program demonstrating mouse modes
  • bam2egg supports collision sphere and plane solids
  • p3d_TransformTable GLSL input backported from 1.10 branch
  • Add openal-device setting for selecting OpenAL audio output
  • Add limited modification timestamp tracking for Ramdisk mounts
  • Support for Autodesk Maya 2016