1
0
Fork 0
forked from fte/fteqw

Try to disable mouse accel in chromium. Use RAF timing for better precision to try to get smoother in-browser framerates.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6080 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2021-10-12 04:41:49 +00:00
parent 06a8133048
commit 7d7cb5f40c
5 changed files with 51 additions and 43 deletions

View file

@ -2281,16 +2281,16 @@ endif
web-rel: web-rel:
@PATH="$(EMSCRIPTENPATH)" $(MAKE) gl-rel FTE_TARGET=web CC="$(EMCC)" @PATH="$(EMSCRIPTENPATH)" $(MAKE) gl-rel FTE_TARGET=web CC="$(EMCC)"
cp $(BASE_DIR)/web/fteshell.html $(RELEASE_DIR)/ftewebgl.html cp $(BASE_DIR)/web/fteshell.html $(RELEASE_DIR)/ftewebgl.html
@gzip -f $(RELEASE_DIR)/ftewebgl.html @gzip -kf $(RELEASE_DIR)/ftewebgl.html
@gzip -f $(RELEASE_DIR)/ftewebgl.js @gzip -kf $(RELEASE_DIR)/ftewebgl.js
@gzip -f $(RELEASE_DIR)/ftewebgl.wasm @gzip -kf $(RELEASE_DIR)/ftewebgl.wasm
web-dbg: web-dbg:
@PATH="$(EMSCRIPTENPATH)" $(MAKE) gl-dbg FTE_TARGET=web CC="$(EMCC)" @PATH="$(EMSCRIPTENPATH)" $(MAKE) gl-dbg FTE_TARGET=web CC="$(EMCC)"
cp $(BASE_DIR)/web/fteshell.html $(DEBUG_DIR)/ftewebgl.html cp $(BASE_DIR)/web/fteshell.html $(DEBUG_DIR)/ftewebgl.html
@gzip -f $(DEBUG_DIR)/ftewebgl.html @gzip -kf $(DEBUG_DIR)/ftewebgl.html
@gzip -f $(DEBUG_DIR)/ftewebgl.js @gzip -kf $(DEBUG_DIR)/ftewebgl.js
@gzip -f $(DEBUG_DIR)/ftewebgl.wasm @gzip -kf $(DEBUG_DIR)/ftewebgl.wasm
################################################# #################################################
#android #android

View file

