2 // VIDEO.CPP: SDL/local hardware specific video routines
9 #include <string.h> // Why??? (for memset, etc... Lazy!) Dunno why, but this just strikes me as wrong...
14 // Exported global variables (actually, these are LOCAL global variables, EXPORTED...)
16 static SDL_Window * sdlWindow = NULL;
17 static SDL_Renderer * sdlRenderer = NULL;
18 static SDL_Texture * sdlTexture = NULL;
19 uint32_t scrBuffer[VIRTUAL_SCREEN_WIDTH * VIRTUAL_SCREEN_HEIGHT * sizeof(uint32_t)];
22 // Prime SDL and create surfaces
26 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_NOPARACHUTE) != 0)
28 WriteLog("Video: Could not initialize the SDL library: %s\n", SDL_GetError());
32 int retVal = SDL_CreateWindowAndRenderer(VIRTUAL_SCREEN_WIDTH * 3, VIRTUAL_SCREEN_HEIGHT * 3, SDL_WINDOW_OPENGL, &sdlWindow, &sdlRenderer);
36 WriteLog("Video: Could not window and/or renderer: %s\n", SDL_GetError());
40 // Make the scaled rendering look smoother.
41 // SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
42 SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");
43 SDL_RenderSetLogicalSize(sdlRenderer, VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT);
45 sdlTexture = SDL_CreateTexture(sdlRenderer,
46 SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING,
47 VIRTUAL_SCREEN_WIDTH, VIRTUAL_SCREEN_HEIGHT);
49 WriteLog("Video: Successfully initialized.\n");
54 // Free various SDL components
62 // Render the backbuffer to the primary screen surface
64 void RenderScreenBuffer(void)
66 SDL_UpdateTexture(sdlTexture, NULL, scrBuffer, VIRTUAL_SCREEN_WIDTH * sizeof(Uint32));
67 SDL_RenderClear(sdlRenderer);
68 SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
69 SDL_RenderPresent(sdlRenderer);
73 // Fullscreen <-> window switching
75 void ToggleFullScreen(void)
77 settings.fullscreen = !settings.fullscreen;
80 if (settings.fullscreen)
82 retVal = SDL_SetWindowFullscreen(sdlWindow, SDL_WINDOW_FULLSCREEN_DESKTOP);
87 retVal = SDL_SetWindowFullscreen(sdlWindow, 0);
93 WriteLog("Video::ToggleFullScreen: SDL error = %s\n", SDL_GetError());