+ if (!(flags & SDL_DOUBLEBUF) && pdata->cfg_force_doublebuf) {
+ log("forcing SDL_DOUBLEBUF");
+ flags |= SDL_DOUBLEBUF;
+ }
+
+ if (pdata->border_l | pdata->border_r | pdata->border_t | pdata->border_b) {
+ if (pdata->border_l + pdata->border_r >= width
+ || pdata->border_t + pdata->border_b >= height)
+ {
+ err("specified border too large, ignoring");
+ pdata->border_l = pdata->border_r = pdata->border_t = pdata->border_b = 0;
+ }
+ }
+
+ /* always use doublebuf, when SDL_DOUBLEBUF is not set,
+ * we'll have to blit manually on UpdateRects() */
+ doublebuf = 1;
+
+ fbmem = osdl_video_set_mode(pdata,
+ pdata->border_l, pdata->border_r, pdata->border_t, pdata->border_b,
+ width, height, bpp, &doublebuf, this->wm_title);
+ if (fbmem == NULL) {
+ err("failing on mode %dx%d@%d, doublebuf %s, border %d,%d,%d,%d",
+ width, height, bpp, (flags & SDL_DOUBLEBUF) ? "on" : "off",
+ pdata->border_l, pdata->border_r, pdata->border_t, pdata->border_b);
+ return NULL;
+ }
+ pdata->front_buffer = osdl_video_get_active_buffer(pdata);
+ if (pdata->front_buffer == NULL) {
+ err("osdl_video_get_active_buffer failed\n");