diff --git a/README.md b/README.md index f83365ea..555ee212 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This section describes the release notes for the CUDA Samples on GitHub only. ### Prerequisites -Download and install the [CUDA Toolkit 12.6](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. +Download and install the [CUDA Toolkit 12.8](https://developer.nvidia.com/cuda-downloads) for your corresponding platform. For system requirements and installation instructions of cuda toolkit, please refer to the [Linux Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/), and the [Windows Installation Guide](http://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html). ### Getting the CUDA Samples @@ -170,7 +170,7 @@ These third-party dependencies are required by some CUDA samples. If available, FreeImage is an open source imaging library. FreeImage can usually be installed on Linux using your distribution's package manager system. FreeImage can also be downloaded from the FreeImage website. -To set up FreeImage on a Windows system, extract the FreeImage DLL distribution into the folder `../../../Common/FreeImage/Dist/x64` such that it contains the .h and .lib files. Copy the .dll file to root level `bin/win64/Debug` and `bin/win64/Release` folder. +To set up FreeImage on a Windows system, extract the FreeImage DLL distribution into the folder `../../../Common/FreeImage/Dist/x64` such that it contains the .h and .lib files. Copy the .dll file to the Release/ Debug/ execution folder or pass the FreeImage folder when cmake configuring with the `-DFREEIMAGE_INCLUDE_DIR` and `-DFREEIMAGE_LIBRARY` options. #### Message Passing Interface @@ -200,6 +200,11 @@ OpenGL ES is an embedded systems graphics library used for 2D and 3D rendering. Vulkan is a low-overhead, cross-platform 3D graphics and compute API. Vulkan targets high-performance realtime 3D graphics applications such as video games and interactive media across all platforms. On systems which support Vulkan, NVIDIA's Vulkan implementation is provided with the CUDA Driver. For building and running Vulkan applications one needs to install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/). +#### GLFW +GLFW is a lightweight, open-source library designed for managing OpenGL, OpenGL ES, and Vulkan contexts. It simplifies the process of creating and managing windows, handling user input (keyboard, mouse, and joystick), and working with multiple monitors in a cross-platform manner. + +To set up GLFW on a Windows system, Download the pre-built binaries from [GLFW website](https://www.glfw.org/download.html) and extract the zip file into the folder, pass the GLFW include header as `-DGLFW_INCLUDE_DIR` for cmake configuring and follow the Build_instructions.txt in the sample folder to set up the t. + #### OpenMP OpenMP is an API for multiprocessing programming. OpenMP can be installed using your Linux distribution's package manager system. It usually comes preinstalled with GCC. It can also be found at the [OpenMP website](http://openmp.org/). diff --git a/Samples/0_Introduction/simpleTexture3D/CMakeLists.txt b/Samples/0_Introduction/simpleTexture3D/CMakeLists.txt index 8d40d106..56d0fdb1 100644 --- a/Samples/0_Introduction/simpleTexture3D/CMakeLists.txt +++ b/Samples/0_Introduction/simpleTexture3D/CMakeLists.txt @@ -48,7 +48,7 @@ if(${OpenGL_FOUND}) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to output directory add_custom_command(TARGET simpleTexture3D POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET simpleTexture3D POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET simpleTexture3D POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/2_Concepts_and_Techniques/FunctionPointers/CMakeLists.txt b/Samples/2_Concepts_and_Techniques/FunctionPointers/CMakeLists.txt index 399de4c8..f14246d3 100644 --- a/Samples/2_Concepts_and_Techniques/FunctionPointers/CMakeLists.txt +++ b/Samples/2_Concepts_and_Techniques/FunctionPointers/CMakeLists.txt @@ -48,7 +48,7 @@ if(${OpenGL_FOUND}) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to output directory add_custom_command(TARGET FunctionPointers POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET FunctionPointers POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET FunctionPointers POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/2_Concepts_and_Techniques/boxFilter/CMakeLists.txt b/Samples/2_Concepts_and_Techniques/boxFilter/CMakeLists.txt index b9f38f63..13c34989 100644 --- a/Samples/2_Concepts_and_Techniques/boxFilter/CMakeLists.txt +++ b/Samples/2_Concepts_and_Techniques/boxFilter/CMakeLists.txt @@ -77,12 +77,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET boxFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET boxFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/2_Concepts_and_Techniques/imageDenoising/CMakeLists.txt b/Samples/2_Concepts_and_Techniques/imageDenoising/CMakeLists.txt index 111ea5b3..8239281c 100644 --- a/Samples/2_Concepts_and_Techniques/imageDenoising/CMakeLists.txt +++ b/Samples/2_Concepts_and_Techniques/imageDenoising/CMakeLists.txt @@ -49,7 +49,7 @@ if(${OpenGL_FOUND}) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET imageDenoising POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -64,12 +64,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET imageDenoising POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET imageDenoising POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/2_Concepts_and_Techniques/particles/CMakeLists.txt b/Samples/2_Concepts_and_Techniques/particles/CMakeLists.txt index 460bbdb9..12ee370b 100644 --- a/Samples/2_Concepts_and_Techniques/particles/CMakeLists.txt +++ b/Samples/2_Concepts_and_Techniques/particles/CMakeLists.txt @@ -63,12 +63,16 @@ target_compile_features(particles PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET particles POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET particles POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/3_CUDA_Features/bindlessTexture/CMakeLists.txt b/Samples/3_CUDA_Features/bindlessTexture/CMakeLists.txt index 1544a5c7..93ada969 100644 --- a/Samples/3_CUDA_Features/bindlessTexture/CMakeLists.txt +++ b/Samples/3_CUDA_Features/bindlessTexture/CMakeLists.txt @@ -63,12 +63,16 @@ target_compile_features(bindlessTexture PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET bindlessTexture POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET bindlessTexture POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/4_CUDA_Libraries/FilterBorderControlNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/FilterBorderControlNPP/CMakeLists.txt index 5d1a21bf..6641de51 100644 --- a/Samples/4_CUDA_Libraries/FilterBorderControlNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/FilterBorderControlNPP/CMakeLists.txt @@ -55,6 +55,14 @@ target_compile_features(FilterBorderControlNPP PRIVATE cxx_std_17 cuda_std_17) ${CMAKE_CURRENT_SOURCE_DIR}/data ${CMAKE_CURRENT_BINARY_DIR}/data ) + if(WIN32) + add_custom_command(TARGET FilterBorderControlNPP + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${FreeImage_LIBRARY}/../FreeImage.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ + ) + endif() else() message(STATUS "FreeImage not found - will not build sample 'FilterBorderControlNPP'") endif() diff --git a/Samples/4_CUDA_Libraries/boxFilterNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/boxFilterNPP/CMakeLists.txt index 3c5609d1..0c5f15e0 100644 --- a/Samples/4_CUDA_Libraries/boxFilterNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/boxFilterNPP/CMakeLists.txt @@ -49,9 +49,17 @@ target_compile_features(boxFilterNPP PRIVATE cxx_std_17 cuda_std_17) # Copy data files to output directory add_custom_command(TARGET boxFilterNPP POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/*.pgm + ${CMAKE_CURRENT_SOURCE_DIR}/teapot512.pgm ${CMAKE_CURRENT_BINARY_DIR} ) + if(WIN32) + add_custom_command(TARGET boxFilterNPP + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${FreeImage_LIBRARY}/../FreeImage.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ + ) + endif() else() message(STATUS "FreeImage not found - will not build sample 'boxFilterNPP'") endif() diff --git a/Samples/4_CUDA_Libraries/cannyEdgeDetectorNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/cannyEdgeDetectorNPP/CMakeLists.txt index f9faa254..7e22bac9 100644 --- a/Samples/4_CUDA_Libraries/cannyEdgeDetectorNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/cannyEdgeDetectorNPP/CMakeLists.txt @@ -49,9 +49,17 @@ target_compile_features(cannyEdgeDetectorNPP PRIVATE cxx_std_17 cuda_std_17) # Copy data files to output directory add_custom_command(TARGET cannyEdgeDetectorNPP POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/*.pgm + ${CMAKE_CURRENT_SOURCE_DIR}/teapot512.pgm ${CMAKE_CURRENT_BINARY_DIR} ) + if(WIN32) + add_custom_command(TARGET cannyEdgeDetectorNPP + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${FreeImage_LIBRARY}/../FreeImage.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ + ) + endif() else() message(STATUS "FreeImage not found - will not build sample 'cannyEdgeDetectorNPP'") endif() diff --git a/Samples/4_CUDA_Libraries/freeImageInteropNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/freeImageInteropNPP/CMakeLists.txt index 12929899..c3834cdb 100644 --- a/Samples/4_CUDA_Libraries/freeImageInteropNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/freeImageInteropNPP/CMakeLists.txt @@ -52,6 +52,14 @@ if(${FreeImage_FOUND}) ${CMAKE_CURRENT_SOURCE_DIR}/../../../Common/data/teapot512.pgm ${CMAKE_CURRENT_BINARY_DIR}/ ) + if(WIN32) + add_custom_command(TARGET freeImageInteropNPP + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${FreeImage_LIBRARY}/../FreeImage.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ + ) + endif() else() message(STATUS "FreeImage not found - will not build sample 'freeImageInteropNPP'") endif() diff --git a/Samples/4_CUDA_Libraries/histEqualizationNPP/CMakeLists.txt b/Samples/4_CUDA_Libraries/histEqualizationNPP/CMakeLists.txt index 4a2ab381..98a4b993 100644 --- a/Samples/4_CUDA_Libraries/histEqualizationNPP/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/histEqualizationNPP/CMakeLists.txt @@ -53,7 +53,14 @@ if(${FreeImage_FOUND}) ${CMAKE_CURRENT_SOURCE_DIR}/../../../Common/data/teapot512.pgm ${CMAKE_CURRENT_BINARY_DIR}/ ) - + if(WIN32) + add_custom_command(TARGET histEqualizationNPP + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${FreeImage_LIBRARY}/../FreeImage.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ + ) + endif() else() message(STATUS "FreeImage not found - will not build sample 'histEqualizationNPP'") endif() diff --git a/Samples/4_CUDA_Libraries/oceanFFT/CMakeLists.txt b/Samples/4_CUDA_Libraries/oceanFFT/CMakeLists.txt index 8922eef6..36314d6d 100644 --- a/Samples/4_CUDA_Libraries/oceanFFT/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/oceanFFT/CMakeLists.txt @@ -50,7 +50,7 @@ target_compile_features(oceanFFT PRIVATE cxx_std_17 cuda_std_17) CUDA::cufft ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET oceanFFT POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -65,12 +65,16 @@ target_compile_features(oceanFFT PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET oceanFFT POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET oceanFFT POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/4_CUDA_Libraries/randomFog/CMakeLists.txt b/Samples/4_CUDA_Libraries/randomFog/CMakeLists.txt index 924310b7..f2f7164c 100644 --- a/Samples/4_CUDA_Libraries/randomFog/CMakeLists.txt +++ b/Samples/4_CUDA_Libraries/randomFog/CMakeLists.txt @@ -50,7 +50,7 @@ if(${OpenGL_FOUND}) CUDA::cudart ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET randomFog POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -65,12 +65,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET randomFog POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET randomFog POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/Mandelbrot/CMakeLists.txt b/Samples/5_Domain_Specific/Mandelbrot/CMakeLists.txt index ac76aa74..5d55a936 100644 --- a/Samples/5_Domain_Specific/Mandelbrot/CMakeLists.txt +++ b/Samples/5_Domain_Specific/Mandelbrot/CMakeLists.txt @@ -48,7 +48,7 @@ target_compile_features(Mandelbrot PRIVATE cxx_std_17 cuda_std_17) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET Mandelbrot POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ target_compile_features(Mandelbrot PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET Mandelbrot POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR} ) add_custom_command(TARGET Mandelbrot POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR} ) endif() diff --git a/Samples/5_Domain_Specific/SobelFilter/CMakeLists.txt b/Samples/5_Domain_Specific/SobelFilter/CMakeLists.txt index c8bd8f21..a84e878e 100644 --- a/Samples/5_Domain_Specific/SobelFilter/CMakeLists.txt +++ b/Samples/5_Domain_Specific/SobelFilter/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET SobelFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET SobelFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/bicubicTexture/CMakeLists.txt b/Samples/5_Domain_Specific/bicubicTexture/CMakeLists.txt index 02303643..168f3844 100644 --- a/Samples/5_Domain_Specific/bicubicTexture/CMakeLists.txt +++ b/Samples/5_Domain_Specific/bicubicTexture/CMakeLists.txt @@ -48,7 +48,7 @@ if(${OpenGL_FOUND}) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET bicubicTexture POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET bicubicTexture POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET bicubicTexture POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/bilateralFilter/CMakeLists.txt b/Samples/5_Domain_Specific/bilateralFilter/CMakeLists.txt index a276023f..1c903010 100644 --- a/Samples/5_Domain_Specific/bilateralFilter/CMakeLists.txt +++ b/Samples/5_Domain_Specific/bilateralFilter/CMakeLists.txt @@ -48,7 +48,7 @@ target_compile_features(bilateralFilter PRIVATE cxx_std_17 cuda_std_17) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET bilateralFilter POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ target_compile_features(bilateralFilter PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET bilateralFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET bilateralFilter POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/fluidsGL/CMakeLists.txt b/Samples/5_Domain_Specific/fluidsGL/CMakeLists.txt index 2d49e536..1443ce3c 100644 --- a/Samples/5_Domain_Specific/fluidsGL/CMakeLists.txt +++ b/Samples/5_Domain_Specific/fluidsGL/CMakeLists.txt @@ -49,7 +49,7 @@ target_compile_features(fluidsGL PRIVATE cxx_std_17 cuda_std_17) CUDA::cufft ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET fluidsGL POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -64,12 +64,16 @@ target_compile_features(fluidsGL PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET fluidsGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET fluidsGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/marchingCubes/CMakeLists.txt b/Samples/5_Domain_Specific/marchingCubes/CMakeLists.txt index 5d36189a..adeedd7d 100644 --- a/Samples/5_Domain_Specific/marchingCubes/CMakeLists.txt +++ b/Samples/5_Domain_Specific/marchingCubes/CMakeLists.txt @@ -48,7 +48,7 @@ target_compile_features(marchingCubes PRIVATE cxx_std_17 cuda_std_17) ${GLUT_LIBRARIES} ) - # Copy clock_kernel.cu to the output directory + # Copy data files to the output directory add_custom_command(TARGET marchingCubes POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/data @@ -63,12 +63,16 @@ target_compile_features(marchingCubes PRIVATE cxx_std_17 cuda_std_17) add_custom_command(TARGET marchingCubes POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET marchingCubes POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/nbody/CMakeLists.txt b/Samples/5_Domain_Specific/nbody/CMakeLists.txt index a8b3e3ac..e4860df1 100644 --- a/Samples/5_Domain_Specific/nbody/CMakeLists.txt +++ b/Samples/5_Domain_Specific/nbody/CMakeLists.txt @@ -56,12 +56,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET nbody POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET nbody POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/postProcessGL/CMakeLists.txt b/Samples/5_Domain_Specific/postProcessGL/CMakeLists.txt index de3581fd..f96ae7c1 100644 --- a/Samples/5_Domain_Specific/postProcessGL/CMakeLists.txt +++ b/Samples/5_Domain_Specific/postProcessGL/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET postProcessGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET postProcessGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/recursiveGaussian/CMakeLists.txt b/Samples/5_Domain_Specific/recursiveGaussian/CMakeLists.txt index 9551be9c..b596cca6 100644 --- a/Samples/5_Domain_Specific/recursiveGaussian/CMakeLists.txt +++ b/Samples/5_Domain_Specific/recursiveGaussian/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET recursiveGaussian POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET recursiveGaussian POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/simpleGL/CMakeLists.txt b/Samples/5_Domain_Specific/simpleGL/CMakeLists.txt index 5a6e617f..0b032145 100644 --- a/Samples/5_Domain_Specific/simpleGL/CMakeLists.txt +++ b/Samples/5_Domain_Specific/simpleGL/CMakeLists.txt @@ -56,12 +56,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET simpleGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET simpleGL POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E + copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/simpleVulkan/CMakeLists.txt b/Samples/5_Domain_Specific/simpleVulkan/CMakeLists.txt index e9dc3f37..7e10f27a 100644 --- a/Samples/5_Domain_Specific/simpleVulkan/CMakeLists.txt +++ b/Samples/5_Domain_Specific/simpleVulkan/CMakeLists.txt @@ -26,6 +26,14 @@ include(CheckIncludeFile) # Check for the GLFW/glfw3.h header check_include_file("GLFW/glfw3.h" HAVE_GLFW3_H) +# Find GLFW/glfw3.h header for Windows +if(WIN32) + find_file(GLFW3_H "glfw3.h" PATH "$ENV{GLFW_INCLUDES_DIR}/GLFW") + if(GLFW3_H) + set(HAVE_GLFW3_H 1) + endif() +endif() + # Source file if(${Vulkan_FOUND}) if(${OPENGL_FOUND}) @@ -44,11 +52,19 @@ if(${Vulkan_FOUND}) ${CUDAToolkit_INCLUDE_DIRS} ) - target_link_libraries(simpleVulkan - ${Vulkan_LIBRARIES} - OpenGL::GL - glfw - ) + if(WIN32) + target_link_libraries(simpleVulkan + ${Vulkan_LIBRARIES} + OpenGL::GL + glfw3.dll + ) + else() + target_link_libraries(simpleVulkan + ${Vulkan_LIBRARIES} + OpenGL::GL + glfw + ) + endif() add_custom_command(TARGET simpleVulkan POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different @@ -62,7 +78,7 @@ if(${Vulkan_FOUND}) message(STATUS "glfw3 not found - will not build sample 'simpleVulkan'") endif() else() - message(STATUS "GLFW not found - will not build sample 'simpleVulkan'") + message(STATUS "OpenGL not found - will not build sample 'simpleVulkan'") endif() else() message(STATUS "Vulkan not found - will not build sample 'simpleVulkan'") diff --git a/Samples/5_Domain_Specific/simpleVulkanMMAP/CMakeLists.txt b/Samples/5_Domain_Specific/simpleVulkanMMAP/CMakeLists.txt index 211fc1ec..9e37812c 100644 --- a/Samples/5_Domain_Specific/simpleVulkanMMAP/CMakeLists.txt +++ b/Samples/5_Domain_Specific/simpleVulkanMMAP/CMakeLists.txt @@ -26,6 +26,14 @@ include(CheckIncludeFile) # Check for the GLFW/glfw3.h header check_include_file("GLFW/glfw3.h" HAVE_GLFW3_H) +# Find GLFW/glfw3.h header for Windows +if(WIN32) + find_file(GLFW3_H "glfw3.h" PATH "$ENV{GLFW_INCLUDES_DIR}/GLFW") + if(GLFW3_H) + set(HAVE_GLFW3_H 1) + endif() +endif() + # Source file if(${Vulkan_FOUND}) if(${OPENGL_FOUND}) @@ -44,12 +52,21 @@ if(${Vulkan_FOUND}) ${CUDAToolkit_INCLUDE_DIRS} ) - target_link_libraries(simpleVulkanMMAP - ${Vulkan_LIBRARIES} - OpenGL::GL - CUDA::cuda_driver - glfw - ) + if(WIN32) + target_link_libraries(simpleVulkanMMAP + ${Vulkan_LIBRARIES} + OpenGL::GL + CUDA::cuda_driver + glfw3.dll + ) + else() + target_link_libraries(simpleVulkanMMAP + ${Vulkan_LIBRARIES} + OpenGL::GL + CUDA::cuda_driver + glfw + ) + endif() add_custom_command(TARGET simpleVulkanMMAP POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different diff --git a/Samples/5_Domain_Specific/smokeParticles/CMakeLists.txt b/Samples/5_Domain_Specific/smokeParticles/CMakeLists.txt index bf649e58..dc90c5a4 100644 --- a/Samples/5_Domain_Specific/smokeParticles/CMakeLists.txt +++ b/Samples/5_Domain_Specific/smokeParticles/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET smokeParticles POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET smokeParticles POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR} ) endif() diff --git a/Samples/5_Domain_Specific/volumeFiltering/CMakeLists.txt b/Samples/5_Domain_Specific/volumeFiltering/CMakeLists.txt index 7f58800d..eacc5c8e 100644 --- a/Samples/5_Domain_Specific/volumeFiltering/CMakeLists.txt +++ b/Samples/5_Domain_Specific/volumeFiltering/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET volumeFiltering POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET volumeFiltering POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/volumeRender/CMakeLists.txt b/Samples/5_Domain_Specific/volumeRender/CMakeLists.txt index f3f36cea..d8a05ca8 100644 --- a/Samples/5_Domain_Specific/volumeRender/CMakeLists.txt +++ b/Samples/5_Domain_Specific/volumeRender/CMakeLists.txt @@ -62,12 +62,16 @@ if(${OpenGL_FOUND}) add_custom_command(TARGET volumeRender POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/freeglut.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) add_custom_command(TARGET volumeRender POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/../../../bin/win64/$/glew64.dll + ${CMAKE_CURRENT_BINARY_DIR}/$ ) endif() diff --git a/Samples/5_Domain_Specific/vulkanImageCUDA/CMakeLists.txt b/Samples/5_Domain_Specific/vulkanImageCUDA/CMakeLists.txt index 751a96df..7e5bfc59 100644 --- a/Samples/5_Domain_Specific/vulkanImageCUDA/CMakeLists.txt +++ b/Samples/5_Domain_Specific/vulkanImageCUDA/CMakeLists.txt @@ -26,6 +26,14 @@ include(CheckIncludeFile) # Check for the GLFW/glfw3.h header check_include_file("GLFW/glfw3.h" HAVE_GLFW3_H) +# Find GLFW/glfw3.h header for Windows +if(WIN32) + find_file(GLFW3_H "glfw3.h" PATH "$ENV{GLFW_INCLUDES_DIR}/GLFW") + if(GLFW3_H) + set(HAVE_GLFW3_H 1) + endif() +endif() + # Source file if(${Vulkan_FOUND}) if(${OPENGL_FOUND}) @@ -44,11 +52,19 @@ if(${Vulkan_FOUND}) ${CUDAToolkit_INCLUDE_DIRS} ) - target_link_libraries(vulkanImageCUDA - ${Vulkan_LIBRARIES} - OpenGL::GL - glfw - ) + if(WIN32) + target_link_libraries(vulkanImageCUDA + ${Vulkan_LIBRARIES} + OpenGL::GL + glfw3.dll + ) + else() + target_link_libraries(vulkanImageCUDA + ${Vulkan_LIBRARIES} + OpenGL::GL + glfw + ) + endif() add_custom_command(TARGET vulkanImageCUDA POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different