Known issues¶
Android: Failed to load plugin 'kzparticles' on app start¶
When you build a Kanzi project that uses Kanzi Particles for Android, the application exits at startup with:
com.rightware.kanzi.InvalidKzbFileException: Failed to load plugin 'kzparticles'
The templated kanzinative Gradle module ships with the particles
plugin disabled by default. To enable it:
Navigate to
<ProjectName>/Application/configs/platforms/android_gradle/kanzinative.Open
build.gradle.Locate the
externalNativeBuildblock and change-DKANZI_LINK_KZPARTICLES=OFFtoON:// Enable to add Particles plugin to the AAR. It has to be available in Engine/plugins/particles/. arguments "-DKANZI_LINK_KZPARTICLES=ON"
Save and rebuild.
Note
In Android Studio, you may also need Sync Project with Gradle Files and Clean Build for the change to take effect.
Android: OpenGL ES 3.1 is the minimum runtime¶
Kanzi Particles dispatches compute shaders for emission, simulation, affectors,
collision, and event generation. Compute shaders require OpenGL ES 3.1
or newer. The example application declares
<uses-feature android:glEsVersion="0x00030001" android:required="true"/>;
your application should do the same. Devices reporting only ES 3.0 will
not run the plugin.
Validated against Snapdragon / Adreno 650 (Galaxy Tab S7+, ES 3.2).
Custom compute materials: explicit SSBO bindings required (temporary)¶
If you author a custom emission-count, affector, collider, or event
material that introduces a new buffer (SSBO) declaration, you must
give it an explicit, distinct binding = N qualifier within its
descriptor set. For example:
layout(std430, set = 1, binding = 7) buffer KZParticlePersistentState
{
float accumulator;
};
The engine reserves the following bindings in set 1 (engine-managed):
Binding |
Buffer |
|---|---|
0 |
|
1 |
|
2 |
|
7 |
|
For your own SSBOs, pick any other binding number that doesn’t collide
with the table above or with other SSBOs in the same program. Without
an explicit binding, the SSBO can flatten to GL binding = 0 after
spirv-cross set-flattening and silently overlap another buffer on
OpenGL ES <3.2 (e.g. Adreno 650), causing “no particles” with no error
message.
This restriction is temporary – it will be lifted in an upcoming engine release once explicit binding assignment moves into the shader compilation pipeline.