使用新的Qt6.2更新,顶点和片段着色器需要打包在.qsb文件中,而不是作为字符串嵌入到ShaderEffect组件中。
我正在尝试更改我的vertex着色器以使用新标准。以下是当前的代码
vertexShader: "
uniform highp mat4 qt_Matrix;
attribute highp vec4 qt_Vertex;
attribute highp vec2 qt_MultiTexCoord0;
varying highp vec2 coord;
void main() {
coord = qt_MultiTexCoord0;
gl_Position = qt_Matrix * qt_Vertex;
}
"
如何创建.qsb文件并在ShaderEffect中使用它?
在CMake中,可以使用qt6_add_shaders
将着色器烘焙到qsb
文件中。例如,这里是我在项目中使用的东西:
qt6_add_shaders(graph "graph-shaders"
BATCHABLE
PRECOMPILE
OPTIMIZED
PREFIX
"/"
FILES
"shaders/cube/cube.frag"
"shaders/cube/cube.vert"
"shaders/line/line.frag"
"shaders/line/line.vert"
"shaders/noisy/noisy.frag"
"shaders/noisy/noisy.vert"
)
你可以看到,我有一个文件夹,我所有的着色器都位于其中,当我运行CMake时,我会收到以下信息:
shaders/cube/cube.frag -> shaders/cube/cube.frag.qsb exposed as ://shaders/cube/cube.frag.qsb
shaders/cube/cube.vert -> shaders/cube/cube.vert.qsb exposed as ://shaders/cube/cube.vert.qsb
shaders/line/line.frag -> shaders/line/line.frag.qsb exposed as ://shaders/line/line.frag.qsb
shaders/line/line.vert -> shaders/line/line.vert.qsb exposed as ://shaders/line/line.vert.qsb
shaders/noisy/noisy.frag -> shaders/noisy/noisy.frag.qsb exposed as ://shaders/noisy/noisy.frag.qsb
shaders/noisy/noisy.vert -> shaders/noisy/noisy.vert.qsb exposed as ://shaders/noisy/noisy.vert.qsb
所有这些已编译的QSB文件都位于QT资源中(包含在可执行文件中(。在QML或C++中使用它就像一样简单
vertexShader: ":/shaders/noisy/noisy.vert.qsb"
正如你所看到的,它现在干净多了:(