【问题标题】:Updating Qt Shader from Qt 5.15 to Qt 6.2将 Qt 着色器从 Qt 5.15 更新到 Qt 6.2
【发布时间】:2023-01-16 00:54:37
【问题描述】:

在新的 Qt6.2 更新中,顶点和片段着色器需要打包在 .qsb 文件中,而不是作为字符串嵌入到 ShaderEffect 组件中。

我正在尝试更改我的 vertexShader 以使用新标准。下面是目前的代码

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 中使用它?

【问题讨论】:

标签: qt qml qqmlcomponent


【解决方案1】:

有一些关于如何创建、使用 qsb 文件的链接

QSB Manual

ShaderEffect QML Type

Qt Shader Tools

【讨论】:

【解决方案2】:

在 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"

如您所见,现在干净多了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多