# HG changeset patch # User Matti Hamalainen # Date 1576347212 -7200 # Node ID d6ffc59bb84d0d4f424f2c833d092df669a3253e # Parent baccf204428914b3f3315c6393ed5a3e9c2ececd Move more of the SDL and GL setup code to the renderer class. diff -r baccf2044289 -r d6ffc59bb84d dmglrender.cpp --- a/dmglrender.cpp Sat Dec 14 16:39:20 2019 +0200 +++ b/dmglrender.cpp Sat Dec 14 20:13:32 2019 +0200 @@ -103,7 +103,10 @@ } -bool DMGLSimpleRenderer::initRender1(void) +bool DMGLSimpleRenderer::initRenderer1(const char *title, + const int width, const int height, + const int sdlWindowHPos, const int sdlWindowVPos, + const int sdlFlags) { // Set GL attributes SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); @@ -119,14 +122,16 @@ //SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - return true; -} - + // Attempt to create a window + if (!DMSimpleRenderer::initRenderer1( + title, + width, height, + sdlWindowHPos, sdlWindowVPos, + sdlFlags | SDL_WINDOW_OPENGL)) + return false; -bool DMGLSimpleRenderer::initRender2(SDL_Window *window) -{ // Create OpenGL context - if ((glContext = SDL_GL_CreateContext(window)) == NULL) + if ((sdlGLContext = SDL_GL_CreateContext(sdlWindow)) == NULL) { dmError("Unable to create SDL OpenGL context: %s\n", SDL_GetError()); @@ -160,7 +165,7 @@ } -bool DMGLSimpleRenderer::initRender3(const int width, const int height) +bool DMGLSimpleRenderer::initRenderer2(void) { // Dump some information dmMsg("GL_VENDOR : %s\n", glGetString(GL_VENDOR)); @@ -171,12 +176,12 @@ return false; // Setup the window and view port - glViewport(0, 0, width, height); + glViewport(0, 0, windowWidth, windowHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective(45.0f, GLfloat(width) / GLfloat(height), 0.1f, 1000.0f); + gluPerspective(45.0f, GLfloat(windowWidth) / GLfloat(windowHeight), 0.1f, 1000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -231,8 +236,10 @@ void DMGLSimpleRenderer::shutdownRenderer(void) { - if (glContext != NULL) - SDL_GL_DeleteContext(glContext); + if (sdlGLContext != NULL) + SDL_GL_DeleteContext(sdlGLContext); + + DMSimpleRenderer::shutdownRenderer(); } diff -r baccf2044289 -r d6ffc59bb84d dmglrender.h --- a/dmglrender.h Sat Dec 14 16:39:20 2019 +0200 +++ b/dmglrender.h Sat Dec 14 20:13:32 2019 +0200 @@ -15,17 +15,21 @@ struct DMGLSimpleRenderer : DMSimpleRenderer { - SDL_GLContext glContext; + SDL_GLContext sdlGLContext; DMGLSimpleRenderer() { - glContext = NULL; + sdlWindow = NULL; + sdlGLContext = NULL; } bool checkErrors(void); - bool initRender1(void); - bool initRender2(SDL_Window *window); - bool initRender3(const int width, const int height); + + bool initRenderer1(const char *title, + const int width, const int height, + const int sdlWindowHPos, const int sdlWindowVPos, + const int sdlFlags); + bool initRenderer2(void); void shutdownRenderer(void); void drawModel(const DMSimpleScene &scene, const DMModel &model, const float time); diff -r baccf2044289 -r d6ffc59bb84d dmrender.h --- a/dmrender.h Sat Dec 14 16:39:20 2019 +0200 +++ b/dmrender.h Sat Dec 14 20:13:32 2019 +0200 @@ -16,10 +16,13 @@ struct DMSimpleRenderer { bool useShaders; + int windowWidth, windowHeight; + SDL_Window *sdlWindow; DMSimpleRenderer() { useShaders = false; + sdlWindow = NULL; } virtual bool checkErrors(void) @@ -27,27 +30,42 @@ return true; } - virtual bool initRender1(void) + virtual bool initRenderer1(const char *title, + const int width, const int height, + const int sdlWindowHPos, const int sdlWindowVPos, + const int sdlFlags) { - return false; + windowWidth = width; + windowHeight = height; + + if ((sdlWindow = SDL_CreateWindow(title, + sdlWindowHPos, sdlWindowVPos, + windowWidth, windowHeight, + sdlFlags)) == NULL) + { + dmError("Could not create SDL window: %s", + SDL_GetError()); + + return false; + } + else + return true; } - virtual bool initRender2(SDL_Window *window) + virtual bool initRenderer2(void) { - (void) window; - return false; - } - - virtual bool initRender3(const int width, const int height) - { - (void) width; - (void) height; - return false; } virtual void shutdownRenderer(void) { + if (sdlWindow != NULL) + SDL_DestroyWindow(sdlWindow); + } + + virtual void swapWindow(void) + { + SDL_GL_SwapWindow(sdlWindow); } virtual void drawModel(const DMSimpleScene &scene, const DMModel &model, const float time) diff -r baccf2044289 -r d6ffc59bb84d gldragon.cpp --- a/gldragon.cpp Sat Dec 14 16:39:20 2019 +0200 +++ b/gldragon.cpp Sat Dec 14 20:13:32 2019 +0200 @@ -28,11 +28,6 @@ optVSyncMode = 1; -/* Globals - */ -SDL_Window *dmWindow = NULL; - - /* Helpers */ bool dmInitSDL(DMSimpleRenderer &renderer, const int width, const int height, const char *title) @@ -49,25 +44,11 @@ } // Part 1 of initialization - if (!renderer.initRender1()) + if (!renderer.initRenderer1(title, width, height, + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE)) return false; - // Attempt to create a window - if ((dmWindow = SDL_CreateWindow(title, - SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - width, height, - SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE)) == NULL) - { - dmError("Could not create SDL window: %s", - SDL_GetError()); - return false; - } - - // Part 2 of initialization - if (!renderer.initRender2(dmWindow)) - return false; - - // Check if we want to attempt to use vsync switch (optVSyncMode) { @@ -105,7 +86,7 @@ } // Part 3 of initialization - if (!renderer.initRender3(width, height)) + if (!renderer.initRenderer2()) return false; dmMsg("VSync mode : %s\n", msg.c_str()); @@ -307,7 +288,7 @@ renderer.drawScene(scene, totalTime); // Draw the current frame - SDL_GL_SwapWindow(dmWindow); + renderer.swapWindow(); // Rotate for 2 degrees renderer.animate(scene, totalTime); @@ -343,9 +324,6 @@ exit: renderer.shutdownRenderer(); - if (dmWindow != NULL) - SDL_DestroyWindow(dmWindow); - SDL_Quit(); return 0;