2020年1月20日 星期一

使用 NDK 建置 Shaderc 在 Windows

使用 NDK 建置 Shaderc 在 Windows

前言

  在之前的 建置 glslang 在 Windows 裡建置了 glslang 來當 Shader 的編譯器,但不幸的是 Android 平台並不能使用 glslang 而是由 Google 提供的 Shaderc 專案來當 Shader 的編譯器,並且要自己編譯成 Library 來使用,在此把過程做個紀錄。

內容

  Shaderc 的專案在 [ Github ] Shaderc 裡可以取得最新的版本,但幸運的是 NDK 本身會自帶一份 Shaderc 的專案,可以在以下的位址找到它
(NDK_ROOT)/sources/third_party/shaderc

可以在該資料夾下發現 Android.mk ,接著在使用以下命令來建置
..\..\..\ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_ABI=all APP_PLATFORM=android-24 APP_STL=c++_static -j8 clean libshaderc_combined

要注意的是命令中的 APP_STL 參數,範例用的是 c++_static ,如果需要別的 APP_STL 請修改此參數,建置完成後會產生 include 與 libs 這兩個資料夾, include 裡會包含所需要的 Header 檔 , libs 則包含對應各種 ABI 的 library 檔( .a 檔),建置到此就完成了。

  建置完成後就是如何加入到 NDK 的  Android.mk 裡來引用,以下是使用範例
#=====shaderc
include $(CLEAR_VARS)

LOCAL_MODULE := Shaderc_prebuild
LOCAL_SRC_FILES := (NDK_ROOT)/sources/third_party/shaderc/libs/$(APP_STL)/$(TARGET_ARCH_ABI)/libshaderc.a

include $(PREBUILT_STATIC_LIBRARY)

#=====
include $(CLEAR_VARS)
#...
LOCAL_C_INCLUDES += (NDK_ROOT)/sources/third_party/shaderc/include
#...
LOCAL_STATIC_LIBRARIES += Shaderc_prebuild

include $(BUILD_SHARED_LIBRARY)

範例先是產生一個 Prbult static library ,接著在需要引用的專案加入 include path ,並在 LOCAL_STATIC_LIBRARIES 加入  Prbult static library  ,加入的時候後要注意用的 Module 名稱來加入,這樣就可以開始使用了。如果需要一個具體的使用範例來參考的話可以使用 [ Github ] GearVRf  這個專案裡有完整使用範例。

  在 NDK 的參數裡的參數 LOCAL_SRC_FILES 是用 ":=" 來給值,由於右方有NDK的變數( APP_STL 與 TARGET_ARCH_ABI ),請不要使用"+="給值,不然會在 Link 的時候得到 Permission denied 錯誤,這個錯誤個人足足找了4天才找到這個錯誤,希望沒有下一個人會踩到這個雷。

參考資料

[ Github ] Shaderc
[ https://developer.android.com ] Vulkan Setup
[ Github ] GearVRf

相關文章

建置 glslang 在 Windows

沒有留言:

張貼留言