@ -13,12 +13,7 @@ static struct dl_download *activedownloads;
#if defined(FTE_TARGET_WEB) #if defined(FTE_TARGET_WEB)
#define MYJS 1
#if MYJS
#include "web/ftejslib.h" #include "web/ftejslib.h"
#else
#include <emscripten/emscripten.h>
#endif
vfsfile_t *FSWEB_OpenTempHandle(int f); vfsfile_t *FSWEB_OpenTempHandle(int f);
@ -32,7 +27,6 @@ static void DL_OnLoad(void *c, int buf)
//also fires from 404s. //also fires from 404s.
struct dl_download *dl = c; struct dl_download *dl = c;
vfsfile_t *tempfile = FSWEB_OpenTempHandle(buf); vfsfile_t *tempfile = FSWEB_OpenTempHandle(buf);
//make sure the file is 'open'. //make sure the file is 'open'.
if (!dl->file) if (!dl->file)
{ {
@ -76,26 +70,15 @@ static void DL_OnLoad(void *c, int buf)
VFS_CLOSE(tempfile); VFS_CLOSE(tempfile);
dl->replycode = 200; dl->replycode = 200;
#if !MYJS
dl->completed += datasize;
#endif
} }
#if MYJS
static void DL_OnError(void *c, int ecode) static void DL_OnError(void *c, int ecode)
#else
static void DL_OnError(void *c)
#endif
{ {
struct dl_download *dl = c; struct dl_download *dl = c;
//fires from cross-domain blocks, tls errors, etc. //fires from cross-domain blocks, tls errors, etc.
//anything which doesn't yield an http response (404 is NOT an error as far as js is aware). //anything which doesn't yield an http response (404 is NOT an error as far as js is aware).
#if MYJS
dl->replycode = ecode; dl->replycode = ecode;
#else Con_Printf(CON_WARNING"dl error(%i): %s\n", ecode, dl->url);
dl->replycode = 404; //we don't actually know. should we not do this?
#endif
Con_Printf(CON_WARNING"dl error: %s\n", dl->url);
dl->status = DL_FAILED; dl->status = DL_FAILED;
} }
static void DL_OnProgress(void *c, int position, int totalsize) static void DL_OnProgress(void *c, int position, int totalsize)
@ -112,9 +95,8 @@ qboolean DL_Decide(struct dl_download *dl)
const char *url = dl->redir; const char *url = dl->redir;
if (!*url) if (!*url)
url = dl->url; url = dl->url;
if (dl->postdata) if (dl->postdata)
{ { //not supported...
DL_Cancel(dl); DL_Cancel(dl);
return false; //safe to destroy it now return false; //safe to destroy it now
} }
@ -129,19 +111,18 @@ qboolean DL_Decide(struct dl_download *dl)
return false; return false;
} }
} }
else else if (dl->status == DL_PENDING)
{ {
dl->status = DL_ACTIVE; dl->status = DL_ACTIVE;
dl->abort = DL_Cancel; dl->abort = DL_Cancel;
dl->ctx = dl; dl->ctx = dl;
#if MYJS
emscriptenfte_async_wget_data2(url, dl, DL_OnLoad, DL_OnError, DL_OnProgress); emscriptenfte_async_wget_data2(url, dl, DL_OnLoad, DL_OnError, DL_OnProgress);
#else }
//annoyingly, emscripten doesn't provide an onprogress callback, unlike firefox etc, so we can't actually tell how far its got. else if (dl->status == DL_ACTIVE)
//we'd need to provide our own js library to fix this. it can be done, I'm just lazy. { //canceled?
emscripten_async_wget_data(url, dl, DL_OnLoad, DL_OnError); dl->status = DL_FAILED;
#endif return false;
} }
return true; return true;

View file

@ -31,7 +31,7 @@ void emscriptenfte_rtc_candidate(int sock, const char *offer); //adds a remot
//misc stuff for printf replacements //misc stuff for printf replacements
void emscriptenfte_alert(const char *msg); void emscriptenfte_alert(const char *msg);
void emscriptenfte_print(const char *msg); void emscriptenfte_print(const char *msg);
void emscriptenfte_setupmainloop(int(*mainloop)(void)); void emscriptenfte_setupmainloop(int(*mainloop)(double timestamp));
NORETURN void emscriptenfte_abortmainloop(const char *caller); NORETURN void emscriptenfte_abortmainloop(const char *caller);
//we're trying to avoid including libpng+libjpeg+libogg in javascript due to it being redundant bloat. //we're trying to avoid including libpng+libjpeg+libogg in javascript due to it being redundant bloat.
@ -42,6 +42,7 @@ void emscriptenfte_al_loadaudiofile(int al_buf, void *data, int datasize);
//avoid all of emscripten's sdl emulation. //avoid all of emscripten's sdl emulation.
//this resolves input etc issues. //this resolves input etc issues.
unsigned long emscriptenfte_ticks_ms(void); unsigned long emscriptenfte_ticks_ms(void);
double emscriptenfte_uptime_ms(void);
void emscriptenfte_updatepointerlock(int wantpointerlock, int hidecursor); void emscriptenfte_updatepointerlock(int wantpointerlock, int hidecursor);
void emscriptenfte_polljoyevents(void); void emscriptenfte_polljoyevents(void);
void emscriptenfte_settitle(const char *text); void emscriptenfte_settitle(const char *text);

View file

