Qt prf 之 hlsl编译

来源:互联网 发布:mysql ip数据库 编辑:程序博客网 时间:2024/06/04 23:29

  • 前言
  • Qt的prf文件
    • 位置
    • 存在的意义
    • 我们用它干什么
  • hlsl文件解析
    • hlsl文件内容
    • Qt pro文件中添加
  • 总结

前言

这是这篇文档(qtd3d12window)的说明,一篇国外哥们写的。

Qt的prf文件

位置

*.prf文件要放到$$QTDIR/mkspecs/features下。
我尝试过放到别的地方,都失败了。如果你成功了。告诉我一下,不胜感激。

存在的意义

和pri文件类似,该文件也是要被包含进pro文件的。
只是:它更隐蔽
你经常和它打交道,可能却一直视而不见
eg:

CONFIG+=QT

当我们在CONFIG中指定一个东西时,qmake就会尝试去加载相应的feature文件。
在Qt的 manual中你可以看看官方的说明。
这一段中主要参考的这里。

我们用它干什么

移植windows截屏的demo到Qt中。
发现总是编译不过,因为缺少了.h文件。相应的.h文件是通过.hlsl文件生成的。
就是在真正编译之前执行一个命令,将DX的shader语言文件生成相应的.h文件。
其他方法:
1,直接在cpp文件中使用(有相应的函数读取编译)。
缺点:要改这个demo的代码。
2,在Qt工程的编译步骤哪里,添加一个新的步骤。
缺点:如果关掉QtCreator就要重现添加的这个步骤了。

hlsl文件解析

hlsl文件内容

hlsl.prf

for (SHADER, HLSL_SHADERS) {    INPUT = $$eval($${SHADER}.input)    fxc_$${SHADER}.input = $$INPUT    fxc_$${SHADER}.commands = fxc.exe /nologo /E $$eval($${SHADER}.entry) /T $$eval($${SHADER}.type) /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}    fxc_$${SHADER}.output = $$eval($${SHADER}.header)    fxc_$${SHADER}.dependency_type = TYPE_C    fxc_$${SHADER}.variable_out = HEADERS    fxc_$${SHADER}.CONFIG += target_predeps    QMAKE_EXTRA_COMPILERS += fxc_$${SHADER}}

Qt pro文件中添加

LIBS += d3d11.lib \        dxgi.lib#这里加载了一个hlsl的feature,这里需要在Qt的安装目录下复制一个hlsl.prf。这里先这样,后面再弄VS = $$PWD/win/d3d11ScreenCapture/VertexShader.hlslPS = $$PWD/win/d3d11ScreenCapture/PixelShader.hlslvshader.input = VSvshader.header = VertexShader.hvshader.entry = VSvshader.type = vs_5_0pshader.input = PSpshader.header = PixelShader.hpshader.entry = PSpshader.type = ps_5_0HLSL_SHADERS = vshader pshaderload(hlsl) #用这种方法需要将hlsl.prf文件放到Qt的安装目录中去

总结

如果能找到 hlsl.prf文件不用发到Qt安装目录下就好了。不然别人从代码库中把代码拉下来还要复制这个文件。