#################################################################################
#   The MIT License
#   
#   Tempest Renderer
#   Copyright (c) 2017 Zdravko Velinov
#   
#   Permission is hereby granted, free of charge, to any person obtaining a copy
#   of this software and associated documentation files (the "Software"), to deal
#   in the Software without restriction, including without limitation the rights
#   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#   copies of the Software, and to permit persons to whom the Software is
#   furnished to do so, subject to the following conditions:
#
#   The above copyright notice and this permission notice shall be included in
#   all copies or substantial portions of the Software.
#
#   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#   THE SOFTWARE.
##################################################################################

IF(NOT MINGW_CROSS)
	SET(PROCESS_LIGHT_PROBES
		ennis.exr)

	FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/light-probes)

	FOREACH(LIGHT_PROBE ${PROCESS_LIGHT_PROBES})
		GET_FILENAME_COMPONENT(LIGHT_PROBE_NAME ${LIGHT_PROBE} NAME_WE)

		SET(LIGHT_PROBE_ORIGINAL ${TEMPEST_TEST_ASSETS_DIR}/light-probes/${LIGHT_PROBE})

		SET(CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-cube.dds)
		SET(PRT_CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-GGX-PRT.dds)
		SET(IRRADIANCE_CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-irradiance.dds)

		SET(LIGHT_PROBE_DEPENDS ${LIGHT_PROBE_DEPENDS} ${CUBEMAP_NAME} ${PRT_CUBEMAP_NAME} ${IRRADIANCE_CUBEMAP_NAME})

		ADD_CUSTOM_COMMAND(OUTPUT ${CUBEMAP_NAME}
						   COMMAND $<TARGET_FILE:env-map-tool> -e cubemap -D 512 ${LIGHT_PROBE_ORIGINAL} -o ${CUBEMAP_NAME}
						   DEPENDS ${LIGHT_PROBE_ORIGINAL}
						   COMMENT "Building Cube Map: ${CUBEMAP_NAME}")

		ADD_CUSTOM_COMMAND(OUTPUT ${PRT_CUBEMAP_NAME}
						   COMMAND $<TARGET_FILE:env-map-tool> -e precompute -p GGX -D 512 ${LIGHT_PROBE_ORIGINAL} -o ${PRT_CUBEMAP_NAME}
						   DEPENDS ${CUBEMAP_NAME}
						   COMMENT "Building PRT Cube Map: ${PRT_CUBEMAP_NAME}")

		ADD_CUSTOM_COMMAND(OUTPUT ${IRRADIANCE_CUBEMAP_NAME}
						   COMMAND $<TARGET_FILE:env-map-tool> -e precompute -p Irradiance -D 512 ${LIGHT_PROBE_ORIGINAL} -o ${IRRADIANCE_CUBEMAP_NAME}
						   DEPENDS ${CUBEMAP_NAME}
						   COMMENT "Building Irradiance Cube Map: ${IRRADIANCE_CUBEMAP_NAME}")
	ENDFOREACH()

	SET(GGXLUT_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/GGXLUT.dds)

	ADD_CUSTOM_COMMAND(OUTPUT ${GGXLUT_NAME}
						COMMAND $<TARGET_FILE:env-map-tool> -e precompute -p GGXLUT -D 128 -o ${GGXLUT_NAME}
						DEPENDS ${CUBEMAP_NAME}
						COMMENT "Building GGX LUT: ${GGXLUT_NAME}")

	SET(LIGHT_PROBE_DEPENDS ${LIGHT_PROBE_DEPENDS} ${GGXLUT_NAME})

	ADD_CUSTOM_TARGET(BuildAssets DEPENDS ${LIGHT_PROBE_DEPENDS}
					  COMMENT "Building Assets")

	ADD_CUSTOM_COMMAND(TARGET BuildAssets POST_BUILD
				       COMMAND ${CMAKE_COMMAND} -E copy_if_different ${GGXLUT_NAME} ${CMAKE_BINARY_DIR}/$<CONFIG>/share/tempest/assets/)

	FOREACH(LIGHT_PROBE ${PROCESS_LIGHT_PROBES})
		GET_FILENAME_COMPONENT(LIGHT_PROBE_NAME ${LIGHT_PROBE} NAME_WE)

		SET(CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-cube.dds)
		SET(PRT_CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-GGX-PRT.dds)
		SET(IRRADIANCE_CUBEMAP_NAME ${CMAKE_CURRENT_BINARY_DIR}/light-probes/${LIGHT_PROBE_NAME}-irradiance.dds)

		ADD_CUSTOM_COMMAND(TARGET BuildAssets POST_BUILD
						   COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CUBEMAP_NAME} ${CMAKE_BINARY_DIR}/$<CONFIG>/share/tempest/assets/
						   COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PRT_CUBEMAP_NAME} ${CMAKE_BINARY_DIR}/$<CONFIG>/share/tempest/assets/
						   COMMAND ${CMAKE_COMMAND} -E copy_if_different ${IRRADIANCE_CUBEMAP_NAME} ${CMAKE_BINARY_DIR}/$<CONFIG>/share/tempest/assets/)
	ENDFOREACH()

	ADD_DEPENDENCIES(BuildAssets env-map-tool)
ENDIF()