Я пытаюсь реализовать шейдер с унифицированным массивом int в Qt3D (C ++, а не qml):
Униформа GLSL определяется следующим образом:
uniform int data[4];
Эта униформа будет обновляться очень часто (тысячи раз за кадр). Я использовал QParameter для униформы с одним значением. В документации говорится, что для регистрации QParameter имя униформы должно быть «data [0]». Какой-либо / самый быстрый способ установить единый массив? Данные для установки хранятся в массиве uint32_t [4].
Буду очень признателен за любую помощь!
С уважением
Редактировать:
Спасибо за подсказку Rabbit76, я изменил определение на ivec4. К сожалению, я до сих пор не знаю, как передать данные. Я пробовал что-то похожее на это
char data[4];
//*** set data to wanted values ***//
QByteArray dataArray;
dataArray.setRawData(data,4);
QParameter("data",dataArray, this); //*** this is a pointer to a subclassed QMaterial
, но данные не установлены, и я получаю qWarning, например,
Unknown uniform type or value: QVariant(QByteArray, "\x80\xA7\x1D\x93;\x01\x00\x00\xDF\x88\x11\xA7\xFD\x7F\x00\x00") Please check your QParameters
для реальных данных.
Я пытался искать документацию и исходный код Qt3D, но не смог найти допустимый тип данных для передачи в аргумент QVariant. Есть ли возможность напрямую установить единую переменную и обойти QVariant в QT3D?