void setfullscreen(bool enable) { if(!screen) return; #if defined(WIN32) || defined(__APPLE__) initwarning(enable ? "fullscreen" : "windowed"); #else if(enable == !(screen->flags&SDL_FULLSCREEN)) { SDL_WM_ToggleFullScreen(screen); inputgrab(grabinput); } #endif }
void setfullscreen(bool enable, bool force) { if(!screen) return; fullscreen = enable ? 1 : 0; #if defined(WIN32) || defined(__APPLE__) initwarning(enable ? "fullscreen" : "windowed", INIT_RESET, CHANGE_GFX, force); #else if(enable == !(screen->flags&SDL_FULLSCREEN)) { SDL_WM_ToggleFullScreen(screen); inputgrab(grabinput!=0); } #endif }
void screenres(int *w, int *h) { #if !defined(WIN32) && !defined(__APPLE__) if(initing >= INIT_RESET) { #endif scr_w = clamp(*w, SCR_MINW, SCR_MAXW); scr_h = clamp(*h, SCR_MINH, SCR_MAXH); #if defined(WIN32) || defined(__APPLE__) initwarning("screen resolution"); #else return; } SDL_Surface *surf = SDL_SetVideoMode(clamp(*w, SCR_MINW, SCR_MAXW), clamp(*h, SCR_MINH, SCR_MAXH), 0, SDL_OPENGL|(screen->flags&SDL_FULLSCREEN ? SDL_FULLSCREEN : SDL_RESIZABLE)); if(!surf) return; screen = surf; scr_w = screen->w; scr_h = screen->h; glViewport(0, 0, scr_w, scr_h); #endif }
{ if(initing < level) { addchange(desc, type); return true; } return false; } #define SCR_MINW 320 #define SCR_MINH 200 #define SCR_MAXW 10000 #define SCR_MAXH 10000 #define SCR_DEFAULTW 1024 #define SCR_DEFAULTH 768 VARF(scr_w, SCR_MINW, -1, SCR_MAXW, initwarning("screen resolution")); VARF(scr_h, SCR_MINH, -1, SCR_MAXH, initwarning("screen resolution")); VARF(colorbits, 0, 0, 32, initwarning("color depth")); VARF(depthbits, 0, 0, 32, initwarning("depth-buffer precision")); VARF(stencilbits, 0, 0, 32, initwarning("stencil-buffer precision")); VARF(fsaa, -1, -1, 16, initwarning("anti-aliasing")); VARF(vsync, -1, -1, 1, initwarning("vertical sync")); void writeinitcfg() { stream *f = openutf8file("init.cfg", "w"); if(!f) return; f->printf("// automatically written on exit, DO NOT MODIFY\n// modify settings in game\n"); extern int fullscreen; f->printf("fullscreen %d\n", fullscreen); f->printf("scr_w %d\n", scr_w);
char *musicfile = NULL, *musicdonecmd = NULL; void stopsound() { if(nosound) return; DELETEA(musicfile); DELETEA(musicdonecmd); if(mod) { Mix_HaltMusic(); Mix_FreeMusic(mod); mod = NULL; } } VARF(soundchans, 0, 32, 128, initwarning("sound configuration", INIT_RESET, CHANGE_SOUND)); VARF(soundfreq, 0, MIX_DEFAULT_FREQUENCY, 44100, initwarning("sound configuration", INIT_RESET, CHANGE_SOUND)); VARF(soundbufferlen, 128, 1024, 4096, initwarning("sound configuration", INIT_RESET, CHANGE_SOUND)); void initsound() { if(Mix_OpenAudio(soundfreq, MIX_DEFAULT_FORMAT, 2, soundbufferlen)<0) { conoutf(CON_ERROR, "sound init failed (SDL_mixer): %s", (size_t)Mix_GetError()); return; } Mix_AllocateChannels(soundchans); nosound = false; } void musicdone()
#define SCR_MAXH 10000 #define SCR_DEFAULTW 1024 #define SCR_DEFAULTH 768 /// function forward to change screen resolution void screenres(int w, int h); ICOMMAND(screenres, "ii", (int *w, int *h), screenres(*w, *h)); /// change screen width and height VARF(scr_w, SCR_MINW, -1, SCR_MAXW, screenres(scr_w, -1)); VARF(scr_h, SCR_MINH, -1, SCR_MAXH, screenres(-1, scr_h)); /// various buffer precisions and anti aliasing /// @see initwarning VAR(colorbits, 0, 0, 32); VARF(depthbits, 0, 0, 32, initwarning("depth-buffer precision")); VARF(stencilbits, 0, 0, 32, initwarning("stencil-buffer precision")); VARF(fsaa, -1, -1, 16, initwarning("anti-aliasing")); /// "use this function to set the swap interval for the current OpenGL context" (VSYNC) void restorevsync() { /// https://wiki.libsdl.org/SDL_GL_SetSwapInterval if(glcontext) SDL_GL_SetSwapInterval(vsync ? (vsynctear ? -1 : 1) : 0); } /// VSYNC settings VARFP(vsync, 0, 0, 1, restorevsync()); VARFP(vsynctear, 0, 0, 1, { if(vsync) restorevsync(); }); /// write most important settings to init.cfg using an UTF-8 stream
{ if(initing < level) { addchange(desc, type); return true; } return false; } #define SCR_MINW 320 #define SCR_MINH 200 #define SCR_MAXW 10000 #define SCR_MAXH 10000 #define SCR_DEFAULTW 1024 #define SCR_DEFAULTH 768 VARF(scr_w, SCR_MINW, -1, SCR_MAXW, initwarning("screen resolution")); VARF(scr_h, SCR_MINH, -1, SCR_MAXH, initwarning("screen resolution")); void writeinitcfg() { stream *f = openutf8file("init.cfg", "w"); if(!f) return; f->printf("// automatically written on exit, DO NOT MODIFY\n// modify settings in game\n"); extern int fullscreen; f->printf("fullscreen %d\n", fullscreen); f->printf("scr_w %d\n", scr_w); f->printf("scr_h %d\n", scr_h); extern int sound, soundchans, soundfreq, soundbufferlen; f->printf("sound %d\n", sound); f->printf("soundchans %d\n", soundchans); f->printf("soundfreq %d\n", soundfreq);
// audio interface of the engine #include "cube.h" #define DEBUGCOND (audiodebug==1) VARF(audio, 0, 1, 1, initwarning("sound configuration", INIT_RESET, CHANGE_SOUND)); VARP(audiodebug, 0, 0, 1); char *musicdonecmd = NULL; VARFP(musicvol, 0, 128, 255, audiomgr.setmusicvol(musicvol)); // audio manager audiomanager::audiomanager() { nosound = true; currentpitch = 1.0f; device = NULL; context = NULL; } void audiomanager::initsound() { if(!audio) { conoutf("audio is disabled"); return; } nosound = true;