forked from TheAlgorithms/C
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[enhancement] New Graphics implementation with algorithm for spirogra…
…ph (TheAlgorithms#557) * skeleton of spirograph * add graphics to cmake * updating DIRECTORY.md * added cmake to graphics folder * add stub test function * working program * set pre-processor macro if GLUT is available * use snprintf details: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm * conditional include for mac * corrected conditional include for mac * fix cmake for MACOS * OpenGL animation if available, else plot to CSV * MacOS does not provide glutBitmapString function * formatting source-code for 8d570b4 * fix parameter * try caps include path GL * provide custom glutBitmapString cuntion * add glut library to gitpod docker * enable VNC in gitpod * better documentation and cmake configuration * enable keyboard inputs to pause and change parameters * fix lgtm alerts * implementation similar to one in C++ repo * fix compilation errors on MSVC Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
- Loading branch information
Showing
5 changed files
with
423 additions
and
34 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,11 @@ | ||
FROM gitpod/workspace-full | ||
FROM gitpod/workspace-full-vnc | ||
|
||
RUN sudo apt-get update \ | ||
&& sudo apt-get install -y \ | ||
doxygen \ | ||
graphviz \ | ||
ninja-build \ | ||
&& pip install cpplint \ | ||
&& sudo rm -rf /var/lib/apt/lists/* | ||
&& sudo apt-get install -y \ | ||
doxygen \ | ||
graphviz \ | ||
ninja-build \ | ||
freeglut3 \ | ||
freeglut3-dev \ | ||
&& pip install cpplint \ | ||
&& sudo rm -rf /var/lib/apt/lists/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
find_package(OpenGL) | ||
if(OpenGL_FOUND) | ||
find_package(GLUT) | ||
if(NOT GLUT_FOUND) | ||
message("FreeGLUT library will be downloaded and built.") | ||
include(ExternalProject) | ||
ExternalProject_Add ( | ||
FREEGLUT-PRJ | ||
URL https://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/freeglut-3.2.1.tar.gz | ||
URL_MD5 cd5c670c1086358598a6d4a9d166949d | ||
CMAKE_GENERATOR ${CMAKE_GENERATOR} --config Release | ||
CMAKE_GENERATOR_TOOLSET ${CMAKE_GENERATOR_TOOLSET} | ||
CMAKE_GENERATOR_PLATFORM ${CMAKE_GENERATOR_PLATFORM} | ||
CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release | ||
-DFREEGLUT_BUILD_SHARED_LIBS=OFF | ||
-DFREEGLUT_BUILD_STATIC_LIBS=ON | ||
-DFREEGLUT_BUILD_DEMOS=OFF | ||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freeglut | ||
# BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/freeglut-build | ||
# BUILD_IN_SOURCE ON | ||
# UPDATE_COMMAND "" | ||
INSTALL_COMMAND "" | ||
# CONFIGURE_COMMAND "" | ||
# BUILD_COMMAND "" | ||
) | ||
ExternalProject_Get_Property(FREEGLUT-PRJ SOURCE_DIR) | ||
ExternalProject_Get_Property(FREEGLUT-PRJ BINARY_DIR) | ||
set(FREEGLUT_BIN_DIR ${BINARY_DIR}) | ||
set(FREEGLUT_SRC_DIR ${SOURCE_DIR}) | ||
# add_library(libfreeglut STATIC IMPORTED) | ||
# set_target_properties(libfreeglut PROPERTIES IMPORTED_LOCATION ${FREEGLUT_BIN_DIR}) | ||
|
||
# set(FREEGLUT_BUILD_DEMOS OFF CACHE BOOL "") | ||
# set(FREEGLUT_BUILD_SHARED_LIBS OFF CACHE BOOL "") | ||
# set(FREEGLUT_BUILD_STATIC_LIBS ON CACHE BOOL "") | ||
# add_subdirectory(${FREEGLUT_SRC_DIR} ${FREEGLUT_BIN_DIR} EXCLUDE_FROM_ALL) | ||
# add_subdirectory(${BINARY_DIR}) | ||
# find_package(FreeGLUT) | ||
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 | ||
# automatically. | ||
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c ) | ||
# file( GLOB APP_SOURCES ${CMAKE_SOURCE_DIR}/*.c ) | ||
# AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} APP_SOURCES) | ||
foreach( testsourcefile ${APP_SOURCES} ) | ||
# I used a simple string replace, to cut off .cpp. | ||
string( REPLACE ".c" "" testname ${testsourcefile} ) | ||
add_executable( ${testname} ${testsourcefile} ) | ||
|
||
# set_target_properties(${testname} PROPERTIES LINKER_LANGUAGE C) | ||
|
||
if(OpenMP_C_FOUND) | ||
target_link_libraries(${testname} PRIVATE OpenMP::OpenMP_C) | ||
endif() | ||
|
||
if(MATH_LIBRARY) | ||
target_link_libraries(${testname} PRIVATE ${MATH_LIBRARY}) | ||
endif() | ||
|
||
if(OpenGL_FOUND) | ||
if(NOT GLUT_FOUND) | ||
add_dependencies(${testname} FREEGLUT-PRJ) | ||
target_compile_definitions(${testname} PRIVATE FREEGLUT_STATIC) | ||
target_include_directories(${testname} PRIVATE ${FREEGLUT_SRC_DIR}/include) | ||
target_link_directories(${testname} PRIVATE ${FREEGLUT_BIN_DIR}/lib) | ||
target_link_libraries(${testname} PRIVATE OpenGL::GL) | ||
target_link_libraries(${testname} INTERFACE FREEGLUT-PRJ) | ||
# target_include_directories(${testname} PRIVATE ${FREEGLUT_INCLUDE_DIRS}) | ||
# target_link_libraries(${testname} INTERFACE freeglut_static) | ||
else() | ||
target_include_directories(${testname} PRIVATE ${GLUT_INCLUDE_DIRS}) | ||
target_link_libraries(${testname} PRIVATE OpenGL::GL ${GLUT_LIBRARIES}) | ||
endif() | ||
target_compile_definitions(${testname} PRIVATE USE_GLUT) | ||
endif(OpenGL_FOUND) | ||
|
||
if(APPLE) | ||
target_compile_options(${testname} PRIVATE -Wno-deprecated) | ||
endif(APPLE) | ||
|
||
install(TARGETS ${testname} DESTINATION "bin/graphics") | ||
|
||
endforeach( testsourcefile ${APP_SOURCES} ) |
Oops, something went wrong.