From 5af07e88f000c32686df97449184913a226520fc Mon Sep 17 00:00:00 2001 From: Joe Adams Date: Fri, 8 Dec 2017 14:05:37 +0000 Subject: [PATCH] Started to create GL boilerplate --- breakout/breakout | Bin 0 -> 13360 bytes glboilerplate/glboilerplate.c | 162 ++++++++++++++++++++++++++++++++++ glboilerplate/makefile | 7 ++ glboilerplate/readme.md | 1 + 4 files changed, 170 insertions(+) create mode 100755 breakout/breakout create mode 100644 glboilerplate/glboilerplate.c diff --git a/breakout/breakout b/breakout/breakout new file mode 100755 index 0000000000000000000000000000000000000000..02d916ce3e30e962856fa8ebaeabe1ffc56e0bb7 GIT binary patch literal 13360 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 +#include +#include +#include +#include + +int main(void) { + + /* + * RETURN CODES + * 0: Success + * 1: SDL init fail + * 2: Error creating Window + * 3: Error creating renderer + * + */ + + /* ---------------- + * SDL Init + * ---------------- + */ + if (SDL_Init(SDL_INIT_EVERYTHING)!=0) { + perror("[FAILED] Initialising SDL: "); + return 1; + } + + int go; //Var for loop control + + /* ---------------- + * Main Window + * ---------------- + * Create the main output Window for SDL + */ + + // Window vars + int winPosX = 100; int winPosY = 100; + int winWidth = 640; int winHeight = 480; + + Uint32 timer; // Animation timer (ms) + + SDL_Window *window1 = SDL_CreateWindow( + "Main Window", + winPosX, winPosY, + winWidth, winHeight, + SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL + ); + if (window1==NULL) { + fprintf(stderr, "[FAILED] Creating Window window1"); + return 2; //Error creating Window + } + + /* + * ---------------- + * Renderer + * ---------------- + * Creates the main renderer (tied to main window) + */ + + // SDL_Renderer * renderer1 = SDL_CreateRenderer(window1, -1, 0); + // if (renderer1==NULL) { + // fprintf(stderr, "[FAILED] Creating renderer renderer1 for window1"); + // return 3; + // } + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 1); // Specifies the version of the OpenGL context + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5); // (here, 1.5) -- hello, 2003! + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY); // Allows deprecated functions to be used + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); // Set depth buffer to 16 bits, if OpenGL agrees (see below) + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); // Enable double buffering + + SDL_GLContext context1 = SDL_GL_CreateContext(window1); // Use SDL_GL_MakeCurrent function to switch contexts + + if (context1==NULL) { + fprintf(stderr, "[FAILED] Creating render context context1 for window1"); + return 3; + } + + glFrontFace(GL_CCW); // Counter-clockwise winding + glEnable(GL_NORMALIZE); // Vectors normalized after transforming to keep units consistent for lighting + glShadeModel(GL_SMOOTH); // GL_FLAT for flat shading instead + glEnable(GL_DEPTH_TEST); // Enables depth comparisons + + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + + glMatrixMode(GL_PROJECTION); // Sets our matrix mode (initially) to work with the projection stack + glLoadIdentity(); // Projection matrix is now the identity matrix, so we can work in 2D space + + gluOrtho2D( + -1.0*(GLdouble)(winWidth/2), // Left + (GLdouble)(winWidth/2), // Right + -1.0*(GLdouble)(winHeight/2), // Bottom + (GLdouble)(winHeight/2) // Top + ); + + //gluOrthof( + // -1.0*(GLfloat)(winWidth/2), + // (GLfloat)(winWidth/2), + // -1.0*(GLfloat)(winHeight/2), + // (GLfloat)(winHeight/2), + // (GLfloat)(-1), + // (GLfloat)(1) + //); // Set up 2D orthographic projection matrix, so now we're officially in 2D + + glViewport(0,0,winWidth,winHeight); // Set the viewport to fill the window + + timer=SDL_GetTicks(); // Initialise the timer + + go=1; + while(go) { + + /* + * ---------------- + * Event handling + * ---------------- + */ + SDL_Event incomingEvent; + while (SDL_PollEvent(&incomingEvent)) { + switch (incomingEvent.type) { + case SDL_QUIT: + // User requested program quit - e.g. window close + go=0; + break; + } + } + + /* + * ---------------- + * Timing + * ---------------- + */ + double timerf; { // Change scope for 'old' var + Uint32 old=timer; + timer = SDL_GetTicks(); + timerf = (double)(timer-old)/1000.0; //0.0166... = 60FPS (1/timerf); + } + + /* + * ---------------- + * Draw to buffer + * ---------------- + */ + + /* + * -------------------------------- + * Output to Window + * -------------------------------- + */ + SDL_GL_SwapWindow(window1); + } + + /* + * -------------------------------- + * Clean up after ourselves + * -------------------------------- + */ + SDL_GL_DeleteContext(context1); + SDL_DestroyWindow(window1); + SDL_Quit(); + + return 0; +} diff --git a/glboilerplate/makefile b/glboilerplate/makefile index 5f85907..a845cfd 100644 --- a/glboilerplate/makefile +++ b/glboilerplate/makefile @@ -14,3 +14,10 @@ pongymod: $(pongymod_s) clang $(pongymod_s) -l SDL2 -l GLU -l GL -o $(pongymod_c) chmod +x $(pongymod_c) ./$(pongymod_c) + +glboilerplate_s = glboilerplate.c +glboilerplate_c = glboilerplate +glboilerplate: $(glboilerplate_s) + clang $(glboilerplate_s) -l SDL2 -l GLU -l GL -o $(glboilerplate_c) + chmod +x $(glboilerplate_c) + ./$(glboilerplate_c) diff --git a/glboilerplate/readme.md b/glboilerplate/readme.md index 4287b39..6b59de3 100644 --- a/glboilerplate/readme.md +++ b/glboilerplate/readme.md @@ -18,3 +18,4 @@ Completed pongy.c file (collisions, paddle movement and scoring system) ## sdlboilerplate.c +> Compile using `make sdlboilerplate`