jME 3.10.0-beta1
My work for 3.10 so far has mostly been geared toward making jME more reliable across all the platforms we support, safer and nicer to work with. This includes:
- Complete and reliable GLES 3.0 support everywhere , with updated jME internals that can make full use of it
- Modern GraalVM-based iOS backend that does not depend on deprecated APIs
- Refactoring every platform backend to make sure they are reliable and up to date : switching to SDL3 for desktop, proper gamepad and remapping support, gamepad rumble, device rumble, improvements to the sRGB pipeline, HiDPI support, and an on-screen gamepad
- Improvements and fixes to PBR and faster IBL environment baking
- Better scene design with render parity with Blender : light attenuation, global lights, and tonemapping. So if both jME and Blender are configured in the same way, the scene should look almost the same.
- GraalVM support , mostly for the iOS backend, but also for those who want to release native binaries
- Replacement of JNI/AWT asset loaders with cross-platform java alternative/portings
- Native memory allocators with resource management in every platform
- Optional “Saferallocator” with built-in memory hardening and dynamic memory pressure detection to trigger the garbage collector for native buffers
The defaults are set to maximize cross-platform compatibility, so if you start your project with jME 3.10.0-beta1 today, you will be working with an engine that is much more stable and has less surprising behavior across different platforms.
The fact that the default renderer is ANGLE_GLES3 also means that, no matter what OS or GPU your workstation uses, you will be testing with almost the same renderer that the game will use everywhere else , including Android and iOS.
With the upgrade to jME’s GLES 3.0 support, this is also not as limiting as it would have been before. Remember how many jME features were not supported, or were half-broken, on Android (that is a GLES platform)? Not anymore!
But if you are porting an existing app from a previous jME version, and you only ever tested it on desktop, so with the previous default OpenGL 3.2 renderer, you might run into some hiccups. OpenGL is generally more lax with the standard, and more permissive when dealing with technically invalid resource management or code.
If you just want your app to run again, the first thing to try is setting the app to use OpenGL 3.2 , which was the previous default:
settings.setRenderer(AppSettings.LWJGL_OPENGL32);
If this makes your app work, you can choose to leave it like that. Or, depending on your goals, you might consider doing the extra work needed to make it work with ANGLE. If you do not care about Android or iOS, this could still be worth doing for better macOS support, since OpenGL is deprecated there , or just to make sure the app doesn’t break with different combinations of drivers and hardware.
Discussion in the ATmosphere