// // Change video mode at runtime // hal_bool SDL2_SetNewVideoMode(int w, int h, int fs, int mnum) { hal_bool res; if((res = SDL2_SetVideoMode(w, h, fs, mnum))) SDL2_saveVideoMode(); // remember settings // notify all registered game objects and subsystems of the change VAllocItem::ModeChanging(); return res; }
int main(int argc, char* argv[]){ if(argc != 3){ std::cout << "Usage: " << argv[0] << " foreground_image background_image\n" << "Returns 0 if sucessful, else 1" << std::endl; return 1; } //image to load std::string message_filename(argv[1]); std::string background_filename(argv[2]); //init if(SDL_Init(SDL_INIT_EVERYTHING) == -1) return 1; //set up screen region screen = SDL2_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE); if(screen == NULL) return 1; //window caption SDL_WM_SetCaption("Hello World", NULL); //load image message = load_image(message_filename); background = load_image(background_filename); //Applies image to screen region //background apply_surface( 320, 0, background, screen ); apply_surface( 0, 240, background, screen ); apply_surface( 320, 240, background, screen ); //message apply_surface(180, 140, message, screen); //updates screen if(SDL_Flip(screen) == -1){ return 1; } //pause SDL_Delay(2000); //Cleanup SDL_FreeSurface(message); SDL_FreeSurface(background); SDL_Quit(); return 0; }
// // Set initial video mode at startup using configuration file settings // void SDL2_InitVideo() { SDL2_SetVideoMode(screenwidth, screenheight, fullscreen, monitornum); SDL2_saveVideoMode(); // remember settings }
// // Set video mode // hal_bool SDL2_SetVideoMode(int width, int height, int fs, int mnum) { if(glcontext) { SDL_GL_DeleteContext(glcontext); glcontext = nullptr; } if(mainwindow) { SDL_DestroyWindow(mainwindow); mainwindow = nullptr; } Uint32 flags = SDL_WINDOW_OPENGL | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_SHOWN; int x = SDL_WINDOWPOS_CENTERED_DISPLAY(mnum); int y = SDL_WINDOWPOS_CENTERED_DISPLAY(mnum); if(fs == 1) flags |= SDL_WINDOW_FULLSCREEN; // if dimensions are zero, then use fullscreen desktop if(!(width && height) || fs == -1) { x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(mnum); y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(mnum); flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; fs = -1; } // set GL attributes SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); if(!(mainwindow = SDL_CreateWindow("Calico", x, y, width, height, flags))) { // Try resetting previous mode if(width != curscreenwidth || height != curscreenheight || fs != curfullscreen || mnum != curmonitornum) { return SDL2_SetVideoMode(curscreenwidth, curscreenheight, curfullscreen, curmonitornum); } else { hal_platform.fatalError("Failed to set video mode %dx%d (%s)", width, height, SDL_GetError()); } } // set window icon hal_platform.setIcon(); // create GL context if(!(glcontext = SDL_GL_CreateContext(mainwindow))) { hal_platform.fatalError("Failed to create GL context (%s)", SDL_GetError()); } // remember set state SDL_GetWindowSize(mainwindow, &curscreenwidth, &curscreenheight); curfullscreen = fs; curmonitornum = mnum; // calculate game subscreen geometry SDL2_calcSubRect(); // make current and set swap SDL_GL_MakeCurrent(mainwindow, glcontext); SDL2_ToggleGLSwap(HAL_TRUE); // wake up RB system RB_InitDefaultState(); // set orthonormal projection SDL2_setOrthoMode(curscreenwidth, curscreenheight); // update appstate maintenance hal_appstate.updateFocus(); hal_appstate.updateGrab(); return HAL_TRUE; }