我试图在Qt3D(C++, 不是qml)中实现一个带有统一int数组的shader。
GLSL uniform定义如下。
uniform int data[4];
这个uniform会经常更新(每帧数千次)。我使用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
的qWarning。
我试着搜索Qt3D的文档和源代码,但找不到有效的数据类型来传递给QVariant参数.有没有可能在QT3D中直接设置统一变量并绕过QVariant?
如果数组的大小是4,那么我建议使用 ivec4
而不是 int[4]
.
uniform ivec4 data;
的要素。data
可以用数组语法访问(如 data[0]
).