From 16ac2046fa9164a4a3451b09e6282562b2a8ede6 Mon Sep 17 00:00:00 2001 From: Shaun Reed Date: Mon, 24 May 2021 13:12:14 -0400 Subject: [PATCH] Update OpenGL standalone example + Remove unused directories + Update cpp/README.txt to include new directories --- cpp/README.md | 8 +- cpp/opengl-invaders/CMakeLists.txt | 58 -------- cpp/opengl/test-gl.cpp | 219 +++++++++++++++-------------- cpp/sdl-invaders/CMakeLists.txt | 70 --------- 4 files changed, 115 insertions(+), 240 deletions(-) delete mode 100644 cpp/opengl-invaders/CMakeLists.txt delete mode 100644 cpp/sdl-invaders/CMakeLists.txt diff --git a/cpp/README.md b/cpp/README.md index b74e84c..db1c83e 100644 --- a/cpp/README.md +++ b/cpp/README.md @@ -2,12 +2,14 @@ ``` shaunrd0/klips/cpp/ +├── algorithms # Examples of various algorithms written in C++ ├── cmake # Example of using cmake to build and organize larger projects ├── datastructs # Collection of useful datastructures written in C++ -├── opengl # Barebones opengl application written in C++ built with make +├── opengl # Barebones opengl application written in C++ built with gcc +├── patterns # Examples of various design patterns written in C++ ├── README.md -├── sdl # Barebones sdl application written in C++ built with make -└── sdl-cmake # Barebones sdl application written in C++ built with cmake +├── sdl-cmake # Barebones sdl application written in C++ built with cmake +└── sdl # Barebones sdl application written in C++ built with gcc ``` This directory contains a `CMakeLists.txt`, which can be selected to open as a diff --git a/cpp/opengl-invaders/CMakeLists.txt b/cpp/opengl-invaders/CMakeLists.txt deleted file mode 100644 index f02a6a0..0000000 --- a/cpp/opengl-invaders/CMakeLists.txt +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################### -## Author: Shaun Reed ## -## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ## -## ## -## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## -############################################################################### - -# Define CMake version -cmake_minimum_required(VERSION 3.16) - -project( # Define project - invaders # Project name - DESCRIPTION "Space invaders remake using OpenGL and CPP" - LANGUAGES CXX - ) - -# Pass this to program to control debug output -option (EXE_BUILD "Should we build the executable?" ON) - -add_library( # Add Library - lib-invaders # Library Name - "src/lib-invaders.cpp" # Sources.. - "src/lib-invaders.h" - ) - -target_include_directories( # When calling library, include a directory - lib-invaders # Library name - PUBLIC # - "${CMAKE_CURRENT_SOURCE_DIR}" # Source directory of exe including our library - ) - -if (EXE_BUILD) - set(BUILD_STATUS "Building default executable") - include(FindOpenGL) - include(FindGLUT) - include_directories(${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIR}) - - add_executable( # Creating executable - invaders # Exe name - "app/invaders.cpp" # Exe Source(s) - ) - - # Link the executable with OpenGL libraries - target_link_libraries( # Linking the exe to library - invaders # Executable to link - PUBLIC # - lib-invaders # Library to link - ${OPENGL_LIBRARIES} - ) - - # Link the executable with OpenGL Utility Toolkit - target_link_libraries( # Linking the exe to library - invaders # Executable to link - PUBLIC # - lib-invaders # Library to link - ${GLUT_LIBRARIES} - ) -endif() diff --git a/cpp/opengl/test-gl.cpp b/cpp/opengl/test-gl.cpp index c1e048f..9ea87b1 100644 --- a/cpp/opengl/test-gl.cpp +++ b/cpp/opengl/test-gl.cpp @@ -8,6 +8,7 @@ ############################################################################## ## test-gl.cpp */ + #include #include #include @@ -30,27 +31,27 @@ GLfloat gProjectionScale = 1.f; bool initGL() { - //Initialize Projection Matrix - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glOrtho( 0.0, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0, 1.0, -1.0 ); + //Initialize Projection Matrix + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0.0, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0, 1.0, -1.0 ); - //Initialize Modelview Matrix - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); + //Initialize Modelview Matrix + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); - //Initialize clear color - glClearColor( 0.f, 0.f, 0.f, 1.f ); + //Initialize clear color + glClearColor( 0.f, 0.f, 0.f, 1.f ); - //Check for error - GLenum error = glGetError(); - if( error != GL_NO_ERROR ) - { - printf( "Error initializing OpenGL! %s\n", gluErrorString( error ) ); - return false; - } + //Check for error + GLenum error = glGetError(); + if( error != GL_NO_ERROR ) + { + printf( "Error initializing OpenGL! %s\n", gluErrorString( error ) ); + return false; + } - return true; + return true; } void update() @@ -60,82 +61,82 @@ void update() void render() { - //Clear color buffer - glClear( GL_COLOR_BUFFER_BIT ); + //Clear color buffer + glClear( GL_COLOR_BUFFER_BIT ); - //Reset modelview matrix - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); + //Reset modelview matrix + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); - //Move to center of the screen - glTranslatef( SCREEN_WIDTH / 2.f, SCREEN_HEIGHT / 2.f, 0.f ); + //Move to center of the screen + glTranslatef( SCREEN_WIDTH / 2.f, SCREEN_HEIGHT / 2.f, 0.f ); - //Render quad - if( gColorMode == COLOR_MODE_CYAN ) - { - //Solid Cyan - glBegin( GL_QUADS ); - glColor3f( 0.f, 1.f, 1.f ); - glVertex2f( -50.f, -50.f ); - glVertex2f( 50.f, -50.f ); - glVertex2f( 50.f, 50.f ); - glVertex2f( -50.f, 50.f ); - glEnd(); - } - else - { - //RYGB Mix - glBegin( GL_QUADS ); - glColor3f( 1.f, 0.f, 0.f ); glVertex2f( -50.f, -50.f ); - glColor3f( 1.f, 1.f, 0.f ); glVertex2f( 50.f, -50.f ); - glColor3f( 0.f, 1.f, 0.f ); glVertex2f( 50.f, 50.f ); - glColor3f( 0.f, 0.f, 1.f ); glVertex2f( -50.f, 50.f ); - glEnd(); - } + //Render quad + if( gColorMode == COLOR_MODE_CYAN ) + { + //Solid Cyan + glBegin( GL_QUADS ); + glColor3f( 0.f, 1.f, 1.f ); + glVertex2f( -50.f, -50.f ); + glVertex2f( 50.f, -50.f ); + glVertex2f( 50.f, 50.f ); + glVertex2f( -50.f, 50.f ); + glEnd(); + } + else + { + //RYGB Mix + glBegin( GL_QUADS ); + glColor3f( 1.f, 0.f, 0.f ); glVertex2f( -50.f, -50.f ); + glColor3f( 1.f, 1.f, 0.f ); glVertex2f( 50.f, -50.f ); + glColor3f( 0.f, 1.f, 0.f ); glVertex2f( 50.f, 50.f ); + glColor3f( 0.f, 0.f, 1.f ); glVertex2f( -50.f, 50.f ); + glEnd(); + } - //Update screen - glutSwapBuffers(); + //Update screen + glutSwapBuffers(); } void handleKeys( unsigned char key, int x, int y ) { - //If the user presses q - if( key == 'q' ) + //If the user presses q + if( key == 'q' ) + { + //Toggle color mode + if( gColorMode == COLOR_MODE_CYAN ) { - //Toggle color mode - if( gColorMode == COLOR_MODE_CYAN ) - { - gColorMode = COLOR_MODE_MULTI; - } - else - { - gColorMode = COLOR_MODE_CYAN; - } + gColorMode = COLOR_MODE_MULTI; } - else if( key == 'e' ) + else { - //Cycle through projection scales - if( gProjectionScale == 1.f ) - { - //Zoom out - gProjectionScale = 2.f; - } - else if( gProjectionScale == 2.f ) - { - //Zoom in - gProjectionScale = 0.5f; - } - else if( gProjectionScale == 0.5f ) - { - //Regular zoom - gProjectionScale = 1.f; - } + gColorMode = COLOR_MODE_CYAN; + } + } + else if( key == 'e' ) + { + //Cycle through projection scales + if( gProjectionScale == 1.f ) + { + //Zoom out + gProjectionScale = 2.f; + } + else if( gProjectionScale == 2.f ) + { + //Zoom in + gProjectionScale = 0.5f; + } + else if( gProjectionScale == 0.5f ) + { + //Regular zoom + gProjectionScale = 1.f; + } - //Update projection matrix - glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - glOrtho( 0.0, SCREEN_WIDTH * gProjectionScale, SCREEN_HEIGHT * gProjectionScale, 0.0, 1.0, -1.0 ); - } + //Update projection matrix + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0.0, SCREEN_WIDTH * gProjectionScale, SCREEN_HEIGHT * gProjectionScale, 0.0, 1.0, -1.0 ); + } } void runMainLoop( int val ); @@ -150,45 +151,45 @@ Side Effects: int main( int argc, char* args[] ) { - //Initialize FreeGLUT - glutInit( &argc, args ); + //Initialize FreeGLUT + glutInit( &argc, args ); - //Create OpenGL 2.1 context - glutInitContextVersion( 2, 1 ); + //Create OpenGL 2.1 context + glutInitContextVersion( 2, 1 ); - //Create Double Buffered Window - glutInitDisplayMode( GLUT_DOUBLE ); - glutInitWindowSize( SCREEN_WIDTH, SCREEN_HEIGHT ); - glutCreateWindow( "OpenGL" ); + //Create Double Buffered Window + glutInitDisplayMode( GLUT_DOUBLE ); + glutInitWindowSize( SCREEN_WIDTH, SCREEN_HEIGHT ); + glutCreateWindow( "OpenGL" ); - //Do post window/context creation initialization - if( !initGL() ) - { - printf( "Unable to initialize graphics library!\n" ); - return 1; - } + //Do post window/context creation initialization + if( !initGL() ) + { + printf( "Unable to initialize graphics library!\n" ); + return 1; + } - //Set keyboard handler - glutKeyboardFunc( handleKeys ); + //Set keyboard handler + glutKeyboardFunc( handleKeys ); - //Set rendering function - glutDisplayFunc( render ); + //Set rendering function + glutDisplayFunc( render ); - //Set main loop - glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 ); + //Set main loop + glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 ); - //Start GLUT main loop - glutMainLoop(); + //Start GLUT main loop + glutMainLoop(); - return 0; + return 0; } void runMainLoop( int val ) { - //Frame logic - update(); - render(); + //Frame logic + update(); + render(); - //Run frame one more time - glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, val ); + //Run frame one more time + glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, val ); } diff --git a/cpp/sdl-invaders/CMakeLists.txt b/cpp/sdl-invaders/CMakeLists.txt deleted file mode 100644 index 105e0f8..0000000 --- a/cpp/sdl-invaders/CMakeLists.txt +++ /dev/null @@ -1,70 +0,0 @@ -############################################################################### -## Author: Shaun Reed ## -## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ## -## ## -## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## -############################################################################## -# Root CMakeLists.txt of cpp practice 4-inheritance - -# Define CMake version -cmake_minimum_required(VERSION 3.15) - -project( # Define project - inheritance # Project name - DESCRIPTION "Example project for class inheritance" - LANGUAGES CXX - ) - -# Pass this to program to control debug output -option (DB_CONF "Should we debug and configure files with cmake values?" ON) -option (DB_BUILD "Should we run the build in debug mode?" OFF) -option (EXE_BUILD "Should we build the executable?" ON) - -add_library( # Add Library - lib-inherit # Library Name - "src/lib-inherit.cpp" # Sources.. - "src/lib-inherit.h" -) - -target_include_directories( # When calling library, include a directory - lib-inherit # Library name - PUBLIC # - "${CMAKE_CURRENT_SOURCE_DIR}" # Source directory of exe including our library -) - -if (EXE_BUILD) - set(BUILD_STATUS "Building default executable") - include(FindPkgConfig) - pkg_search_module(SDL2 REQUIRED sdl2) - include_directories(${SDL2_INCLUDE_DIRS}) - - add_executable( # Creating executable - inherited # Exe name - "apps/inherited.cpp" # Exe Source(s) - ) - target_link_libraries( # Linking the exe to library - inherited # Executable to link - PRIVATE # - lib-inherit # Library to link - ${SDL2_LIBRARIES} - ) -elseif(DB_BUILD) - set(BUILD_STATUS "Building in debug mode") - - # Create compile_commands.json for linter - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - - target_compile_definitions(inherited PRIVATE BUILD_STATUS=${BUILD_STATUS}) -elseif(DB_CONF) - set(BUILD_STATUS "Building in debug mode, configuring files") - - # Configure header file with CMake variables defined in src/lib-inherit.h.in - # @ONLY is specified, only variables of the form @VAR@ will be replaced and ${VAR} will be ignored. - # configure_file(src/lib-inherit.h src/lib-inherit.h @ONLY) - configure_file(apps/inherited.cpp apps/inherited.cpp @ONLY) - - # Create compile_commands.json for linter - set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -endif() -#target_compile_definitions(inherited PRIVATE BUILD_STATUS=${BUILD_STATUS}) -