Julien, a few months ago I removed the whole hardcoded NIO stuff from ole PMVMatrix in favor of a more flexible data binding - see the SyncBuffer (SyncMatrix4f, ...) and its SyncAction.
This is now part of the agnostic PMVMatrix4f
See PMVMatrix4f's 'SyncMatrices4f getSyncPMv()'
which feeds right into a shader via GLUniformData, e.g. RedSquareES2:
pmvMatrixUniform = new GLUniformData("mgl_PMVMatrix", 4, 4, pmvMatrix.getSyncPMv()); // P, Mv
GLUniformData then picks the SyncAction, allowing to synchronize matrices if required
and then using the SyncBuffer to copy the data to the GPU.
So all this is rather universal to the backend .. only needs the SyncBuffer/Action receiver on
the toolkit side to use the data (OpenGL in above example).
(Yeah, still having ole GL'sh PMVMatrix (now a specialization of PMVMatrix4f in tests and demos),
doesn't matter that much - but in new code or toolkits I only use PMVMatrix4f.
The data binding is the very same.