я пытаюсь реализовать шейдер с однородным массивом int в Qt3D (C++, а не qml):
Униформа GLSL определяется следующим образом:
uniform int data[4];
Эта униформа будет обновляться очень часто (тысячи раз за кадр). Я использовал QParameter для униформ с одним значением. В документации указано, что имя униформы должно быть "data[0]" для регистрации QParameter. Какой/самый быстрый способ установить единый массив? Устанавливаемые данные хранятся в массиве 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?