使用 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
沒有留言:
張貼留言