From 30607af0ea78b8be0672ff0c40589cbf01ded791 Mon Sep 17 00:00:00 2001 From: Joshua Brookover Date: Mon, 5 Sep 2016 20:19:18 -0500 Subject: [PATCH] Now compiles all valid types of shaders. --- .gitignore | 4 +++ cmake/examples.cmake | 51 ++++++++++++++++++++++++++++++++++----- cmake/tools/shaderc.cmake | 1 - readme.md | 4 +-- 4 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e62b21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build/ +bgfx/ +bx/ +*.swp diff --git a/cmake/examples.cmake b/cmake/examples.cmake index d8813a3..fc5cdc5 100755 --- a/cmake/examples.cmake +++ b/cmake/examples.cmake @@ -21,14 +21,53 @@ function( add_bgfx_shader FILE FOLDER ) endif() if( NOT "${TYPE}" STREQUAL "" ) set( COMMON FILE ${FILE} ${TYPE} INCLUDES ${BGFX_DIR}/src ) + set( OUTPUTS "" ) + set( OUTPUTS_PRETTY "" ) if( WIN32 ) - shaderc( ${COMMON} WINDOWS PROFILE ${D3D_PREFIX}_4_0 OUTPUT ${BGFX_DIR}/examples/runtime/shaders/dx11/${FILENAME}.bin ) - elseif( APPLE ) - #shaderc( ${COMMON} OSX OUTPUT ${BGFX_DIR}/examples/runtime/shaders/metal/${FILENAME}.bin ) - shaderc( ${COMMON} LINUX PROFILE 120 OUTPUT ${BGFX_DIR}/examples/runtime/shaders/glsl/${FILENAME}.bin ) - else() - shaderc( ${COMMON} LINUX PROFILE 120 OUTPUT ${BGFX_DIR}/examples/runtime/shaders/glsl/${FILENAME}.bin ) + # dx9 + set( DX9_OUTPUT ${BGFX_DIR}/examples/runtime/shaders/dx9/${FILENAME}.bin ) + shaderc_parse( DX9 ${COMMON} WINDOWS PROFILE ${D3D_PREFIX}_3_0 OUTPUT ${DX9_OUTPUT} ) + list( APPEND OUTPUTS "DX9" ) + set( OUTPUTS_PRETTY "${OUTPUTS_PRETTY}DX9, " ) + + # dx11 + set( DX11_OUTPUT ${BGFX_DIR}/examples/runtime/shaders/dx11/${FILENAME}.bin ) + shaderc_parse( DX11 ${COMMON} WINDOWS PROFILE ${D3D_PREFIX}_4_0 OUTPUT ${DX11_OUTPUT} ) + list( APPEND OUTPUTS "DX11" ) + set( OUTPUTS_PRETTY "${OUTPUTS_PRETTY}DX11, " ) endif() + if( APPLE ) + # metal + set( METAL_OUTPUT ${BGFX_DIR}/examples/runtime/shaders/metal/${FILENAME}.bin ) + shaderc_parse( METAL ${COMMON} OSX OUTPUT ${METAL_OUTPUT} ) + list( APPEND OUTPUTS "METAL" ) + set( OUTPUTS_PRETTY "${OUTPUTS_PRETTY}Metal, " ) + endif() + # gles + set( GLES_OUTPUT ${BGFX_DIR}/examples/runtime/shaders/gles/${FILENAME}.bin ) + shaderc_parse( GLES ${COMMON} ANDROID OUTPUT ${GLES_OUTPUT} ) + list( APPEND OUTPUTS "GLES" ) + set( OUTPUTS_PRETTY "${OUTPUTS_PRETTY}GLES, " ) + # glsl + set( GLSL_OUTPUT ${BGFX_DIR}/examples/runtime/shaders/glsl/${FILENAME}.bin ) + shaderc_parse( GLSL ${COMMON} LINUX PROFILE 120 OUTPUT ${GLSL_OUTPUT} ) + list( APPEND OUTPUTS "GLSL" ) + set( OUTPUTS_PRETTY "${OUTPUTS_PRETTY}GLSL" ) + set( OUTPUT_FILES "" ) + set( COMMANDS "" ) + foreach( OUT ${OUTPUTS} ) + list( APPEND OUTPUT_FILES ${${OUT}_OUTPUT} ) + list( APPEND COMMANDS COMMAND "$" ${${OUT}} ) + endforeach() + file( RELATIVE_PATH PRINT_NAME ${BGFX_DIR}/examples ${FILE} ) + add_custom_command( + MAIN_DEPENDENCY + ${FILE} + OUTPUT + ${OUTPUT_FILES} + ${COMMANDS} + COMMENT "Compiling shader ${PRINT_NAME} for ${OUTPUTS_PRETTY}" + ) endif() endfunction() diff --git a/cmake/tools/shaderc.cmake b/cmake/tools/shaderc.cmake index 971a058..91f9e79 100644 --- a/cmake/tools/shaderc.cmake +++ b/cmake/tools/shaderc.cmake @@ -15,7 +15,6 @@ target_link_libraries( shaderc bx bgfx fcpp glsl-optimizer ) function( shaderc ) cmake_parse_arguments( ARG "" "FILE;OUTPUT" "" ${ARGN} ) shaderc_parse( CLI ${ARGN} ) -#add_custom_command( OUTPUT ${ARG_OUTPUT} COMMAND "C:/Users/Josh/Downloads/bgfx-examples/shaderc" ${CLI} MAIN_DEPENDENCY ${ARG_FILE} ) add_custom_command( OUTPUT ${ARG_OUTPUT} COMMAND "$" ${CLI} MAIN_DEPENDENCY ${ARG_FILE} COMMENT "Compiling shader ${ARG_FILE}" ) endfunction() diff --git a/readme.md b/readme.md index 0e949ba..008402b 100644 --- a/readme.md +++ b/readme.md @@ -14,9 +14,9 @@ cmake .. Features ------------- * No outside dependencies besides bx, bgfx, and CMake. -* Only tested in Visual Studio 2015 so far. +* Tested on Visual Studio 2015 and Xcode. * Compiles bgfx, tools & examples. -* Detects shader modifications and automatically rebuilds them (DirectX11 shaders only for now). +* Detects shader modifications and automatically rebuilds them. * Uses CMake interface libraries (linking against bgfx is one line of cmake code via target_link_libraries). License