Port to SDL2

FossilOrigin-Name: 42d4b57828b48b9e38d8be3edcebca4c7cbca9948d8792a320df1f92c13465be
This commit is contained in:
Jonathan Schleifer 2025-03-04 23:51:09 +00:00
parent c3cd8d4fac
commit 3a1bbe3110
7 changed files with 52 additions and 84 deletions

View file

@ -54,6 +54,7 @@ alloc(int s) // for some big chunks... most other allocs use the memory pool
return b;
}
SDL_Window *window;
int scr_w = 640;
int scr_h = 480;
@ -90,12 +91,7 @@ screenshot()
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);
@ -176,14 +172,17 @@ int framesinmap = 0;
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");
@ -241,7 +240,7 @@ int framesinmap = 0;
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++ <
@ -263,16 +262,17 @@ int framesinmap = 0;
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;

View file

@ -126,9 +126,13 @@ 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);
@ -144,52 +148,12 @@ mapmsg(OFString *s)
}
COMMAND(mapmsg, ARG_1STR)
#if !defined(OF_WINDOWS) && !defined(OF_MACOS)
# include <SDL_syswm.h>
# include <X11/Xlib.h>
#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;

View file

@ -68,8 +68,8 @@ toggleedit()
monsterclear(); // all monsters back at their spawns for
// editing
projreset();
};
keyrepeat(editmode);
}
keyrepeat = editmode;
selset = false;
editing = editmode;
}

View file

@ -142,7 +142,8 @@ 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);

View file

@ -239,7 +239,7 @@ 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()
@ -250,17 +250,17 @@ renderstrips()
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)
@ -269,16 +269,20 @@ addstrip(int tex, int start, int n)
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()

View file

@ -60,23 +60,25 @@ resolverinit(int threads, int limit)
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()