mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-05-05 20:48:22 +08:00
OpenGL not mandatory
This commit is contained in:
@@ -1,24 +1,28 @@
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(GLUT)
|
||||
if(NOT GLUT_FOUND)
|
||||
message("FreeGLUT library will be downloaded and built.")
|
||||
include(ExternalProject)
|
||||
# Include GLFW
|
||||
ExternalProject_Add (
|
||||
FREEGLUT
|
||||
URL https://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/freeglut-3.2.1.tar.gz
|
||||
URL_MD5 cd5c670c1086358598a6d4a9d166949d
|
||||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
-DFREEGLUT_BUILD_SHARED_LIBS=ON
|
||||
-DFREEGLUT_BUILD_STATIC_LIBS=ON
|
||||
-DFREEGLUT_BUILD_DEMOS=OFF
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freeglut
|
||||
BUILD_IN_SOURCE ON
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
ExternalProject_Get_Property(FREEGLUT SOURCE_DIR)
|
||||
set(FREEGLUT_DIR ${SOURCE_DIR})
|
||||
endif(NOT GLUT_FOUND)
|
||||
find_package(OpenGL)
|
||||
if(OpenGL_FOUND)
|
||||
find_package(GLUT)
|
||||
if(NOT GLUT_FOUND)
|
||||
message("FreeGLUT library will be downloaded and built.")
|
||||
include(ExternalProject)
|
||||
# Include GLFW
|
||||
ExternalProject_Add (
|
||||
FREEGLUT
|
||||
URL https://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/freeglut-3.2.1.tar.gz
|
||||
URL_MD5 cd5c670c1086358598a6d4a9d166949d
|
||||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
-DFREEGLUT_BUILD_SHARED_LIBS=ON
|
||||
-DFREEGLUT_BUILD_STATIC_LIBS=ON
|
||||
-DFREEGLUT_BUILD_DEMOS=OFF
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freeglut
|
||||
BUILD_IN_SOURCE ON
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
ExternalProject_Get_Property(FREEGLUT SOURCE_DIR)
|
||||
set(FREEGLUT_DIR ${SOURCE_DIR})
|
||||
endif(NOT GLUT_FOUND)
|
||||
else(OpenGL_FOUND)
|
||||
message(WARNING "OPENGL not found. Will not build graphical outputs.")
|
||||
endif(OpenGL_FOUND)
|
||||
|
||||
# If necessary, use the RELATIVE flag, otherwise each source file may be listed
|
||||
# with full pathname. RELATIVE may makes it easier to extract an executable name
|
||||
@@ -36,15 +40,19 @@ foreach( testsourcefile ${APP_SOURCES} )
|
||||
target_link_libraries(${testname} PRIVATE OpenMP::OpenMP_CXX)
|
||||
endif()
|
||||
|
||||
if(NOT GLUT_FOUND)
|
||||
add_dependencies(${testname} FREEGLUT)
|
||||
target_include_directories(${testname} PRIVATE ${FREEGLUT_DIR}/include)
|
||||
target_link_directories(${testname} PRIVATE ${FREEGLUT_DIR}/lib)
|
||||
target_link_libraries(${testname} PRIVATE freeglut OpenGL::GL)
|
||||
else()
|
||||
target_include_directories(${testname} PRIVATE ${GLUT_INCLUDE_DIRS})
|
||||
target_link_libraries(${testname} PRIVATE OpenGL::GL ${GLUT_LIBRARIES})
|
||||
endif()
|
||||
if(OpenGL_FOUND)
|
||||
if(NOT GLUT_FOUND)
|
||||
add_dependencies(${testname} FREEGLUT)
|
||||
target_include_directories(${testname} PRIVATE ${FREEGLUT_DIR}/include)
|
||||
target_link_directories(${testname} PRIVATE ${FREEGLUT_DIR}/lib)
|
||||
target_link_libraries(${testname} PRIVATE freeglut OpenGL::GL)
|
||||
else()
|
||||
target_include_directories(${testname} PRIVATE ${GLUT_INCLUDE_DIRS})
|
||||
target_link_libraries(${testname} PRIVATE OpenGL::GL ${GLUT_LIBRARIES})
|
||||
endif()
|
||||
else(OpenGL_FOUND)
|
||||
target_compile_options(${testname} NO_OPENGL)
|
||||
endif(OpenGL_FOUND)
|
||||
|
||||
if(APPLE)
|
||||
target_compile_options(${testname} PRIVATE -Wno-deprecated)
|
||||
|
||||
@@ -112,6 +112,7 @@ void test() {
|
||||
fp.close();
|
||||
}
|
||||
|
||||
#ifndef NO_OPENGL
|
||||
/** A wrapper that is not available in all GLUT implementations.
|
||||
*/
|
||||
static inline void glutBitmapString(void *font, char *message) {
|
||||
@@ -211,13 +212,14 @@ void timer_cb(int t) {
|
||||
glutTimerFunc(25, timer_cb, 0);
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
#endif
|
||||
} // namespace spirograph
|
||||
|
||||
/** Main function */
|
||||
int main(int argc, char **argv) {
|
||||
spirograph::test();
|
||||
|
||||
#ifndef NO_OPENGL
|
||||
glutInit(&argc, argv);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
glutCreateWindow("Spirograph");
|
||||
@@ -226,6 +228,7 @@ int main(int argc, char **argv) {
|
||||
glutTimerFunc(25, spirograph::timer_cb, 0);
|
||||
glutDisplayFunc(spirograph::test2);
|
||||
glutMainLoop();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user