mirror of
https://github.com/bkaradzic/bgfx.cmake.git
synced 2026-02-20 06:03:13 +01:00
bgfx: Move geometryc and add cmake macro
This commit is contained in:
@@ -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()
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user