void GraphicsInit(GraphicsDevice *device, Config *c) { memset(device, 0, sizeof *device); CArrayInit(&device->validModes, sizeof(Vec2i)); // Add default modes AddGraphicsMode(device, 320, 240); AddGraphicsMode(device, 400, 300); AddGraphicsMode(device, 640, 480); GraphicsConfigSetFromConfig(&device->cachedConfig, c); }
static void AddSupportedGraphicsModes(GraphicsDevice *device) { // TODO: multiple window support? const int numDisplayModes = SDL_GetNumDisplayModes(0); if (numDisplayModes < 1) { LOG(LM_GFX, LL_ERROR, "no valid display modes: %s", SDL_GetError()); return; } for (int i = 0; i < numDisplayModes; i++) { SDL_DisplayMode mode; if (SDL_GetDisplayMode(0, i, &mode) != 0) { LOG(LM_GFX, LL_ERROR, "cannot get display mode: %s", SDL_GetError()); continue; } if (mode.w < 320 || mode.h < 240) { break; } AddGraphicsMode(device, mode.w, mode.h); } }
void GraphicsInit(GraphicsDevice *device) { device->IsInitialized = 0; device->IsWindowInitialized = 0; device->screen = NULL; memset(&device->cachedConfig, 0, sizeof device->cachedConfig); device->validModes = NULL; device->clipping.left = 0; device->clipping.top = 0; device->clipping.right = 0; device->clipping.bottom = 0; device->numValidModes = 0; device->modeIndex = 0; // Add default modes AddGraphicsMode(device, 320, 240, 1); AddGraphicsMode(device, 400, 300, 1); AddGraphicsMode(device, 640, 480, 1); AddGraphicsMode(device, 320, 240, 2); device->buf = NULL; device->bkg = NULL; hqxInit(); }
void AddSupportedModesForBPP(GraphicsDevice *device, int bpp) { SDL_Rect** modes; SDL_PixelFormat fmt; int i; memset(&fmt, 0, sizeof fmt); fmt.BitsPerPixel = (Uint8)bpp; modes = SDL_ListModes(&fmt, SDL_FULLSCREEN); if (modes == (SDL_Rect**)0) { return; } if (modes == (SDL_Rect**)-1) { return; } for (i = 0; modes[i]; i++) { int validScaleFactors[] = { 1, 2, 3, 4 }; int j; for (j = 0; j < 4; j++) { int scaleFactor = validScaleFactors[j]; int w, h; if (modes[i]->w % scaleFactor || modes[i]->h % scaleFactor) { continue; } if (modes[i]->w % 4) { // TODO: why does width have to be divisible by 4? 1366x768 doesn't work continue; } w = modes[i]->w / scaleFactor; h = modes[i]->h / scaleFactor; if (w < 320 || h < 240) { break; } AddGraphicsMode(device, w, h, scaleFactor); } } }