前言
这是这篇文档(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.hlsl
PS = $$PWD/win/d3d11ScreenCapture/PixelShader.hlsl
vshader.input = VS
vshader.header = VertexShader.h
vshader.entry = VS
vshader.type = vs_5_0
pshader.input = PS
pshader.header = PixelShader.h
pshader.entry = PS
pshader.type = ps_5_0
HLSL_SHADERS = vshader pshader
load(hlsl) #用这种方法需要将hlsl.prf文件放到Qt的安装目录中去
总结
如果能找到 hlsl.prf文件不用发到Qt安装目录下就好了。不然别人从代码库中把代码拉下来还要复制这个文件。