@ -156,7 +156,7 @@ mergeInto(LibraryManager.library,
if (FTEC.pointerwantlock != 0 && FTEC.pointerislocked == 0) if (FTEC.pointerwantlock != 0 && FTEC.pointerislocked == 0)
{ {
FTEC.pointerislocked = -1; //don't repeat the request on every click. firefox has a fit at that, so require the mouse to leave the element or something before we retry. FTEC.pointerislocked = -1; //don't repeat the request on every click. firefox has a fit at that, so require the mouse to leave the element or something before we retry.
Module['canvas'].requestPointerLock(); Module['canvas'].requestPointerLock({unadjustedMovement: true});
} }
if (FTEC.usevr) if (FTEC.usevr)
@ -547,7 +547,7 @@ mergeInto(LibraryManager.library,
try //this try is needed to handle Host_EndGame properly. try //this try is needed to handle Host_EndGame properly.
{ {
dovsync = {{{makeDynCall('i')}}}(fnc); dovsync = {{{makeDynCall('if')}}}(fnc,timestamp);
} }
catch(err) catch(err)
{ {
@ -563,17 +563,21 @@ mergeInto(LibraryManager.library,
Browser.requestAnimationFrame(Module["sched"]); Browser.requestAnimationFrame(Module["sched"]);
} }
else else
setTimeout(Module["sched"], 0); setTimeout(Module["sched"], 0, performance.now());
}; };
Module["sched"] = step; Module["sched"] = step;
//don't start it instantly, so we can distinguish between types of errors (emscripten sucks!). //don't start it instantly, so we can distinguish between types of errors (emscripten sucks!).
setTimeout(step, 1); setTimeout(step, 1, performance.now());
}, },
emscriptenfte_ticks_ms : function() emscriptenfte_ticks_ms : function()
{ { //milliseconds...
return Date.now(); return Date.now();
}, },
emscriptenfte_uptime_ms : function()
{ //milliseconds...
return performance.now();
},
emscriptenfte_buf_create__deps : ['emscriptenfte_handle_alloc'], emscriptenfte_buf_create__deps : ['emscriptenfte_handle_alloc'],
emscriptenfte_buf_create : function() emscriptenfte_buf_create : function()

View file

@ -57,6 +57,21 @@ void Sys_Printf (char *fmt, ...)
va_end (argptr); va_end (argptr);
} }
#if 1
//use Performance.now() instead of Date.now() - its likely to both provide higher precision and no NTP/etc issues.
double Sys_DoubleTime (void)
{
double t = emscriptenfte_uptime_ms()/1000; //we need it as seconds...
static double old = -99999999;
if (t < old)
t = old; //don't let t step backwards, ever. this shouldn't happen, but some CPUs don't keep their high-precision timers synced properly.
return old=t;
}
unsigned int Sys_Milliseconds(void)
{
return Sys_DoubleTime() * (uint64_t)1000;
}
#else
unsigned int Sys_Milliseconds(void) unsigned int Sys_Milliseconds(void)
{ {
static int first = true; static int first = true;
@ -83,6 +98,7 @@ double Sys_DoubleTime (void)
{ {
return Sys_Milliseconds() / 1000.0; return Sys_Milliseconds() / 1000.0;
} }
#endif
//create a directory //create a directory
void Sys_mkdir (const char *path) void Sys_mkdir (const char *path)
@ -196,12 +212,18 @@ void Sys_CloseTerminal (void)
{ {
} }
int Sys_MainLoop(void) int Sys_MainLoop(double newtime)
{ {
extern cvar_t vid_vsync; extern cvar_t vid_vsync;
static float oldtime; static double oldtime;
float newtime, time; double time;
newtime = Sys_DoubleTime ();
if (newtime)
newtime /= 1000; //use RAF's timing for slightly greater precision.
else
newtime = Sys_DoubleTime (); //otherwise fall back on internally consistent timing...
if (newtime < oldtime)
newtime = oldtime; //don't let ourselves go backwards...
if (!oldtime) if (!oldtime)
oldtime = newtime; oldtime = newtime;
time = newtime - oldtime; time = newtime - oldtime;