bgfx: Move geometryc and add cmake macro

This commit is contained in:
Sandy Carter
2023-01-14 22:01:46 -05:00
committed by Sandy
parent eb5a7d5f07
commit 8d130b923d
6 changed files with 177 additions and 26 deletions

View File

@@ -1,19 +1,24 @@
# bgfx.cmake - bgfx building in cmake
# Written in 2017 by Joshua Brookover <joshua.al.brookover@gmail.com>
#
# To the extent possible under law, the author(s) have dedicated all copyright
# and related and neighboring rights to this software to the public domain
# worldwide. This software is distributed without any warranty.
#
# You should have received a copy of the CC0 Public Domain Dedication along with
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
if(TARGET meshoptimizer)
return()
# Ensure the directory exists
if(NOT IS_DIRECTORY ${BGFX_DIR})
message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}")
return()
endif()
file(GLOB MESHOPTIMIZER_SOURCES ${BGFX_DIR}/3rdparty/meshoptimizer/src/*.cpp ${BGFX_DIR}/3rdparty/meshoptimizer/src/*.h)
add_library(meshoptimizer STATIC ${MESHOPTIMIZER_SOURCES})
target_include_directories(meshoptimizer PUBLIC ${BGFX_DIR}/3rdparty)
set_target_properties(meshoptimizer PROPERTIES FOLDER "bgfx/3rdparty" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-")
if(NOT MESHOPTIMIZER_LIBRARIES)
file(GLOB #
MESHOPTIMIZER_SOURCES #
${BGFX_DIR}/3rdparty/meshoptimizer/src/*.cpp #
${BGFX_DIR}/3rdparty/meshoptimizer/src/*.h #
)
set(MESHOPTIMIZER_INCLUDE_DIR ${BGFX_DIR}/3rdparty)
endif()

View File

@@ -9,10 +9,12 @@
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
include(bgfx.cmake)
include(3rdparty/meshoptimizer.cmake)
if(BGFX_BUILD_TOOLS_TEXTURE)
include(texturev.cmake)
endif()
if(BGFX_BUILD_TOOLS_GEOMETRY)
include(geometryc.cmake)
include(geometryv.cmake)
endif()

View File

@@ -8,15 +8,25 @@
# You should have received a copy of the CC0 Public Domain Dedication along with
# this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
include(CMakeParseArguments)
add_executable(geometryc)
include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/meshoptimizer.cmake)
# Grab the texturec source files
file(
GLOB_RECURSE
GEOMETRYC_SOURCES #
${BGFX_DIR}/tools/geometryc/*.cpp #
${BGFX_DIR}/tools/geometryc/*.h #
#
${MESHOPTIMIZER_SOURCES}
)
add_executable(geometryc ${BGFX_DIR}/tools/geometryc/geometryc.cpp)
target_sources(geometryc PRIVATE ${GEOMETRYC_SOURCES})
target_include_directories(geometryc PRIVATE ${MESHOPTIMIZER_INCLUDE_DIR})
target_link_libraries(geometryc PRIVATE bx bgfx-vertexlayout ${MESHOPTIMIZER_LIBRARIES})
target_compile_definitions(geometryc PRIVATE "-D_CRT_SECURE_NO_WARNINGS")
set_target_properties(geometryc PROPERTIES FOLDER "bgfx/tools")
target_link_libraries(geometryc bx bgfx-vertexlayout meshoptimizer)
if(BGFX_CUSTOM_TARGETS)
if(BGFX_BUILD_TOOLS AND BGFX_CUSTOM_TARGETS)
add_dependencies(tools geometryc)
endif()

View File

@@ -80,8 +80,11 @@ endfunction()
# )
function(_bgfx_texturec_parse ARG_OUT)
cmake_parse_arguments(
ARG "MIPS;NORMALMAP;EQUIRECT;STRIP;SDF;IQA;PMA;LINEAR" "FILE;OUTPUT;FORMAT;QUALITY;MIPSKIP;REF;MAX;RADIANCE;AS"
"" ${ARGN}
ARG #
"MIPS;NORMALMAP;EQUIRECT;STRIP;SDF;IQA;PMA;LINEAR" #
"FILE;OUTPUT;FORMAT;QUALITY;MIPSKIP;REF;MAX;RADIANCE;AS" #
"" #
${ARGN} #
)
set(CLI "")
@@ -195,8 +198,11 @@ endfunction()
#
function(bgfx_compile_texture)
cmake_parse_arguments(
ARG "MIPS;NORMALMAP;EQUIRECT;STRIP;SDF;IQA;PMA;LINEAR" "FILE;OUTPUT;FORMAT;QUALITY;MIPSKIP;REF;MAX;RADIANCE;AS"
"" ${ARGN}
ARG #
"MIPS;NORMALMAP;EQUIRECT;STRIP;SDF;IQA;PMA;LINEAR" #
"FILE;OUTPUT;FORMAT;QUALITY;MIPSKIP;REF;MAX;RADIANCE;AS" #
"" #
${ARGN} #
)
_bgfx_texturec_parse(CLI ${ARGV})
add_custom_command(
@@ -206,6 +212,139 @@ function(bgfx_compile_texture)
)
endfunction()
# _bgfx_geometryc_parse(
# FILE filename
# OUTPUT filename
# [SCALE scale]
# [CCW]
# [FLIPV]
# [OBB num steps]
# [PACKNORMAL 0|1]
# [PACKUV 0|1]
# [TANGENT]
# [BARYCENTRIC]
# [COMPRESS]
# [LH_UP_Y|LH_UP_Z|RH_UP_Y|RH_UP_Z]
# )
function(_bgfx_geometryc_parse ARG_OUT)
cmake_parse_arguments(
ARG #
"CCW;FLIPV;TANGENT;BARYCENTRIC;COMPRESS;LH_UP_Y;LH_UP_Z;RH_UP_Y;RH_UP_Z" #
"FILE;OUTPUT;SCALE;OBB;PACKNORMAL;PACKUV" #
"" #
${ARGN} #
)
set(CLI "")
# -f
if(ARG_FILE)
list(APPEND CLI "-f" "${ARG_FILE}")
endif()
# -o
if(ARG_OUTPUT)
list(APPEND CLI "-o" "${ARG_OUTPUT}")
endif()
# -s
if(ARG_SCALE)
list(APPEND CLI "-s" "${ARG_SCALE}")
endif()
# --cw
if(ARG_QUALITY)
list(APPEND CLI "--cw")
endif()
# --flipv
if(ARG_FLIPV)
list(APPEND CLI "--flipv")
endif()
# --obb
if(ARG_OBB)
list(APPEND CLI "--mipskip" "${ARG_OBB}")
endif()
# --packnormal
if(ARG_PACKNORMAL)
list(APPEND CLI "--packnormal ${ARG_PACKNORMAL}")
endif()
# --packuv
if(ARG_PACKUV)
list(APPEND CLI "--packuv" ${ARG_PACKUV})
endif()
# --tangent
if(ARG_TANGENT)
list(APPEND CLI "--tangent")
endif()
# --barycentric
if(ARG_BARYCENTRIC)
list(APPEND CLI "--barycentric")
endif()
# --compress
if(ARG_REF)
list(APPEND CLI "--compress" "${ARG_COMPRESS}")
endif()
# --lh-up+y
if(ARG_LH_UP_Y)
list(APPEND CLI "--lh-up+y")
endif()
# --lh-up+z
if(ARG_LH_UP_Z)
list(APPEND CLI "--lh-up+z")
endif()
# --rh-up+y
if(ARG_RH_UP_Y)
list(APPEND CLI "--rh-up+y")
endif()
# --rh-up+z
if(ARG_RH_UP_Z)
list(APPEND CLI "--rh-up+z")
endif()
set(${ARG_OUT} ${CLI} PARENT_SCOPE)
endfunction()
# bgfx_compile_geometry(
# FILE filename
# OUTPUT filename
# [SCALE scale]
# [CCW]
# [FLIPV]
# [OBB num steps]
# [PACKNORMAL 0|1]
# [PACKUV 0|1]
# [TANGENT]
# [BARYCENTRIC]
# [COMPRESS]
# [LH_UP_Y|LH_UP_Z|RH_UP_Y|RH_UP_Z]
# )
#
function(bgfx_compile_geometry)
cmake_parse_arguments(
ARG #
"CCW;FLIPV;TANGENT;BARYCENTRIC;COMPRESS;LH_UP_Y;LH_UP_Z;RH_UP_Y;RH_UP_Z" #
"FILE;OUTPUT;SCALE;OBB;PACKNORMAL;PACKUV" #
"" #
${ARGN} #
)
_bgfx_geometryc_parse(CLI ${ARGV})
add_custom_command(
OUTPUT ${ARG_OUTPUT} #
COMMAND bgfx::geometryc ${CLI} #
MAIN_DEPENDENCY ${ARG_INPUT} #
)
endfunction()
# _bgfx_shaderc_parse(
# FILE filename
# OUTPUT filename

View File

@@ -13,7 +13,6 @@ include(CMakeParseArguments)
include(${CMAKE_CURRENT_LIST_DIR}/util/ConfigureDebugging.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/3rdparty/dear-imgui.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/3rdparty/meshoptimizer.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/bgfxToolUtils.cmake)
function(add_bgfx_shader FILE FOLDER)
@@ -144,9 +143,9 @@ function(add_example ARG_NAME)
# Add target
if(ARG_COMMON)
add_library(example-${ARG_NAME} STATIC EXCLUDE_FROM_ALL ${SOURCES})
target_include_directories(example-${ARG_NAME} PUBLIC ${BGFX_DIR}/examples/common)
target_link_libraries(example-${ARG_NAME} PUBLIC bgfx bx bimg bimg_decode dear-imgui meshoptimizer)
add_library(example-${ARG_NAME} STATIC EXCLUDE_FROM_ALL ${SOURCES} ${MESHOPTIMIZER_SOURCES})
target_include_directories(example-${ARG_NAME} PUBLIC ${BGFX_DIR}/examples/common ${MESHOPTIMIZER_INCLUDE_DIR})
target_link_libraries(example-${ARG_NAME} PUBLIC bgfx bx bimg bimg_decode dear-imgui ${MESHOPTIMIZER_LIBRARIES})
if(BGFX_WITH_GLFW)
find_package(glfw3 REQUIRED)
target_link_libraries(example-${ARG_NAME} PUBLIC glfw)

View File

@@ -11,7 +11,3 @@
if(BGFX_BUILD_TOOLS_SHADER)
include(${CMAKE_CURRENT_LIST_DIR}/tools/shaderc.cmake)
endif()
if(BGFX_BUILD_TOOLS_GEOMETRY)
include(${CMAKE_CURRENT_LIST_DIR}/tools/geometryc.cmake)
endif()