|
1 |
| -set(OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/generated) |
2 |
| -file(MAKE_DIRECTORY ${OUTDIR}) |
3 |
| -file(MAKE_DIRECTORY ${OUTDIR}/glsl) |
4 |
| -file(MAKE_DIRECTORY ${OUTDIR}/essl) |
5 |
| -file(MAKE_DIRECTORY ${OUTDIR}/dx9) |
6 |
| -file(MAKE_DIRECTORY ${OUTDIR}/dx11) |
7 |
| -file(MAKE_DIRECTORY ${OUTDIR}/metal) |
| 1 | +set(ASSET_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated CACHE INTERNAL "") |
| 2 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}) |
| 3 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}/glsl) |
| 4 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}/essl) |
| 5 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}/dx9) |
| 6 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}/dx11) |
| 7 | +file(MAKE_DIRECTORY ${ASSET_BINARY_DIR}/metal) |
8 | 8 |
|
9 |
| -macro(asset_shader FILE VAR) |
10 |
| - set(ARGS ${ARGN}) |
11 |
| - set(BASE_OPTIONS FILE ${FILE} INCLUDES ${BGFX_DIR}/src ${ARGS}) |
12 |
| - list(FIND ARGS VERTEX IND) |
13 |
| - if(IND EQUAL -1) |
14 |
| - set(TYPE "ps") |
15 |
| - else() |
16 |
| - set(TYPE "vs") |
17 |
| - endif() |
| 9 | +macro(add_asset_shaders ARG_TARGET) |
| 10 | + if(IGNEOUS_ASSET_GEN) |
| 11 | + if(NOT TARGET ${ARG_TARGET}) |
| 12 | + message(FATAL_ERROR "add_asset_shaders: You must provide a valid target.") |
| 13 | + endif() |
18 | 14 |
|
19 |
| - # glsl |
20 |
| - set(OPTIONS ${BASE_OPTIONS} OUTPUT ${OUTDIR}/glsl/${VAR}.bin LINUX PROFILE 120) |
21 |
| - shaderc_parse(OUT ${OPTIONS}) |
22 |
| - list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
23 |
| - list(APPEND ASSET_FILES ${OUTDIR}/glsl/${VAR}.bin ${VAR}_glsl) |
| 15 | + unset(ASSET_COMMANDS) |
24 | 16 |
|
25 |
| - # gles |
26 |
| - set(OPTIONS ${BASE_OPTIONS} OUTPUT ${OUTDIR}/essl/${VAR}.bin ANDROID PROFILE 120) |
27 |
| - shaderc_parse(OUT ${OPTIONS}) |
28 |
| - list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
29 |
| - list(APPEND ASSET_FILES ${OUTDIR}/essl/${VAR}.bin ${VAR}_essl) |
| 17 | + #while(condition) |
| 18 | + cmake_parse_arguments(ARG "" "HEADER" "SHADERS" ${ARGN}) |
30 | 19 |
|
31 |
| - # dx9 |
32 |
| - set(OPTIONS ${BASE_OPTIONS} OUTPUT ${OUTDIR}/dx9/${VAR}.bin WINDOWS PROFILE ${TYPE}_3_0) |
33 |
| - shaderc_parse(OUT ${OPTIONS}) |
34 |
| - list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
35 |
| - list(APPEND ASSET_FILES ${OUTDIR}/dx9/${VAR}.bin ${VAR}_dx9) |
| 20 | + if(NOT ARG_HEADER) |
| 21 | + message(FATAL_ERROR "add_asset_shaders: You must provide a header path.") |
| 22 | + elseif(NOT ARG_SHADERS) |
| 23 | + message(FATAL_ERROR "add_asset_shaders: You must provide shaders.") |
| 24 | + endif() |
36 | 25 |
|
37 |
| - # dx11 |
38 |
| - set(OPTIONS ${BASE_OPTIONS} OUTPUT ${OUTDIR}/dx11/${VAR}.bin WINDOWS PROFILE ${TYPE}_4_0) |
39 |
| - shaderc_parse(OUT ${OPTIONS}) |
40 |
| - list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
41 |
| - list(APPEND ASSET_FILES ${OUTDIR}/dx11/${VAR}.bin ${VAR}_dx11) |
| 26 | + unset(ASSET_FILES) |
42 | 27 |
|
43 |
| - # metal |
44 |
| - set(OPTIONS ${BASE_OPTIONS} OUTPUT ${OUTDIR}/metal/${VAR}.bin OSX PROFILE metal) |
45 |
| - shaderc_parse(OUT ${OPTIONS}) |
46 |
| - list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
47 |
| - list(APPEND ASSET_FILES ${OUTDIR}/metal/${VAR}.bin ${VAR}_metal) |
48 |
| -endmacro() |
| 28 | + foreach(SHADER ${ARG_SHADERS}) |
| 29 | + get_filename_component(SHADER_NAME ${SHADER} NAME_WE) |
| 30 | + if(${SHADER_NAME} MATCHES "^vs_") |
| 31 | + set(DX_TYPE "vs") |
| 32 | + set(TYPE "VERTEX") |
| 33 | + elseif(${SHADER_NAME} MATCHES "^fs_") |
| 34 | + set(DX_TYPE "ps") |
| 35 | + set(TYPE "FRAGMENT") |
| 36 | + else() |
| 37 | + message(FATAL_ERROR "add_asset_shaders: Unknown shader type: ${SHADER_NAME}") |
| 38 | + endif() |
| 39 | + set(BASE_OPTIONS FILE ${SHADER} INCLUDES ${BGFX_DIR}/src ${TYPE}) |
49 | 40 |
|
50 |
| -macro(asset FILE VAR) |
51 |
| - list(APPEND ASSET_FILES ${FILE} ${VAR}) |
52 |
| -endmacro() |
| 41 | + # glsl |
| 42 | + set(OPTIONS ${BASE_OPTIONS} OUTPUT ${ASSET_BINARY_DIR}/glsl/${SHADER_NAME}.bin LINUX PROFILE 120) |
| 43 | + shaderc_parse(OUT ${OPTIONS}) |
| 44 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
| 45 | + list(APPEND ASSET_FILES ${ASSET_BINARY_DIR}/glsl/${SHADER_NAME}.bin ${SHADER_NAME}_glsl) |
53 | 46 |
|
54 |
| -macro(add_asset_shaders ARG_TARGET) |
55 |
| - if(IGNEOUS_ASSET_GEN) |
56 |
| - cmake_parse_arguments(ARG "" "OUTPUT;HEADER" "SHADERS" ${ARGN}) |
| 47 | + # gles |
| 48 | + set(OPTIONS ${BASE_OPTIONS} OUTPUT ${ASSET_BINARY_DIR}/essl/${SHADER_NAME}.bin ANDROID PROFILE 120) |
| 49 | + shaderc_parse(OUT ${OPTIONS}) |
| 50 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
| 51 | + list(APPEND ASSET_FILES ${ASSET_BINARY_DIR}/essl/${SHADER_NAME}.bin ${SHADER_NAME}_essl) |
57 | 52 |
|
58 |
| - if(NOT TARGET ${ARG_TARGET}) |
59 |
| - message(FATAL_ERROR "add_shaders: You must provide a valid target.") |
60 |
| - elseif(NOT ARG_OUTPUT) |
61 |
| - message(FATAL_ERROR "add_shaders: You must provide an output directory.") |
62 |
| - elseif(NOT ARG_HEADER) |
63 |
| - message(FATAL_ERROR "add_shaders: You must provide a header path.") |
64 |
| - elseif(NOT ARG_SHADERS) |
65 |
| - message(FATAL_ERROR "add_shaders: You must provide shaders.") |
66 |
| - endif() |
| 53 | + # dx9 |
| 54 | + set(OPTIONS ${BASE_OPTIONS} OUTPUT ${ASSET_BINARY_DIR}/dx9/${SHADER_NAME}.bin WINDOWS PROFILE ${DX_TYPE}_3_0) |
| 55 | + shaderc_parse(OUT ${OPTIONS}) |
| 56 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
| 57 | + list(APPEND ASSET_FILES ${ASSET_BINARY_DIR}/dx9/${SHADER_NAME}.bin ${SHADER_NAME}_dx9) |
67 | 58 |
|
68 |
| - foreach(SHADER ${ARG_SHADERS}) |
69 |
| - get_filename_component(SHADER_NAME ${SHADER} NAME_WE) |
70 |
| - if(${SHADER_NAME} MATCHES "^vs_") |
71 |
| - asset_shader(${SHADER} ${SHADER_NAME} VERTEX) |
72 |
| - elseif(${SHADER_NAME} MATCHES "^fs_") |
73 |
| - asset_shader(${SHADER} ${SHADER_NAME} FRAGMENT) |
74 |
| - endif() |
75 |
| - endforeach() |
| 59 | + # dx11 |
| 60 | + set(OPTIONS ${BASE_OPTIONS} OUTPUT ${ASSET_BINARY_DIR}/dx11/${SHADER_NAME}.bin WINDOWS PROFILE ${DX_TYPE}_4_0) |
| 61 | + shaderc_parse(OUT ${OPTIONS}) |
| 62 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
| 63 | + list(APPEND ASSET_FILES ${ASSET_BINARY_DIR}/dx11/${SHADER_NAME}.bin ${SHADER_NAME}_dx11) |
76 | 64 |
|
77 |
| - if(NOT EXISTS ${ARG_HEADER}) |
78 |
| - file(WRITE ${ARG_HEADER}) |
79 |
| - endif() |
| 65 | + # metal |
| 66 | + set(OPTIONS ${BASE_OPTIONS} OUTPUT ${ASSET_BINARY_DIR}/metal/${SHADER_NAME}.bin OSX PROFILE metal) |
| 67 | + shaderc_parse(OUT ${OPTIONS}) |
| 68 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:shaderc>" ${OUT}) |
| 69 | + list(APPEND ASSET_FILES ${ASSET_BINARY_DIR}/metal/${SHADER_NAME}.bin ${SHADER_NAME}_metal) |
| 70 | + endforeach() |
| 71 | + |
| 72 | + if(NOT EXISTS ${ARG_HEADER}) |
| 73 | + file(WRITE ${ARG_HEADER}) |
| 74 | + endif() |
80 | 75 |
|
| 76 | + list(APPEND ASSET_COMMANDS COMMAND "$<TARGET_FILE:bin2c>" ${ARG_HEADER} ${ASSET_FILES}) |
| 77 | + #endwhile() |
| 78 | + |
81 | 79 | add_custom_target(
|
82 | 80 | ${ARG_TARGET}_assets ALL
|
83 | 81 | ${ASSET_COMMANDS}
|
84 |
| - COMMAND "$<TARGET_FILE:bin2c>" ${ARG_HEADER} ${ASSET_FILES} |
85 | 82 | DEPENDS shaderc
|
86 | 83 | DEPENDS bin2c
|
87 | 84 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
88 | 85 | )
|
89 |
| - |
90 |
| - set_target_properties(${ARG_TARGET}_assets PROPERTIES FOLDER "assets") |
| 86 | + set_target_properties(${ARG_TARGET}_assets PROPERTIES FOLDER "assets" ) |
91 | 87 | add_dependencies(${ARG_TARGET} ${ARG_TARGET}_assets)
|
92 | 88 | endif()
|
93 | 89 | endmacro()
|
94 | 90 |
|
95 |
| -add_executable(bin2c |
96 |
| - bin2c.cpp |
97 |
| -) |
| 91 | +if(IGNEOUS_ASSET_GEN) |
| 92 | + add_executable(bin2c |
| 93 | + bin2c.cpp |
| 94 | + strings.h |
| 95 | + ) |
98 | 96 |
|
99 |
| -set_target_properties(bin2c PROPERTIES FOLDER "assets") |
| 97 | + set_target_properties(bin2c PROPERTIES FOLDER "assets") |
| 98 | +endif() |
0 commit comments