Qt3D统一int数组

问题描述 投票:0回答:1

我试图在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?

arrays glsl qt3d uniform
1个回答
0
投票

如果数组的大小是4,那么我建议使用 ivec4 而不是 int[4].

uniform ivec4 data;

的要素。data 可以用数组语法访问(如 data[0]).

© www.soinside.com 2019 - 2024. All rights reserved.