June 2020 Development Update

With the last development update being from July of 2019, the project is long overdue for another update post.

New Releases

There have been three new minor releases in the 1.10 series since our last development update. These releases have improved the stability of Panda3D, fixed various bugs and even introduced some minor features. More can be read about these releases in these posts:

New 1.11 Features

In addition to improving the 1.10 release, work has been progressing on a 1.11 release. Some highlights include:

  • New shader pipeline
  • CMake support
  • Relative mouse mode support in Windows
  • Headless OpenGL improvements on Linux
  • Cleanup of old platforms and unmaintained modules

New Shader Pipeline

A key feature of 1.11 will be a new shader pipeline that is in development and making great progress. Panda3D currently uses the deprecated Cg shader language in order to write builtin shaders that can target multiple rendering backends (e.g., OpenGL and Direct3D). These builtin shaders have become long-in-the-tooth and need updating (especially for builtin PBR support). However, it was undesirable to write these new shaders in Cg, which requires the proprietary, deprecated Cg toolkit from NVIDIA. Furthermore, Cg shaders do not work on mobile or web platforms, and writing these new builtin shaders for multiple languages (e.g., GLSL, HLSL, SPIR-V) is also unsustainable. The only other shader language currently supported by Panda3D is GLSL, which cannot target other graphics APIs like Vulkan or Direct3D and requires a separate dialect to support mobile platforms. Therefore, to be able to develop new shaders that can take advantage of the latest graphics features and work on all platforms, it was necessary to first devise and build a new shader pipeline.

The new pipeline can take shaders written in GLSL, HLSL, or Cg and convert them to SPIR-V using the Khronos-developed glslang compiler. If a rendering backend natively supports SPIR-V (e.g., Vulkan or OpenGL 4.6+) then the SPIR-V shader can be uploaded directly. Otherwise, the SPIR-V code is cross-compiled using SPIRV-Cross to a shader language supported by the rendering backend. This includes being able to output to older versions of GLSL, GLSL ES for mobile platforms, and even HLSL for Direct3D. This means shaders can be written using the latest GLSL version, and they will still work with older graphics cards!

CMake Support

CMake is a popular, open source build tool for generating build files for native build systems (e.g., make on Linux and Visual Studio project files on Windows). Adding support to build Panda3D using CMake has been in progress for a long time, and this work has finally been merged into the master branch. This allows using CMake to build Panda3D instead of the custom makepanda system. Both systems are supported for 1.11, but the plan is to drop makepanda for releases after 1.11. A wrapper script is in development to provide a makepanda-like interface to CMake, which may help with the transition. Many thanks go to CFSworks and the other contributors who have been working hard to make this happen!

Relative Mouse Mode in Windows

Panda3D offers a useful relative mouse mode for games that require mouse offset values rather than absolute ones. This is useful for implementing mouse-control of a camera or character. While support for this mode has existed on macOS and Linux, it has been missing for Windows, which requires writing separate code for different platforms. Support for this feature on Windows has been added to 1.11 in order to remedy this problem.

Headless OpenGL Improvements on Linux

Panda3D can now be compiled with support for OpenGL (and OpenGL ES) without requiring X11 on Linux by using the EGL API. This makes it easier to run Panda3D in a headless environment (e.g., a Linux server) while retaining rendering capabilities.

Cleanup of Old Platforms and Unmaintained Modules

Windows XP reached end-of-life way back in 2014. Panda3D kept Windows XP support around since it was not getting in the way — or, at least, in the way enough. However, it has been increasingly difficult to keep supporting Windows XP, and now that Python no longer supports it, there is no more reason for us to go through the effort. As such, Windows XP support has been dropped from the master branch.

Support for Python 2 has also been dropped from the master branch since Python 2 has reached end-of-life this past January, and continuing support was a continuous burden on our time. Python 3.4 also reached end-of-life and has been dropped.

Integrations for PhysX and libRocket have been dropped. The PhysX integration was written for an out-of-date version of PhysX and was not being maintained. libRocket has become defunct and does not support Python 3, so support for it was also dropped in Panda3D.

New Part-Time Developer

With the past few releases of macOS having dropped or deprecated several features in rapid succession, maintaining macOS support had started draining a lot of development time from rdb that could have been spent on things like the shader pipeline project to help push Panda3D forward. In fact, most of the 1.10.5 release was dedicated to fixing macOS woes. With mobile support being a high priority, it was also necessary to bring in someone to continue the work on the iOS port. To that end, D. Lawrence was brought on board back in January to work part time to improve support for macOS and iOS. D. Lawrence did great work last year on iOS support as part of their Google Summer of Code project, and we are happy to enable them to finish the work in this capacity. This would not have been possible without the generous support from our backers, which we are very grateful for.

Google Summer of Code

Panda3D was accepted to Google Summer of Code (GSoC) this year, and will again be participating as a sub-org under the Python Software Foundation. This year Panda3D was given one student slot, and Ashwini Jha’s project to add navigation mesh support using Recast and Detour was selected. These libraries offer state-of-the-art navigation mesh generation and pathfinding features. Progress on this project can be tracked in this forum post. Coding started June 1st, and there is already good progress. This is an often requested feature, and it is exciting to see it get worked on.