Qt prf 之 hlsl编译

31 篇文章 0 订阅

前言

这是这篇文档(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安装目录下就好了。不然别人从代码库中把代码拉下来还要复制这个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值