August / September 2018 Development Update

In catching up with our delay in bringing out these posts, we have decided to cover the developments in the months of August and September in a single blog post. This allows us to better focus our developments on the work ahead, concordant with our plan to release 1.10 before the end of the year.

Stability improvements

To that end, we have been working diligently on improving the stability of the engine and getting the major feature branches stable enough to be merged. Among the fixes are improved thread safety for various interfaces, regressions in the shader generator, improvements to the build system, fixes for the Android port and a few improvements to the Python 3 support.

A long-standing bug has been fixed whereby Eigen-enabled builds would load some .egg models in the wrong orientation. This turned out to be a compiler bug which we managed to find a workaround for. If you were using a development build of Panda3D and had added an additional rotation in your code to work around this bug, you may need to double-check that your models are still loaded the right way.

Input API

The new input device API being developed on the input-overhaul branch has been significantly changed following a round of community feedback on the design. Sample programs showing off the various types of game devices have been added to the repository as well. After some adjustments to the API to take touch input into account, and some other finishing touches, the final review process can take place after which the code can be merged.

Stay tuned, we will follow up on this with a more in-depth post describing the new changes.

Multi-touch

As part of improving our support for mobile platforms, we have designed a new API as part of the input-overhaul effort for handling multi-touch more effectively. The new interface makes it easier to handle both touch and mouse input in the application, as well as other future pointing devices, such as the “laser pointer” style of pointing input seen in Virtual Reality games. It is expected to become part of the new release of Panda3D.

The design unifies both touch inputs and mouse clicks/drags through a concept called “active pointers”, which refers to a finger contacting the surface of the screen or a mouse with at least one button active. Whenever an active pointer is added, an event called `pointer-down` is fired. An argument is passed indicating the pointer type, a unique identifier in the case of a finger touch, as well as the position and velocity of the pointer. Likewise, events called `pointer-move` and `pointer-up` are fired when this pointer is dragged or when it ends, respectively.

Of course, it will still be possible to track the mouse or a stylus that is hovering over the surface of a digitizer independently of this by exposing a single “primary pointer” that can be accessed by legacy applications or ones that do not require multi-touch support.

You are quite welcome to provide input on the specification via the corresponding specification document, which we expect to be implemented in the coming weeks.

Other changes

The annoying “attrib lock” that prevented changing certain properties of a Material after it had been assigned to a node has been removed. It used to be necessary since the shader generator was not able to detect certain changes to existing materials after the shader for that material had already been generated. However, the improved shader generator architecture in 1.10 makes it possible for Panda3D to handle this case correctly without the attribute lock.

Support for Maya 2018 has been added, and the latest development builds now contain exporter and importer plug-ins for this version of Maya.

IRC channel

Due to ongoing spam attacks on the FreeNode network, we have needed to restrict access to the #panda3d channel on FreeNode to users who are registered with FreeNode. Click here to find out how to do so. This restriction does not apply to users of the webchat interface.