Пытаюсь тут сделать простенькую скелетную анимацию используя glium.
Хочу передать в шейдер матрицы костей (допустим, [[[f32; 4]; 4]; 40]
) и получить в нем uniform highp mat4 bones[40];
.
Как-то совсем без идей как это выразить через типы glium - https://tomaka.github.io/glium/glium/uniforms/trait.AsUniformValue.html
.
Спросил в 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 не поддерживают
.
Покопался в этом деле еще немного, все-таки хотелось бы решение для GLES2.
Если взять гитовую версию glium
'а, то там есть комиты, позволяющие сделать то же самое через свою реализацию типажа Uniforms
, примерно как в этом комментарии.
У меня, правда, руки еще не дошли проверить работу под андроидом и есть некоторые непонятки с тем, насколько эффективен этот способ (а то строки какие-то, хэшмапы).
Проверил под андроидом - с GLES2 тоже работает.
Отлично, пока такой вариант меня удовлетвряет. Вопрос о понижении производительности изучать лень, на глаз все хорошо.