Index: meson.build ================================================================== --- meson.build +++ meson.build @@ -7,16 +7,13 @@ '-fobjc-arc-exceptions' ], language: 'objcpp') objfw_dep = dependency('objfw') -sdl_dep = dependency('sdl12_compat', required: false) -if not sdl_dep.found() - sdl_dep = dependency('SDL') -endif -sdlimage_dep = dependency('SDL_image') -sdlmixer_dep = dependency('SDL_mixer') +sdl_dep = dependency('SDL2') +sdlimage_dep = dependency('SDL2_image') +sdlmixer_dep = dependency('SDL2_mixer') zlib_dep = dependency('zlib') client_link_args = [] server_link_args = [] extra_deps = [] Index: src/Cube.mm ================================================================== --- src/Cube.mm +++ src/Cube.mm @@ -52,10 +52,11 @@ if (!b) fatal(@"out of memory!"); return b; } +SDL_Window *window; int scr_w = 640; int scr_h = 480; void screenshot() @@ -88,16 +89,11 @@ } COMMAND(screenshot, ARG_NONE) COMMAND(quit, ARG_NONE) -void -keyrepeat(bool on) -{ - SDL_EnableKeyRepeat( - on ? SDL_DEFAULT_REPEAT_DELAY : 0, SDL_DEFAULT_REPEAT_INTERVAL); -} +bool keyrepeat = false; VARF(gamespeed, 10, 100, 1000, if (multiplayer()) gamespeed = 100); VARP(minmillis, 0, 5, 1000); int framesinmap = 0; @@ -174,18 +170,21 @@ if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) fatal(@"Unable to initialize SDL Video"); log("video: mode"); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - if (SDL_SetVideoMode(scr_w, scr_h, 0, - SDL_OPENGL | (!windowed ? SDL_FULLSCREEN : 0)) == NULL) + if ((window = SDL_CreateWindow("cube engine", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, scr_w, scr_h, + SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL | + (!windowed ? SDL_WINDOW_FULLSCREEN : 0))) == NULL || + SDL_GL_CreateContext(window) == NULL) fatal(@"Unable to create OpenGL screen"); log("video: misc"); - SDL_WM_SetCaption("cube engine", NULL); - SDL_WM_GrabInput(SDL_GRAB_ON); - keyrepeat(false); + SDL_SetWindowGrab(window, SDL_TRUE); + SDL_SetRelativeMouseMode(SDL_TRUE); + keyrepeat = false; SDL_ShowCursor(0); log("gl"); gl_init(scr_w, scr_h); @@ -239,11 +238,11 @@ serverslice((int)time(NULL), 0); static float fps = 30.0f; fps = (1000.0f / curtime + fps * 50) / 51; computeraytable(player1->o.x, player1->o.y); readdepth(scr_w, scr_h); - SDL_GL_SwapBuffers(); + SDL_GL_SwapWindow(window); extern void updatevol(); updatevol(); if (framesinmap++ < 5) // cheap hack to get rid of initial sparklies, even when // triple buffering etc. @@ -261,20 +260,21 @@ quit(); break; case SDL_KEYDOWN: case SDL_KEYUP: - keypress(event.key.keysym.sym, - event.key.state == SDL_PRESSED, - event.key.keysym.unicode); + if (keyrepeat || event.key.repeat == 0) + keypress(event.key.keysym.sym, + event.key.state == SDL_PRESSED, + event.key.keysym.sym); break; case SDL_MOUSEMOTION: if (ignore) { ignore--; break; - }; + } mousemove(event.motion.xrel, event.motion.yrel); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: Index: src/console.mm ================================================================== --- src/console.mm +++ src/console.mm @@ -124,13 +124,17 @@ COMMANDN(bind, bindkey, ARG_2STR) void saycommand(char *init) // turns input to the command line on or off { - SDL_EnableUNICODE(saycommandon = (init != NULL)); + saycommandon = (init != NULL); + if (saycommandon) + SDL_StartTextInput(); + else + SDL_StopTextInput(); if (!editmode) - keyrepeat(saycommandon); + keyrepeat = saycommandon; if (!init) init = ""; strcpy_s(commandbuf, init); } COMMAND(saycommand, ARG_VARI) @@ -142,56 +146,16 @@ strn0cpy(hdr.maptitle, s.UTF8String, 128); } } COMMAND(mapmsg, ARG_1STR) -#if !defined(OF_WINDOWS) && !defined(OF_MACOS) -# include -# include -#endif - void pasteconsole() { -#if defined(OF_WINDOWS) - if (!IsClipboardFormatAvailable(CF_TEXT)) - return; - if (!OpenClipboard(NULL)) - return; - char *cb = (char *)GlobalLock(GetClipboardData(CF_TEXT)); + char *cb = SDL_GetClipboardText(); strcat_s(commandbuf, cb); - GlobalUnlock(cb); - CloseClipboard(); -#elif !defined(OF_MACOS) - SDL_SysWMinfo wminfo; - SDL_VERSION(&wminfo.version); - wminfo.subsystem = SDL_SYSWM_X11; - if (!SDL_GetWMInfo(&wminfo)) - return; - int cbsize; - char *cb = XFetchBytes(wminfo.info.x11.display, &cbsize); - if (!cb || !cbsize) - return; - int commandlen = strlen(commandbuf); - for (char *cbline = cb, *cbend; - commandlen + 1 < _MAXDEFSTR && cbline < &cb[cbsize]; - cbline = cbend + 1) { - cbend = (char *)memchr(cbline, '\0', &cb[cbsize] - cbline); - if (!cbend) - cbend = &cb[cbsize]; - if (commandlen + cbend - cbline + 1 > _MAXDEFSTR) - cbend = cbline + _MAXDEFSTR - commandlen - 1; - memcpy(&commandbuf[commandlen], cbline, cbend - cbline); - commandlen += cbend - cbline; - commandbuf[commandlen] = '\n'; - if (commandlen + 1 < _MAXDEFSTR && cbend < &cb[cbsize]) - ++commandlen; - commandbuf[commandlen] = '\0'; - }; - XFree(cb); -#endif -}; +} cvector vhistory; int histpos = 0; void Index: src/editing.mm ================================================================== --- src/editing.mm +++ src/editing.mm @@ -66,12 +66,12 @@ player1->health = 100; if (m_classicsp) monsterclear(); // all monsters back at their spawns for // editing projreset(); - }; - keyrepeat(editmode); + } + keyrepeat = editmode; selset = false; editing = editmode; } COMMANDN(edittoggle, toggleedit, ARG_NONE) Index: src/protos.h ================================================================== --- src/protos.h +++ src/protos.h @@ -140,11 +140,12 @@ extern int isoccluded(float vx, float vy, float cx, float cy, float csize); // main extern void fatal(OFString *s, OFString *o = @""); extern void *alloc(int s); -extern void keyrepeat(bool on); +extern SDL_Window *window; +extern bool keyrepeat; // rendertext extern void draw_text(char *str, int left, int top, int gl_num); extern void draw_textf(char *fstr, int left, int top, int gl_num, ...); extern int text_width(char *str); Index: src/rendergl.mm ================================================================== --- src/rendergl.mm +++ src/rendergl.mm @@ -237,11 +237,11 @@ renderstripssky() { glBindTexture(GL_TEXTURE_2D, skyoglid); loopv(strips) if (strips[i].tex == skyoglid) glDrawArrays(GL_TRIANGLE_STRIP, strips[i].start, strips[i].num); -}; +} void renderstrips() { int lasttex = -1; @@ -248,39 +248,43 @@ loopv(strips) if (strips[i].tex != skyoglid) { if (strips[i].tex != lasttex) { glBindTexture(GL_TEXTURE_2D, strips[i].tex); lasttex = strips[i].tex; - }; + } glDrawArrays(GL_TRIANGLE_STRIP, strips[i].start, strips[i].num); - }; -}; + } +} void overbright(float amount) { if (hasoverbright) glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_EXT, amount); -}; +} void addstrip(int tex, int start, int n) { strip &s = strips.add(); s.tex = tex; s.start = start; s.num = n; -}; +} VARFP(gamma, 30, 100, 300, { float f = gamma / 100.0f; - if (SDL_SetGamma(f, f, f) == -1) { + Uint16 ramp[256]; + + SDL_CalculateGammaRamp(f, ramp); + + if (SDL_SetWindowGammaRamp(window, ramp, ramp, ramp) == -1) { conoutf( @"Could not set gamma (card/driver doesn't support it?)"); conoutf(@"sdl: %s", SDL_GetError()); - }; -}); + } +}) void transplayer() { glLoadIdentity(); Index: src/serverbrowser.mm ================================================================== --- src/serverbrowser.mm +++ src/serverbrowser.mm @@ -58,27 +58,29 @@ while (threads > 0) { resolverthread &rt = resolverthreads.add(); rt.query = NULL; rt.starttime = 0; - rt.thread = SDL_CreateThread(resolverloop, &rt); + rt.thread = + SDL_CreateThread(resolverloop, "resolverthread", &rt); --threads; - }; -}; + } +} void resolverstop(resolverthread &rt, bool restart) { SDL_LockMutex(resolvermutex); - SDL_KillThread(rt.thread); + // SDL_KillThread(rt.thread); rt.query = NULL; rt.starttime = 0; rt.thread = NULL; if (restart) - rt.thread = SDL_CreateThread(resolverloop, &rt); + rt.thread = + SDL_CreateThread(resolverloop, "resolverthread", &rt); SDL_UnlockMutex(resolvermutex); -}; +} void resolverclear() { SDL_LockMutex(resolvermutex);