bool TCOD_sys_init(int w,int h, char_t *buf, char_t *oldbuf, bool fullscreen) { if ( ! has_startup ) TCOD_sys_startup(); consoleWidth=w; consoleHeight=h; if (! charmap) TCOD_sys_load_font(); if ( fullscreen ) { find_resolution(); screen=SDL_SetVideoMode(actual_fullscreen_width,actual_fullscreen_height,32,SDL_FULLSCREEN); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot set fullscreen video mode"); SDL_ShowCursor(0); actual_fullscreen_width=screen->w; actual_fullscreen_height=screen->h; fullscreen_offsetx=(actual_fullscreen_width-consoleWidth*fontWidth)/2; fullscreen_offsety=(actual_fullscreen_height-consoleHeight*fontHeight)/2; SDL_FillRect(screen,0,0); } else { screen=SDL_SetVideoMode(w*fontWidth,h*fontHeight,32,0); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot create window"); } //if ( SDL_MUSTLOCK( charmap ) ) SDL_UnlockSurface( charmap ); SDL_EnableUNICODE(1); consoleBuffer=buf; prevConsoleBuffer=oldbuf; fullscreen_on=fullscreen; memset(key_status,0,sizeof(bool)*(TCODK_CHAR+1)); memset(ascii_updated,0,sizeof(bool)*TCOD_max_font_chars); return true; }
void TCOD_sys_set_fullscreen(bool fullscreen) { bool mouseOn=SDL_ShowCursor(-1); fullscreen_on=fullscreen; /* SDL_QuitSubSystem(SDL_INIT_VIDEO); SDL_InitSubSystem(SDL_INIT_VIDEO); charmap=SDL_LoadBMP(font_file); if (charmap == NULL ) TCOD_fatal("SDL : cannot load %s",font_file); memset(charcols,128,256*sizeof(TCOD_color_t)); */ if ( fullscreen ) { find_resolution(); screen=SDL_SetVideoMode(actual_fullscreen_width,actual_fullscreen_height,32,SDL_FULLSCREEN); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot set fullscreen video mode"); SDL_ShowCursor(mouseOn ? 1:0); actual_fullscreen_width=screen->w; actual_fullscreen_height=screen->h; fullscreen_offsetx=(actual_fullscreen_width-consoleWidth*fontWidth)/2; fullscreen_offsety=(actual_fullscreen_height-consoleHeight*fontHeight)/2; /* printf ("actual resolution : %dx%d\n",actual_fullscreen_width,actual_fullscreen_height); printf ("offset : %dx%d\n",fullscreen_offsetx,fullscreen_offsety); printf ("flags : %x bpp : %d bitspp : %d\n",screen->flags, screen->format->BytesPerPixel, screen->format->BitsPerPixel); */ } else { screen=SDL_SetVideoMode(consoleWidth*fontWidth,consoleHeight*fontHeight,32,0); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot create window"); SDL_ShowCursor(mouseOn ? 1:0); fullscreen_offsetx=0; fullscreen_offsety=0; } /* SDL_WM_SetCaption(window_title,NULL); */ oldFade=-1; // to redraw the whole screen SDL_UpdateRect(screen, 0, 0, 0, 0); }
static void create_window(int w, int h, bool fullscreen) { Uint32 winflags = SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL; #if defined(TCOD_ANDROID) /* Android should always be fullscreen. */ TCOD_ctx.fullscreen = fullscreen = true; #endif if ( fullscreen ) { find_resolution(); #ifndef NO_OPENGL if (TCOD_ctx.renderer != TCOD_RENDERER_SDL ) { TCOD_opengl_init_attributes(); winflags |= SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS | SDL_WINDOW_OPENGL; # if defined(TCOD_ANDROID) && defined(FUTURE_SUPPORT) winflags |= SDL_WINDOW_RESIZABLE; # endif window = SDL_CreateWindow(TCOD_ctx.window_title,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,TCOD_ctx.actual_fullscreen_width,TCOD_ctx.actual_fullscreen_height,winflags); if ( window && TCOD_opengl_init_state(w, h, charmap) && TCOD_opengl_init_shaders() ) { TCOD_LOG(("Using %s renderer...\n",TCOD_ctx.renderer == TCOD_RENDERER_GLSL ? "GLSL" : "OPENGL")); } else { TCOD_LOG(("Fallback to SDL renderer...\n")); TCOD_ctx.renderer = TCOD_RENDERER_SDL; } } #endif if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { winflags |= SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS; # if defined(TCOD_ANDROID) && defined(FUTURE_SUPPORT) winflags |= SDL_WINDOW_RESIZABLE; # endif window = SDL_CreateWindow(TCOD_ctx.window_title,SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, TCOD_ctx.actual_fullscreen_width,TCOD_ctx.actual_fullscreen_height,winflags); if ( window == NULL ) TCOD_fatal_nopar("SDL : cannot set fullscreen video mode"); } SDL_ShowCursor(0); SDL_GetWindowSize(window,&TCOD_ctx.actual_fullscreen_width,&TCOD_ctx.actual_fullscreen_height); TCOD_sys_init_screen_offset(); } else { #ifndef NO_OPENGL if (TCOD_ctx.renderer != TCOD_RENDERER_SDL ) { TCOD_opengl_init_attributes(); winflags |= SDL_WINDOW_OPENGL; window = SDL_CreateWindow(TCOD_ctx.window_title,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,w*TCOD_ctx.font_width,h*TCOD_ctx.font_height,winflags); if ( window && TCOD_opengl_init_state(w, h, charmap) && TCOD_opengl_init_shaders() ) { TCOD_LOG(("Using %s renderer...\n",TCOD_ctx.renderer == TCOD_RENDERER_GLSL ? "GLSL" : "OPENGL")); } else { TCOD_LOG(("Fallback to SDL renderer...\n")); TCOD_ctx.renderer = TCOD_RENDERER_SDL; } } #endif if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { window = SDL_CreateWindow(TCOD_ctx.window_title,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,w*TCOD_ctx.font_width,h*TCOD_ctx.font_height,winflags); TCOD_LOG(("Using SDL renderer...\n")); } if ( window == NULL ) TCOD_fatal_nopar("SDL : cannot create window"); } renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if ( renderer == NULL ) TCOD_fatal_nopar("SDL : cannot create renderer"); SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); }
static void create_window(int w, int h, bool fullscreen) { if ( fullscreen ) { find_resolution(); #ifndef NO_OPENGL if (TCOD_ctx.renderer != TCOD_RENDERER_SDL ) { TCOD_opengl_init_attributes(); screen=SDL_SetVideoMode(TCOD_ctx.actual_fullscreen_width,TCOD_ctx.actual_fullscreen_height,32,SDL_FULLSCREEN|SDL_OPENGL); if ( screen && TCOD_opengl_init_state(w, h, charmap) && TCOD_opengl_init_shaders() ) { TCOD_LOG(("Using %s renderer...\n",TCOD_ctx.renderer == TCOD_RENDERER_GLSL ? "GLSL" : "OPENGL")); } else { TCOD_LOG(("Fallback to SDL renderer...\n")); TCOD_ctx.renderer = TCOD_RENDERER_SDL; } } #endif if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { screen=SDL_SetVideoMode(TCOD_ctx.actual_fullscreen_width,TCOD_ctx.actual_fullscreen_height,32,SDL_FULLSCREEN); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot set fullscreen video mode"); } SDL_ShowCursor(0); TCOD_ctx.actual_fullscreen_width=screen->w; TCOD_ctx.actual_fullscreen_height=screen->h; TCOD_sys_init_screen_offset(); SDL_FillRect(screen,0,0); } else { #ifndef NO_OPENGL if (TCOD_ctx.renderer != TCOD_RENDERER_SDL ) { TCOD_opengl_init_attributes(); screen=SDL_SetVideoMode(w*TCOD_ctx.font_width,h*TCOD_ctx.font_height,32,SDL_OPENGL); if ( screen && TCOD_opengl_init_state(w, h, charmap) && TCOD_opengl_init_shaders() ) { TCOD_LOG(("Using %s renderer...\n",TCOD_ctx.renderer == TCOD_RENDERER_GLSL ? "GLSL" : "OPENGL")); } else { TCOD_LOG(("Fallback to SDL renderer...\n")); TCOD_ctx.renderer = TCOD_RENDERER_SDL; } } #endif if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { screen=SDL_SetVideoMode(w*TCOD_ctx.font_width,h*TCOD_ctx.font_height,32,0); TCOD_LOG(("Using SDL renderer...\n")); } if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot create window"); } SDL_EnableUNICODE(1); TCOD_ctx.fullscreen=fullscreen; }
void TCOD_sys_startup() { if (has_startup) return; if (SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) < 0 ) TCOD_fatal_nopar("SDL : cannot initialize"); atexit(SDL_Quit); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL); TCOD_max_font_chars=256; alloc_ascii_tables(); has_startup=true; }
bool TCOD_sys_init(int w,int h, char_t *buf, char_t *oldbuf, bool fullscreen) { FILE *f; if ( ! has_startup ) TCOD_sys_startup(); /* check if there is a user (player) config file */ f = fopen("./libtcod.cfg","r"); if ( f ) { fclose(f); /* yes, read it */ TCOD_sys_load_player_config(); if (TCOD_ctx.fullscreen) fullscreen=true; } if (! charmap) TCOD_sys_load_font(); if ( fullscreen ) { find_resolution(); if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { screen=SDL_SetVideoMode(TCOD_ctx.actual_fullscreen_width,TCOD_ctx.actual_fullscreen_height,32,SDL_FULLSCREEN); if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot set fullscreen video mode"); } SDL_ShowCursor(0); TCOD_ctx.actual_fullscreen_width=screen->w; TCOD_ctx.actual_fullscreen_height=screen->h; TCOD_ctx.fullscreen_offsetx=(TCOD_ctx.actual_fullscreen_width-TCOD_ctx.root->w*TCOD_ctx.font_width)/2; TCOD_ctx.fullscreen_offsety=(TCOD_ctx.actual_fullscreen_height-TCOD_ctx.root->h*TCOD_ctx.font_height)/2; SDL_FillRect(screen,0,0); } else { if (TCOD_ctx.renderer == TCOD_RENDERER_SDL ) { screen=SDL_SetVideoMode(w*TCOD_ctx.font_width,h*TCOD_ctx.font_height,32,0); TCOD_LOG(("Using SDL renderer...\n")); } if ( screen == NULL ) TCOD_fatal_nopar("SDL : cannot create window"); } SDL_EnableUNICODE(1); consoleBuffer=buf; prevConsoleBuffer=oldbuf; TCOD_ctx.fullscreen=fullscreen; memset(key_status,0,sizeof(bool)*(TCODK_CHAR+1)); memset(ascii_updated,0,sizeof(bool)*TCOD_ctx.max_font_chars); return true; }
void TCOD_sys_startup() { if (has_startup) return; #ifdef TCOD_MACOSX CustomSDLMain(); #endif if (SDL_Init(SDL_INIT_TIMER|SDL_INIT_VIDEO) < 0 ) TCOD_fatal_nopar("SDL : cannot initialize"); #ifndef TCOD_WINDOWS /* not needed and might crash on windows */ atexit(SDL_Quit); #endif SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL); TCOD_ctx.max_font_chars=256; alloc_ascii_tables(); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8); SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32 ); has_startup=true; }