2016-08-22 88 views
4

我不希望Visual Studio自動檢測對着色器文件所做的更改,而是將glslangValidator作爲構建步驟來手動編譯我的GLSL着色器爲SPIR-V。我正在使用Premake生成Visual Studio解決方案/項目。這部分工作使用Premake 5和Visual Studio 2015將GLSL編譯爲SPIR-V

一種溶液宣佈在premake5.lua

--prebuildcommands [[for %%i in (..\data\shaders\*) do (..\libs\vulkan\glslangValidator.exe -V -o "%%~dpibin\%%~nxi.spv" %%i)]] 

,然後right-click shader in solution explorer -> properties -> General -> Item Type -> Custom Build Tool

也有一些缺點,以這種方法:

  • 所有着色器編譯時,只有一個人改變
  • 我不得不手動更改VS項目設置

我能找到的最接近的事預製文件是:Custom Build Commands。我認爲這個想法是在着色器文件上使用過濾器並生成構建命令,但我無法獲得任何工作。也許別人有想法?

+0

「*我什麼都做不了。*」以什麼方式?請發佈你認爲應該工作但沒有的代碼,然後解釋它是如何工作的。 –

+0

我試過了:'filter「files:../ data/shaders/*」 prebuildcommands [[.. \ libs \ vulkan \ glslangValidator.exe -V -o%{file.directory} \ bin \%{file.name } .spv%{file.relpath}]]',但我不確定premake中的單個文件是否支持prebuild命令。我鏈接的github wiki頁面使用'buildcommands',但它似乎是專門用於將資源轉換爲obj文件並與其他文件進行鏈接。無論哪種方式我的vcxproj,過濾器,用戶,sln等沒有引用glslang命令,所以它似乎premake忽略它。 – Petwoip

+0

「*它似乎是專門用於將資源轉換爲obj文件並與其餘鏈接*」Wiki上的示例編譯了Lua腳本。 Lua不編譯彙編;它是一種*解釋*語言。編譯Lua腳本只是把它變成Lua程序集,只能由Lua解釋器讀取。 –

回答

2

看起來像我誤解了premake文檔中的一些事情(謝謝Nicol)。我得到它的工作做:

filter "files:../data/shaders/*" 
    buildcommands '"../libs/vulkan/glslangValidator.exe" -V -o "%{file.directory}/bin/%{file.name}.spv" "%{file.relpath}"' 
    buildoutputs "%{file.directory}/bin/%{file.name}.spv" 

現在我的Visual Studio項目設置krOoze的答案一致。唯一的缺點是不得不爲每個新的着色器手動設置它(或重新生成整個項目)。 Custom Rules看起來很有趣,但目前僅支持Visual Studio(也不支持同一規則中的多種擴展類型(.frag,.vert,.comp等))。

2

我什麼都不知道Premake的,但這個工程的Visual Studio:

  1. 添加的着色器項目
  2. 在每個着色器文件的屬性頁面中設置Item TypeCustom Build Tool
  3. 在新出現Custom Build Tool樹爲每個着色器文件:
    1. 套裝Command Line$(VULKAN_SDK)\Bin32\glslangValidator -V -o $(OutDir)\%(Identity).spv %(Identity)(爲32倍,否則Bin(適用於x64主機)
    2. Description設置爲不錯,例如Compiling vertex shader
    3. Outputs設置爲例如$(OutDir)\%(Identity).spv
    4. 設置Link ObjectsNo

現在應該每個文件的工作,並妥善僅編譯修飾的,也刪除乾淨。

雖然我喜歡的方式(像你一樣),只加入一個命令生成後步驟:

for %%f in (*.vert *.tesc *.tese *.geom *.frag *.comp) \ 
    do %VK_SDK_PATH%\Bin\glslangValidator.exe -V -o $(OutDir)\%%f.spv %%f 

它,它可以很容易地添加到新的項目與地產利益片。

+0

只是讓你知道我讀了你的答案,但今天晚些時候才能嘗試。從它的聲音,這正是我需要的,只是希望premake可以爲我處理設置。 – Petwoip

相關問題