Add example OpenGL project built within vscode g++
This commit is contained in:
		
							parent
							
								
									7edaca8899
								
							
						
					
					
						commit
						4c10e99e2f
					
				
							
								
								
									
										27
									
								
								plates/cpp-opengl/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								plates/cpp-opengl/.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| { | ||||
|   // Use IntelliSense to learn about possible attributes. | ||||
|   // Hover to view descriptions of existing attributes. | ||||
|   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|   "version": "0.2.0", | ||||
|   "configurations": [ | ||||
|     { | ||||
|       "name": "(gdb) Launch", | ||||
|       "type": "cppdbg", | ||||
|       "request": "launch", | ||||
|       "program": "${workspaceFolder}/build/test-gl", | ||||
|       "args": [], | ||||
|       "stopAtEntry": false, | ||||
|       "cwd": "${workspaceFolder}", | ||||
|       "environment": [], | ||||
|       "externalConsole": false, | ||||
|       "MIMode": "gdb", | ||||
|       "setupCommands": [ | ||||
|         { | ||||
|           "description": "Enable pretty-printing for gdb", | ||||
|           "text": "-enable-pretty-printing", | ||||
|           "ignoreFailures": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										30
									
								
								plates/cpp-opengl/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								plates/cpp-opengl/.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| { | ||||
|   // See https://go.microsoft.com/fwlink/?LinkId=733558  | ||||
|   // for the documentation about the tasks.json format | ||||
|   "version": "2.0.0", | ||||
|   "tasks": [ | ||||
|     { | ||||
|       "type": "shell", | ||||
|       "label": "cpp build active file", | ||||
|       "command": "/usr/bin/g++", | ||||
|       "args": [ | ||||
|         "${file}", | ||||
|         "-lGL", | ||||
|         "-lGLU", | ||||
|         "-lglut", | ||||
|         "-o", | ||||
|         "${fileDirname}/build/${fileBasenameNoExtension}" | ||||
|       ], | ||||
|       "options": { | ||||
|         "cwd": "/usr/bin" | ||||
|       }, | ||||
|       "problemMatcher": [ | ||||
|         "$gcc" | ||||
|       ], | ||||
|       "group": { | ||||
|         "kind": "build", | ||||
|         "isDefault": true | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										192
									
								
								plates/cpp-opengl/test-gl.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								plates/cpp-opengl/test-gl.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,192 @@ | ||||
| /*#############################################################################
 | ||||
| ## Author: Shaun Reed                                                        ## | ||||
| ##                                                                           ## | ||||
| ## Testing building OpenGL projects with source code from lazyfoo -          ## | ||||
| ## https://lazyfoo.net/tutorials/OpenGL/                                     ##
 | ||||
| ############################################################################## | ||||
| ## test-gl.cpp | ||||
| */ | ||||
| #include <GL/freeglut.h> | ||||
| #include <GL/gl.h> | ||||
| #include <GL/glu.h> | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| //Screen constants
 | ||||
| const int SCREEN_WIDTH = 640; | ||||
| const int SCREEN_HEIGHT = 480; | ||||
| const int SCREEN_FPS = 60; | ||||
| 
 | ||||
| //Color modes
 | ||||
| const int COLOR_MODE_CYAN = 0; | ||||
| const int COLOR_MODE_MULTI = 1; | ||||
| 
 | ||||
| //The current color rendering mode
 | ||||
| int gColorMode = COLOR_MODE_CYAN; | ||||
| 
 | ||||
| //The projection scale
 | ||||
| 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 Modelview Matrix
 | ||||
|     glMatrixMode( GL_MODELVIEW ); | ||||
|     glLoadIdentity(); | ||||
| 
 | ||||
|     //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; | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| void update() | ||||
| { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void render() | ||||
| { | ||||
|     //Clear color buffer
 | ||||
|     glClear( GL_COLOR_BUFFER_BIT ); | ||||
| 
 | ||||
|     //Reset modelview matrix
 | ||||
|     glMatrixMode( GL_MODELVIEW ); | ||||
|     glLoadIdentity(); | ||||
| 
 | ||||
|     //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(); | ||||
|     } | ||||
| 
 | ||||
|     //Update screen
 | ||||
|     glutSwapBuffers(); | ||||
| } | ||||
| 
 | ||||
| void handleKeys( unsigned char key, int x, int y ) | ||||
| { | ||||
|     //If the user presses q
 | ||||
|     if( key == 'q' ) | ||||
|     { | ||||
|         //Toggle color mode
 | ||||
|         if( gColorMode == COLOR_MODE_CYAN ) | ||||
|         { | ||||
|             gColorMode = COLOR_MODE_MULTI; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             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 ); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void runMainLoop( int val ); | ||||
| /*
 | ||||
| Pre Condition: | ||||
|  -Initialized freeGLUT | ||||
| Post Condition: | ||||
|  -Calls the main loop functions and sets itself to be called back in 1000 / SCREEN_FPS milliseconds | ||||
| Side Effects: | ||||
|  -Sets glutTimerFunc | ||||
| */ | ||||
| 
 | ||||
| int main( int argc, char* args[] ) | ||||
| { | ||||
|     //Initialize FreeGLUT
 | ||||
|     glutInit( &argc, args ); | ||||
| 
 | ||||
|     //Create OpenGL 2.1 context
 | ||||
|     glutInitContextVersion( 2, 1 ); | ||||
| 
 | ||||
|     //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; | ||||
|     } | ||||
| 
 | ||||
|     //Set keyboard handler
 | ||||
|     glutKeyboardFunc( handleKeys ); | ||||
| 
 | ||||
|     //Set rendering function
 | ||||
|     glutDisplayFunc( render ); | ||||
| 
 | ||||
|     //Set main loop
 | ||||
|     glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 ); | ||||
| 
 | ||||
|     //Start GLUT main loop
 | ||||
|     glutMainLoop(); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| void runMainLoop( int val ) | ||||
| { | ||||
|     //Frame logic
 | ||||
|     update(); | ||||
|     render(); | ||||
| 
 | ||||
|     //Run frame one more time
 | ||||
|     glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, val ); | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user