Glium: Как передать массив матриц в шейдер?

Пытаюсь тут сделать простенькую скелетную анимацию используя glium.

Хочу передать в шейдер матрицы костей (допустим, [[[f32; 4]; 4]; 40]) и получить в нем uniform highp mat4 bones[40];.

Как-то совсем без идей как это выразить через типы glium - https://tomaka.github.io/glium/glium/uniforms/trait.AsUniformValue.html :frowning: .

Нашел https://github.com/tomaka/glium/issues/1422 - все как-то сложно.

Спросил в glium/issues - https://github.com/tomaka/glium/issues/1468 , а то просто так я очень долго буду разбираться.

Томака ответил, что надо использовать UniformBuffer, как в examples/gpgpu.rs.

Не сказал бы, что пример 1 в 1 с моим случаем, но попробую разобраться.

Да, через UBO передать удалось без особых сложностей, почти как в примере.

Проблема только в том, что это нельзя сделать, насколько я знаю, в gl<3.1 и gles<3.0. И если GL3.1 не такая уж и проблема, то вот многие тыкалки gles3 не поддерживают :frowning: .

Покопался в этом деле еще немного, все-таки хотелось бы решение для GLES2.

Если взять гитовую версию glium'а, то там есть комиты, позволяющие сделать то же самое через свою реализацию типажа Uniforms, примерно как в этом комментарии.

У меня, правда, руки еще не дошли проверить работу под андроидом и есть некоторые непонятки с тем, насколько эффективен этот способ (а то строки какие-то, хэшмапы).

Проверил под андроидом - с GLES2 тоже работает.

Отлично, пока такой вариант меня удовлетвряет. Вопрос о понижении производительности изучать лень, на глаз все хорошо.