2013-12-19 18:41:57 +00:00
mergeInto ( LibraryManager . library ,
{
//generic handles array
//yeah, I hope you don't use-after-free. hopefully that sort of thing will be detected on systems with easier non-mangled debuggers.
2021-10-22 22:27:58 +00:00
// $FTEH__deps: [],
// $FTEH: {
// h: [],
// f: {}
// },
2013-12-19 18:41:57 +00:00
2014-09-02 02:44:43 +00:00
//FIXME: split+merge by \n
emscriptenfte _print : function ( msg )
{
2021-10-05 05:05:50 +00:00
FTEC . linebuffer += UTF8ToString ( msg ) ;
2014-09-02 02:44:43 +00:00
for ( ; ; )
{
nl = FTEC . linebuffer . indexOf ( "\n" ) ;
if ( nl == - 1 )
break ;
console . log ( FTEC . linebuffer . substring ( 0 , nl ) ) ;
FTEC . linebuffer = FTEC . linebuffer . substring ( nl + 1 ) ;
}
} ,
emscriptenfte _alert : function ( msg )
{
2021-10-05 05:05:50 +00:00
msg = UTF8ToString ( msg ) ;
2014-09-02 02:44:43 +00:00
console . log ( msg ) ;
alert ( msg ) ;
} ,
2016-07-15 12:26:24 +00:00
emscriptenfte _window _location : function ( msg )
{
2021-10-05 05:05:50 +00:00
msg = UTF8ToString ( msg ) ;
2016-07-15 12:26:24 +00:00
console . log ( "Redirecting page to " + msg ) ;
window . location = msg ;
} ,
2014-09-02 02:44:43 +00:00
2021-10-22 22:27:58 +00:00
// emscriptenfte_handle_alloc__deps : ['$FTEH'],
2014-09-08 23:47:19 +00:00
emscriptenfte _handle _alloc : function ( h )
{
for ( var i = 0 ; FTEH . h . length ; i += 1 )
{
if ( FTEH . h [ i ] == null )
{
FTEH . h [ i ] = h ;
return i ;
}
}
i = FTEH . h . length ;
FTEH . h [ i ] = h ;
return i ;
} ,
//temp files
emscriptenfte _buf _createfromarraybuf _ _deps : [ 'emscriptenfte_handle_alloc' ] ,
emscriptenfte _buf _createfromarraybuf : function ( buf )
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
buf = new Uint8Array ( buf ) ;
2014-09-08 23:47:19 +00:00
var len = buf . length ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var b = { h : - 1 , r : 1 , l : len , m : len , d : buf , n : null } ;
2014-09-08 23:47:19 +00:00
b . h = _emscriptenfte _handle _alloc ( b ) ;
return b . h ;
} ,
$FTEC _ _deps : [ 'emscriptenfte_buf_createfromarraybuf' ] ,
2013-12-19 18:41:57 +00:00
$FTEC :
{
2014-09-02 02:44:43 +00:00
ctxwarned : 0 ,
2015-08-20 03:17:47 +00:00
pointerislocked : 0 ,
pointerwantlock : 0 ,
2022-02-07 14:33:44 +00:00
clipboard : "" ,
2014-08-27 08:41:31 +00:00
linebuffer : '' ,
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
localstorefailure : false ,
2013-12-19 18:41:57 +00:00
w : - 1 ,
h : - 1 ,
donecb : 0 ,
evcb : {
resize : 0 ,
mouse : 0 ,
2014-12-11 16:26:26 +00:00
button : 0 ,
key : 0 ,
loadfile : 0 ,
2021-10-31 18:20:51 +00:00
cbufaddtext : 0 ,
2014-12-11 16:26:26 +00:00
jbutton : 0 ,
jaxis : 0 ,
2021-10-22 22:27:28 +00:00
wantfullscreen : 0 ,
frame : 0
2013-12-19 18:41:57 +00:00
} ,
2015-04-14 23:12:17 +00:00
loadurl : function ( url , mime , arraybuf )
2014-09-08 23:47:19 +00:00
{
if ( FTEC . evcb . loadfile != 0 )
{
2021-10-31 18:20:51 +00:00
let handle = - 1 ;
2014-09-08 23:47:19 +00:00
if ( arraybuf !== undefined )
handle = _emscriptenfte _buf _createfromarraybuf ( arraybuf ) ;
2021-10-31 18:20:51 +00:00
let blen = lengthBytesUTF8 ( url ) + 1 ;
let urlptr = _malloc ( blen ) ;
stringToUTF8 ( url , urlptr , blen ) ;
blen = lengthBytesUTF8 ( mime ) + 1 ;
let mimeptr = _malloc ( blen ) ;
stringToUTF8 ( mime , mimeptr , blen ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.loadfile' ) } } } ( urlptr , mimeptr , handle ) ;
2015-04-14 23:12:17 +00:00
_free ( mimeptr ) ;
_free ( urlptr ) ;
window . focus ( ) ;
2014-09-08 23:47:19 +00:00
}
} ,
2021-10-31 18:20:51 +00:00
cbufadd : function ( command )
{
if ( FTEC . evcb . cbufaddtext != 0 )
{
let handle = - 1 ;
let blen = lengthBytesUTF8 ( command ) + 1 ;
let ptr = _malloc ( blen ) ;
stringToUTF8 ( command , ptr , blen ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vi' , 'FTEC.evcb.cbufaddtext' ) } } } ( ptr ) ;
2021-10-31 18:20:51 +00:00
_free ( ptr ) ;
window . focus ( ) ;
}
} ,
2014-09-08 23:47:19 +00:00
2021-10-22 22:27:28 +00:00
step : function ( timestamp )
{
var dovsync = false ;
if ( FTEC . aborted )
return ;
try //this try is needed to handle Host_EndGame properly.
{
2022-06-20 04:54:54 +00:00
dovsync = { { { makeDynCall ( 'if' , 'FTEC.evcb.frame' ) } } } ( timestamp ) ;
2021-10-22 22:27:28 +00:00
}
catch ( err )
{
console . log ( err ) ;
}
if ( dovsync )
Browser . requestAnimationFrame ( FTEC . step ) ;
else
setTimeout ( FTEC . step , 0 , performance . now ( ) ) ;
} ,
2013-12-19 18:41:57 +00:00
handleevent : function ( event )
{
switch ( event . type )
{
2015-04-14 23:12:17 +00:00
case 'message' :
console . log ( event ) ;
console . log ( event . data ) ;
FTEC . loadurl ( event . data . url , event . data . cmd , undefined ) ;
break ;
2013-12-19 18:41:57 +00:00
case 'resize' :
if ( FTEC . evcb . resize != 0 )
2017-07-31 17:15:37 +00:00
{
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'FTEC.evcb.resize' ) } } } ( Module [ 'canvas' ] . width , Module [ 'canvas' ] . height ) ;
2017-07-31 17:15:37 +00:00
}
2013-12-19 18:41:57 +00:00
break ;
case 'mousemove' :
if ( FTEC . evcb . mouse != 0 )
{
if ( Browser . pointerLock )
{
if ( typeof event . movementX === 'undefined' )
{
event . movementX = event . mozMovementX ;
event . movementY = event . mozMovementY ;
}
if ( typeof event . movementX === 'undefined' )
{
event . movementX = event . webkitMovementX ;
event . movementY = event . webkitMovementY ;
}
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiffff' , 'FTEC.evcb.mouse' ) } } } ( 0 , false , event . movementX , event . movementY , 0 , 0 ) ;
2013-12-19 18:41:57 +00:00
}
else
2017-07-31 17:15:37 +00:00
{
var rect = Module [ 'canvas' ] . getBoundingClientRect ( ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiffff' , 'FTEC.evcb.mouse' ) } } } ( 0 , true , ( event . clientX - rect . left ) * ( Module [ 'canvas' ] . width / rect . width ) , ( event . clientY - rect . top ) * ( Module [ 'canvas' ] . height / rect . height ) , 0 , 0 ) ;
2017-07-31 17:15:37 +00:00
}
2013-12-19 18:41:57 +00:00
}
break ;
case 'mousedown' :
2015-04-14 23:12:17 +00:00
window . focus ( ) ;
2015-08-20 03:17:47 +00:00
//older browsers need fullscreen in order for requestPointerLock to work.
//newer browsers can still break pointer locks when alt-tabbing, even without breaking fullscreen.
//so lets spam requests for it
2021-10-22 22:27:58 +00:00
if ( ! document . fullscreenElement )
if ( FTEC . evcb . wantfullscreen != 0 )
2022-06-20 04:54:54 +00:00
if ( { { { makeDynCall ( 'i' , 'FTEC.evcb.wantfullscreen' ) } } } ( ) )
2022-01-28 10:48:07 +00:00
{
try
{
Module [ 'canvas' ] . requestFullscreen ( ) ;
}
catch ( e )
{
console . log ( "requestFullscreen:" ) ;
console . log ( e ) ;
}
}
2015-08-20 03:17:47 +00:00
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.
2022-01-28 10:48:07 +00:00
Module [ 'canvas' ] . requestPointerLock ( { unadjustedMovement : true } ) . catch ( ( ) => {
Module [ 'canvas' ] . requestPointerLock ( ) . then ( ( ) => {
console . log ( "Your shitty browser doesn't support disabling mouse acceleration." ) ;
} ) . catch ( ( ) => {
FTEC . pointerislocked = 0 ; //failure. no real idea why. try again next frame though...
} ) ;
} ) ;
2014-08-25 07:35:41 +00:00
}
2015-08-20 03:17:47 +00:00
//fallthrough
2013-12-19 18:41:57 +00:00
case 'mouseup' :
if ( FTEC . evcb . button != 0 )
{
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.button' ) } } } ( 0 , event . type == 'mousedown' , event . button ) ;
2013-12-19 18:41:57 +00:00
event . preventDefault ( ) ;
}
break ;
case 'mousewheel' :
case 'wheel' :
if ( FTEC . evcb . button != 0 )
{
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.button' ) } } } ( 0 , 2 , event . deltaY ) ;
2013-12-19 18:41:57 +00:00
event . preventDefault ( ) ;
}
break ;
case 'mouseout' :
if ( FTEC . evcb . button != 0 )
{
for ( var i = 0 ; i < 8 ; i ++ )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.button' ) } } } ( 0 , false , i ) ;
2013-12-19 18:41:57 +00:00
}
2015-08-20 03:17:47 +00:00
if ( FTEC . pointerislocked == - 1 )
FTEC . pointerislocked = 0 ;
break ;
case 'focus' :
case 'blur' :
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , false , 16 , 0 ) ; //shift
{ { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , false , 17 , 0 ) ; //alt
{ { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , false , 18 , 0 ) ; //ctrl
2015-08-20 03:17:47 +00:00
if ( FTEC . pointerislocked == - 1 )
FTEC . pointerislocked = 0 ;
2013-12-19 18:41:57 +00:00
break ;
case 'keypress' :
if ( FTEC . evcb . key != 0 )
{
2014-12-11 16:26:26 +00:00
if ( event . charCode >= 122 && event . charCode <= 123 ) //no f11/f12
break ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , 1 , 0 , event . charCode ) ;
{ { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , 0 , 0 , event . charCode ) ;
2013-12-19 18:41:57 +00:00
event . preventDefault ( ) ;
2015-04-14 23:12:17 +00:00
event . stopPropagation ( ) ;
2013-12-19 18:41:57 +00:00
}
break ;
case 'keydown' :
case 'keyup' :
//122 is 'toggle fullscreen'.
//we don't steal that because its impossible to leave it again once used.
if ( FTEC . evcb . key != 0 && event . keyCode != 122 )
{
2022-06-20 04:54:54 +00:00
if ( { { { makeDynCall ( 'iiiii' , 'FTEC.evcb.key' ) } } } ( 0 , event . type == 'keydown' , event . keyCode , 0 ) )
2013-12-19 18:41:57 +00:00
event . preventDefault ( ) ;
}
break ;
2014-09-02 06:01:03 +00:00
case 'touchstart' :
case 'touchend' :
case 'touchcancel' :
case 'touchleave' :
case 'touchmove' :
var touches = event . changedTouches ;
for ( var i = 0 ; i < touches . length ; i ++ )
{
var t = touches [ i ] ;
if ( FTEC . evcb . mouse )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiffff' , 'FTEC.evcb.mouse' ) } } } ( t . identifier + 1 , true , t . pageX , t . pageY , 0 , Math . sqrt ( t . radiusX * t . radiusX + t . radiusY * t . radiusY ) ) ;
2014-09-02 06:01:03 +00:00
if ( FTEC . evcb . button )
{
if ( event . type == 'touchstart' )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.button' ) } } } ( t . identifier + 1 , 1 , 0 ) ;
2014-09-02 06:01:03 +00:00
else if ( event . type != 'touchmove' )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'FTEC.evcb.button' ) } } } ( t . identifier + 1 , 0 , 0 ) ;
2014-09-02 06:01:03 +00:00
}
}
event . preventDefault ( ) ;
break ;
2014-09-08 23:47:19 +00:00
case 'dragenter' :
case 'dragover' :
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
break ;
case 'drop' :
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
var files = event . dataTransfer . files ;
for ( var i = 0 ; i < files . length ; i ++ )
{
var file = files [ i ] ;
var reader = new FileReader ( ) ;
reader . onload = function ( evt )
{
2015-04-14 23:12:17 +00:00
FTEC . loadurl ( file . name , "" , evt . target . result ) ;
2014-09-08 23:47:19 +00:00
} ;
reader . readAsArrayBuffer ( file ) ;
}
break ;
2014-10-11 19:39:45 +00:00
case 'gamepadconnected' :
var gp = e . gamepad ;
if ( FTEH . gamepads === undefined )
FTEH . gamepads = [ ] ;
FTEH . gamepads [ gp . index ] = gp ;
console . log ( "Gamepad connected at index %d: %s. %d buttons, %d axes." , gp . index , gp . id , gp . buttons . length , gp . axes . length ) ;
break ;
case 'gamepaddisconnected' :
var gp = e . gamepad ;
delete FTEH . gamepads [ gp . index ] ;
if ( FTEC . evcb . jaxis ) //try and clear out the axis when released.
for ( var j = 0 ; j < 6 ; j += 1 )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viifi' , 'FTEC.evcb.jaxis' ) } } } ( gp . index , j , 0 , true ) ;
2014-10-11 19:39:45 +00:00
if ( FTEC . evcb . jbutton ) //try and clear out the axis when released.
for ( var j = 0 ; j < 32 + 4 ; j += 1 )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiii' , 'FTEC.evcb.jbutton' ) } } } ( gp . index , j , 0 , true ) ;
2014-10-11 19:39:45 +00:00
console . log ( "Gamepad disconnected from index %d: %s" , gp . index , gp . id ) ;
break ;
2022-01-28 10:48:07 +00:00
case 'pointerlockerror' :
2015-08-20 03:17:47 +00:00
case 'pointerlockchange' :
case 'mozpointerlockchange' :
case 'webkitpointerlockchange' :
FTEC . pointerislocked = document . pointerLockElement === Module [ 'canvas' ] ||
document . mozPointerLockElement === Module [ 'canvas' ] ||
document . webkitPointerLockElement === Module [ 'canvas' ] ;
console . log ( "Pointer lock now " + FTEC . pointerislocked ) ;
break ;
2016-12-19 13:31:05 +00:00
2021-10-05 05:05:50 +00:00
case 'beforeunload' :
event . preventDefault ( ) ;
return 'quit this game like everything else?' ;
2013-12-19 18:41:57 +00:00
default :
console . log ( event ) ;
2014-09-02 06:01:03 +00:00
break ;
2013-12-19 18:41:57 +00:00
}
}
} ,
2015-08-20 03:17:47 +00:00
emscriptenfte _updatepointerlock : function ( wantlock , softcursor )
{
FTEC . pointerwantlock = wantlock ;
//we can only apply locks when we're clicked, but should be able to unlock any time.
if ( wantlock == 0 && FTEC . pointerislocked != 0 )
{
document . exitPointerLock = document . exitPointerLock ||
document . mozExitPointerLock ||
document . webkitExitPointerLock ;
FTEC . pointerislocked = 0 ;
if ( document . exitPointerLock )
document . exitPointerLock ( ) ;
}
if ( softcursor )
Module . canvas . style . cursor = "none" ; //hide the cursor, we'll do a soft-cursor when one is needed.
else
Module . canvas . style . cursor = "default" ; //restore the cursor
} ,
emscriptenfte _polljoyevents : function ( )
2014-10-11 19:39:45 +00:00
{
//with events, we can do unplug stuff properly.
//otherwise hot unplug might be buggy.
var gamepads ;
2017-05-18 10:24:09 +00:00
// if (FTEH.gamepads !== undefined)
// gamepads = FTEH.gamepads;
// else
2014-10-11 19:39:45 +00:00
gamepads = navigator . getGamepads ? navigator . getGamepads ( ) : ( navigator . webkitGetGamepads ? navigator . webkitGetGamepads : [ ] ) ;
if ( gamepads !== undefined )
for ( var i = 0 ; i < gamepads . length ; i += 1 )
{
var gp = gamepads [ i ] ;
if ( gp === undefined )
continue ;
2016-12-19 13:31:05 +00:00
if ( gp == null )
continue ;
2014-10-11 19:39:45 +00:00
for ( var j = 0 ; j < gp . buttons . length ; j += 1 )
{
var b = gp . buttons [ j ] ;
var p ;
if ( typeof ( b ) == "object" )
2017-05-18 10:24:09 +00:00
p = b . pressed ; //.value is a fractional thing. oh well.
2014-10-11 19:39:45 +00:00
else
2017-05-18 10:24:09 +00:00
p = b > 0.5 ; //old chrome bug
if ( b . lastframe != p )
{ //cache it to avoid spam
b . lastframe = p ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiii' , 'FTEC.evcb.jbutton' ) } } } ( gp . index , j , p , gp . mapping == "standard" ) ;
2014-10-11 19:39:45 +00:00
}
}
for ( var j = 0 ; j < gp . axes . length ; j += 1 )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viifi' , 'FTEC.evcb.jaxis' ) } } } ( gp . index , j , gp . axes [ j ] , gp . mapping == "standard" ) ;
2014-10-11 19:39:45 +00:00
}
} ,
2014-09-08 23:47:19 +00:00
emscriptenfte _setupcanvas _ _deps : [ '$FTEC' , '$Browser' , 'emscriptenfte_buf_createfromarraybuf' ] ,
2021-10-31 18:20:51 +00:00
emscriptenfte _setupcanvas : function ( nw , nh , evresize , evmouse , evmbutton , evkey , evfile , evcbufadd , evjbutton , evjaxis , evwantfullscreen )
2013-12-19 18:41:57 +00:00
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
try
{
2014-10-11 19:39:45 +00:00
FTEC . evcb . resize = evresize ;
FTEC . evcb . mouse = evmouse ;
FTEC . evcb . button = evmbutton ;
FTEC . evcb . key = evkey ;
FTEC . evcb . loadfile = evfile ;
2021-10-31 18:20:51 +00:00
FTEC . evcb . cbufaddtext = evcbufadd ;
2014-10-11 19:39:45 +00:00
FTEC . evcb . jbutton = evjbutton ;
FTEC . evcb . jaxis = evjaxis ;
2014-12-11 16:26:26 +00:00
FTEC . evcb . wantfullscreen = evwantfullscreen ;
2014-10-11 19:39:45 +00:00
if ( 'GamepadEvent' in window )
FTEH . gamepads = [ ] ; //don't bother ever trying to poll if we can use gamepad events. this will hopefully avoid weirdness.
2013-12-19 18:41:57 +00:00
if ( ! FTEC . donecb )
{
FTEC . donecb = 1 ;
2015-08-20 03:17:47 +00:00
var events = [ 'mousedown' , 'mouseup' , 'mousemove' , 'wheel' , 'mousewheel' , 'mouseout' ,
'keypress' , 'keydown' , 'keyup' ,
'touchstart' , 'touchend' , 'touchcancel' , 'touchleave' , 'touchmove' ,
'dragenter' , 'dragover' , 'drop' ,
2017-07-31 17:15:37 +00:00
'message' , 'resize' ,
2022-01-28 10:48:07 +00:00
'pointerlockerror' , 'pointerlockchange' , 'mozpointerlockchange' , 'webkitpointerlockchange' ,
2015-08-20 03:17:47 +00:00
'focus' , 'blur' ] ; //try to fix alt-tab
2014-09-08 23:47:19 +00:00
events . forEach ( function ( event )
2013-12-19 18:41:57 +00:00
{
Module [ 'canvas' ] . addEventListener ( event , FTEC . handleevent , true ) ;
2015-04-21 14:58:29 +00:00
} ) ;
2015-08-20 03:17:47 +00:00
var docevents = [ 'keypress' , 'keydown' , 'keyup' ,
2022-01-28 10:48:07 +00:00
'pointerlockerror' , 'pointerlockchange' , 'mozpointerlockchange' , 'webkitpointerlockchange' ] ;
2015-04-21 14:58:29 +00:00
docevents . forEach ( function ( event )
{
2015-04-14 23:12:17 +00:00
document . addEventListener ( event , FTEC . handleevent , true ) ;
2013-12-19 18:41:57 +00:00
} ) ;
2015-04-14 23:12:17 +00:00
2021-10-22 22:27:28 +00:00
var windowevents = [ 'message' , 'gamepadconnected' , 'gamepaddisconnected' , 'beforeunload' ] ;
2015-04-14 23:12:17 +00:00
windowevents . forEach ( function ( event )
2013-12-19 18:41:57 +00:00
{
2015-04-14 23:12:17 +00:00
window . addEventListener ( event , FTEC . handleevent , true ) ;
2013-12-19 18:41:57 +00:00
} ) ;
2017-07-31 17:15:37 +00:00
// Browser.resizeListeners.push(function(w, h) {
// FTEC.handleevent({
// type: 'resize',
// });
// });
2013-12-19 18:41:57 +00:00
}
2014-09-08 23:47:19 +00:00
var ctx = Browser . createContext ( Module [ 'canvas' ] , true , true ) ;
2014-09-02 02:44:43 +00:00
if ( ctx == null )
{
var msg = "Unable to set up webgl context.\n\nPlease use a browser that supports it and has it enabled\nYour graphics drivers may also be blacklisted, so try updating those too. woo, might as well update your entire operating system while you're at it.\nIt'll be expensive, but hey, its YOUR money, not mine.\nYou can probably just disable the blacklist, but please don't moan at me when your computer blows up, seriously, make sure those drivers are not too buggy.\nI knew a guy once. True story. Boring, but true.\nYou're probably missing out on something right now. Don't you just hate it when that happens?\nMeh, its probably just tinkertoys, right?\n\nYou know, you could always try Internet Explorer, you never know, hell might have frozen over.\nDon't worry, I wasn't serious.\n\nTum te tum. Did you get it working yet?\nDude, fix it already.\n\nThis message was brought to you by Sleep Deprivation, sponsoring quake since I don't know when" ;
if ( FTEC . ctxwarned == 0 )
{
FTEC . ctxwarned = 1 ;
console . log ( msg ) ;
alert ( msg ) ;
}
2013-12-19 18:41:57 +00:00
return 0 ;
2014-09-02 02:44:43 +00:00
}
2014-08-27 08:41:31 +00:00
// Browser.setCanvasSize(nw, nh, false);
2013-12-19 18:41:57 +00:00
window . onresize = function ( )
{
//emscripten's browser library will revert sizes wrongly or something when we're fullscreen, so make sure that doesn't happen.
2014-08-27 08:41:31 +00:00
// if (Browser.isFullScreen)
// {
// Browser.windowedWidth = window.innerWidth;
// Browser.windowedHeight = window.innerHeight;
// }
// else
2017-07-31 17:15:37 +00:00
{
var rect = Module [ 'canvas' ] . getBoundingClientRect ( ) ;
Browser . setCanvasSize ( rect . width , rect . height , false ) ;
}
2014-08-27 08:41:31 +00:00
if ( FTEC . evcb . resize != 0 )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'FTEC.evcb.resize' ) } } } ( Module [ 'canvas' ] . width , Module [ 'canvas' ] . height ) ;
2013-12-19 18:41:57 +00:00
} ;
window . onresize ( ) ;
2014-08-27 08:41:31 +00:00
if ( FTEC . evcb . hashchange )
{
2014-09-08 23:47:19 +00:00
window . onhashchange = function ( )
2014-08-27 08:41:31 +00:00
{
2015-04-14 23:12:17 +00:00
FTEC . loadurl ( location . hash . substring ( 1 ) , "" , undefined ) ;
2014-09-08 23:47:19 +00:00
} ;
}
2015-08-20 03:17:47 +00:00
_emscriptenfte _updatepointerlock ( false , false ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
} catch ( e )
{
console . log ( e ) ;
}
2014-08-27 08:41:31 +00:00
2013-12-19 18:41:57 +00:00
return 1 ;
} ,
2014-10-11 19:39:45 +00:00
emscriptenfte _settitle : function ( txt )
{
2021-10-05 05:05:50 +00:00
document . title = UTF8ToString ( txt ) ;
2014-10-11 19:39:45 +00:00
} ,
2021-10-22 22:27:58 +00:00
emscriptenfte _abortmainloop : function ( fname , fatal )
2013-12-19 18:41:57 +00:00
{
2021-10-05 05:05:50 +00:00
fname = UTF8ToString ( fname ) ;
2021-10-22 22:27:58 +00:00
if ( fatal )
FTEC . aborted = true ;
if ( Module [ 'stackTrace' ] )
throw 'oh noes! something bad happened in ' + fname + '!\n' + Module [ 'stackTrace' ] ( ) ;
throw 'oh noes! something bad happened!\n' ;
2015-08-07 17:49:49 +00:00
} ,
2021-10-05 05:05:50 +00:00
emscriptenfte _setupmainloop _ _deps : [ '$FTEC' ] ,
2015-08-07 17:49:49 +00:00
emscriptenfte _setupmainloop : function ( fnc )
{
Module [ 'noExitRuntime' ] = true ;
2021-10-05 05:05:06 +00:00
FTEC . aborted = false ;
2015-08-07 17:49:49 +00:00
2021-10-22 22:27:28 +00:00
Module [ "sched" ] = FTEC . step ;
2021-10-22 22:27:58 +00:00
FTEC . evcb . frame = fnc ;
2015-08-07 17:49:49 +00:00
//don't start it instantly, so we can distinguish between types of errors (emscripten sucks!).
2021-10-22 22:27:28 +00:00
setTimeout ( FTEC . step , 1 , performance . now ( ) ) ;
2013-12-19 18:41:57 +00:00
} ,
emscriptenfte _ticks _ms : function ( )
2021-10-12 04:41:49 +00:00
{ //milliseconds...
2013-12-19 18:41:57 +00:00
return Date . now ( ) ;
} ,
2021-10-12 04:41:49 +00:00
emscriptenfte _uptime _ms : function ( )
{ //milliseconds...
return performance . now ( ) ;
} ,
2013-12-19 18:41:57 +00:00
emscriptenfte _buf _create _ _deps : [ 'emscriptenfte_handle_alloc' ] ,
emscriptenfte _buf _create : function ( )
{
var b = { h : - 1 , r : 1 , l : 0 , m : 4096 , d : new Uint8Array ( 4096 ) , n : null } ;
b . h = _emscriptenfte _handle _alloc ( b ) ;
return b . h ;
} ,
2014-08-27 08:41:31 +00:00
//filesystem emulation
2013-12-19 18:41:57 +00:00
emscriptenfte _buf _open _ _deps : [ 'emscriptenfte_buf_create' ] ,
emscriptenfte _buf _open : function ( name , createifneeded )
{
2021-10-05 05:05:50 +00:00
name = UTF8ToString ( name ) ;
2013-12-19 18:41:57 +00:00
var f = FTEH . f [ name ] ;
var r = - 1 ;
if ( f == null )
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( ! FTEC . localstorefailure )
2014-08-27 08:41:31 +00:00
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
try
2014-08-27 08:41:31 +00:00
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( localStorage && createifneeded != 2 )
{
var str = localStorage . getItem ( name ) ;
if ( str != null )
{
// console.log('read file '+name+': ' + str);
2014-08-27 08:41:31 +00:00
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var len = str . length ;
var buf = new Uint8Array ( len ) ;
for ( var i = 0 ; i < len ; i ++ )
buf [ i ] = str . charCodeAt ( i ) ;
2014-08-27 08:41:31 +00:00
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var b = { h : - 1 , r : 2 , l : len , m : len , d : buf , n : name } ;
r = b . h = _emscriptenfte _handle _alloc ( b ) ;
FTEH . f [ name ] = b ;
return b . h ;
}
}
}
catch ( e )
{
console . log ( 'exception while trying to read local storage for ' + name ) ;
console . log ( e ) ;
console . log ( 'disabling further attempts to access local storage' ) ;
FTEC . localstorefailure = true ;
2014-08-27 08:41:31 +00:00
}
}
2013-12-19 18:41:57 +00:00
if ( createifneeded )
r = _emscriptenfte _buf _create ( ) ;
if ( r != - 1 )
{
f = FTEH . h [ r ] ;
f . r += 1 ;
f . n = name ;
FTEH . f [ name ] = f ;
if ( FTEH . f [ name ] != f || f . n != name )
console . log ( 'error creating file ' + name ) ;
}
}
else
{
f . r += 1 ;
r = f . h ;
}
2014-08-27 08:41:31 +00:00
if ( f != null && createifneeded == 2 )
f . l = 0 ; //truncate it.
2013-12-19 18:41:57 +00:00
return r ;
} ,
emscriptenfte _buf _rename : function ( oldname , newname )
{
2021-10-05 05:05:50 +00:00
oldname = UTF8ToString ( oldname ) ;
newname = UTF8ToString ( newname ) ;
2013-12-19 18:41:57 +00:00
var f = FTEH . f [ oldname ] ;
if ( f == null )
return 0 ;
if ( FTEH . f [ newname ] != null )
return 0 ;
FTEH . f [ newname ] = f ;
delete FTEH . f [ oldname ] ;
f . n = newname ;
return 1 ;
} ,
emscriptenfte _buf _delete : function ( name )
{
2021-10-05 05:05:50 +00:00
name = UTF8ToString ( name ) ;
2013-12-19 18:41:57 +00:00
var f = FTEH . f [ name ] ;
if ( f )
{
delete FTEH . f [ name ] ;
f . n = null ;
2016-07-12 00:40:13 +00:00
_emscriptenfte _buf _release ( f . h ) ;
2013-12-19 18:41:57 +00:00
return 1 ;
}
return 0 ;
} ,
2021-10-22 22:27:58 +00:00
emscritenfte _buf _enumerate : function ( cb , ctx , sz )
{
var n = Object . keys ( FTEH . f ) ;
var c = n . length , i ;
for ( i = 0 ; i < c ; i ++ )
{
stringToUTF8 ( n [ i ] , ctx , sz ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'cb' ) } } } ( ctx , FTEH . f [ n [ i ] ] . l ) ;
2021-10-22 22:27:58 +00:00
}
} ,
2014-08-27 08:41:31 +00:00
emscriptenfte _buf _pushtolocalstore : function ( handle )
{
var b = FTEH . h [ handle ] ;
if ( b == null )
{
Module . printError ( 'emscriptenfte_buf_pushtolocalstore with invalid handle' ) ;
return ;
}
if ( b . n == null )
return ;
var data = b . d ;
var len = b . l ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
try
{
if ( localStorage )
{
var foo = "" ;
//use a divide and conquer implementation instead for speed?
for ( var i = 0 ; i < len ; i ++ )
foo += String . fromCharCode ( data [ i ] ) ;
localStorage . setItem ( b . n , foo ) ;
}
else
console . log ( 'local storage not supported' ) ;
}
catch ( e )
2014-08-27 08:41:31 +00:00
{
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
console . log ( 'exception while trying to save ' + b . n ) ;
console . log ( e ) ;
2014-08-27 08:41:31 +00:00
}
} ,
2013-12-19 18:41:57 +00:00
emscriptenfte _buf _release : function ( handle )
{
var b = FTEH . h [ handle ] ;
if ( b == null )
{
Module . printError ( 'emscriptenfte_buf_release with invalid handle' ) ;
return ;
}
b . r -= 1 ;
if ( b . r == 0 )
{
if ( b . n != null )
delete FTEH . f [ b . n ] ;
delete FTEH . h [ handle ] ;
b . d = null ;
}
} ,
emscriptenfte _buf _getsize : function ( handle )
{
var b = FTEH . h [ handle ] ;
return b . l ;
} ,
emscriptenfte _buf _read : function ( handle , offset , data , len )
{
var b = FTEH . h [ handle ] ;
if ( offset + len > b . l ) //clamp the read
len = b . l - offset ;
if ( len < 0 )
{
len = 0 ;
if ( offset + len >= b . l )
return - 1 ;
}
HEAPU8 . set ( b . d . subarray ( offset , offset + len ) , data ) ;
return len ;
} ,
emscriptenfte _buf _write : function ( handle , offset , data , len )
{
var b = FTEH . h [ handle ] ;
2014-08-25 07:35:41 +00:00
if ( len < 0 )
len = 0 ;
2013-12-19 18:41:57 +00:00
if ( offset + len > b . m )
{ //extend it if needed.
b . m = offset + len + 4095 ;
b . m = b . m & ~ 4095 ;
var nd = new Uint8Array ( b . m ) ;
nd . set ( b . d , 0 ) ;
b . d = nd ;
}
b . d . set ( HEAPU8 . subarray ( data , data + len ) , offset ) ;
if ( offset + len > b . l )
b . l = offset + len ;
return len ;
} ,
emscriptenfte _ws _connect _ _deps : [ 'emscriptenfte_handle_alloc' ] ,
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
emscriptenfte _ws _connect : function ( brokerurl , protocolname )
2013-12-19 18:41:57 +00:00
{
2021-10-05 05:05:50 +00:00
var _url = UTF8ToString ( brokerurl ) ;
var _protocol = UTF8ToString ( protocolname ) ;
2015-04-14 23:12:17 +00:00
var s = { ws : null , inq : [ ] , err : 0 , con : 0 } ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
try {
s . ws = new WebSocket ( _url , _protocol ) ;
} catch ( err ) { console . log ( err ) ; }
2015-04-14 23:12:17 +00:00
if ( s . ws === undefined )
2013-12-19 18:41:57 +00:00
return - 1 ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( s . ws == null )
return - 1 ;
s . ws . binaryType = 'arraybuffer' ;
2015-04-14 23:12:17 +00:00
s . ws . onerror = function ( event ) { s . con = 0 ; s . err = 1 ; } ;
s . ws . onclose = function ( event ) { s . con = 0 ; s . err = 1 ; } ;
s . ws . onopen = function ( event ) { s . con = 1 ; } ;
2013-12-19 18:41:57 +00:00
s . ws . onmessage = function ( event )
{
2019-03-01 22:39:30 +00:00
assert ( typeof event . data !== 'string' && event . data . byteLength , 'websocket data is not usable' ) ;
2013-12-19 18:41:57 +00:00
s . inq . push ( new Uint8Array ( event . data ) ) ;
} ;
return _emscriptenfte _handle _alloc ( s ) ;
} ,
emscriptenfte _ws _close : function ( sockid )
{
var s = FTEH . h [ sockid ] ;
2015-04-14 23:12:17 +00:00
if ( s === undefined )
2013-12-19 18:41:57 +00:00
return - 1 ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
s . callcb = null ;
if ( s . ws != null )
{
s . ws . close ( ) ;
s . ws = null ; //make sure to avoid circular references
}
if ( s . pc != null )
{
s . pc . close ( ) ;
s . pc = null ; //make sure to avoid circular references
}
if ( s . broker != null )
{
s . broker . close ( ) ;
s . broker = null ; //make sure to avoid circular references
}
2013-12-19 18:41:57 +00:00
delete FTEH . h [ sockid ] ; //socked is no longer accessible.
return 0 ;
} ,
//separate call allows for more sane flood control when fragmentation is involved.
emscriptenfte _ws _cansend : function ( sockid , extra , maxpending )
{
var s = FTEH . h [ sockid ] ;
2015-04-14 23:12:17 +00:00
if ( s === undefined )
2013-12-19 18:41:57 +00:00
return 1 ; //go on punk, make my day.
return ( ( s . ws . bufferedAmount + extra ) < maxpending ) ;
} ,
emscriptenfte _ws _send : function ( sockid , data , len )
{
var s = FTEH . h [ sockid ] ;
2015-04-14 23:12:17 +00:00
if ( s === undefined )
2013-12-19 18:41:57 +00:00
return - 1 ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( s . con == 0 )
2015-04-14 23:12:17 +00:00
return 0 ; //not connected yet
2022-01-28 10:48:01 +00:00
if ( len == 0 )
return 0 ; //...
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
s . ws . send ( HEAPU8 . subarray ( data , data + len ) ) ;
2013-12-19 18:41:57 +00:00
return len ;
} ,
emscriptenfte _ws _recv : function ( sockid , data , len )
{
var s = FTEH . h [ sockid ] ;
2015-04-14 23:12:17 +00:00
if ( s === undefined )
2013-12-19 18:41:57 +00:00
return - 1 ;
var inp = s . inq . shift ( ) ;
if ( inp )
{
if ( inp . length > len )
inp . length = len ;
HEAPU8 . set ( inp , data ) ;
return inp . length ;
}
if ( s . err )
2015-04-14 23:12:17 +00:00
return - 1 ;
return 0 ;
2013-12-19 18:41:57 +00:00
} ,
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
emscriptenfte _rtc _create _ _deps : [ 'emscriptenfte_handle_alloc' ] ,
2022-07-28 02:16:31 +00:00
emscriptenfte _rtc _create : function ( clientside , ctxp , ctxi , callback , pcconfig )
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
{
2022-07-28 02:16:31 +00:00
try {
pcconfig = JSON . parse ( UTF8ToString ( pcconfig ) ) ;
} catch ( err ) { pcconfig = { } ; }
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var dcconfig = { ordered : false , maxRetransmits : 0 , reliable : false } ;
var s = { pc : null , ws : null , inq : [ ] , err : 0 , con : 0 , isclient : clientside , callcb :
function ( evtype , stringdata )
{ //private helper
2021-10-31 18:20:45 +00:00
//console.log("emscriptenfte_rtc_create callback: " + evtype);
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var stringlen = ( stringdata . length * 3 ) + 1 ;
var dataptr = _malloc ( stringlen ) ;
stringToUTF8 ( stringdata , dataptr , stringlen ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viiii' , 'callback' ) } } } ( ctxp , ctxi , evtype , dataptr ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
_free ( dataptr ) ;
}
} ;
if ( RTCPeerConnection === undefined )
{ //IE or something.
console . log ( "RTCPeerConnection undefined" ) ;
return - 1 ;
}
s . pc = new RTCPeerConnection ( pcconfig ) ;
if ( s . pc === undefined )
{
console . log ( "webrtc failed to create RTCPeerConnection" ) ;
return - 1 ;
}
//create the dataconnection
s . ws = s . pc . createDataChannel ( 'quake' , dcconfig ) ;
s . ws . binaryType = 'arraybuffer' ;
s . ws . onclose = function ( event )
{
s . con = 0 ;
s . err = 1 ;
} ;
s . ws . onopen = function ( event )
{
s . con = 1 ;
} ;
s . ws . onmessage = function ( event )
{
assert ( typeof event . data !== 'string' && event . data . byteLength ) ;
s . inq . push ( new Uint8Array ( event . data ) ) ;
} ;
s . pc . onicecandidate = function ( e )
{
var desc ;
if ( 1 )
desc = JSON . stringify ( e . candidate ) ;
else
desc = e . candidate . candidate ;
2022-01-28 10:48:01 +00:00
if ( desc == null )
return ; //no more...
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
s . callcb ( 4 , desc ) ;
} ;
s . pc . ondatachannel = function ( e )
{
2022-01-28 10:48:01 +00:00
s . recvchan = e . channel ;
s . recvchan . binaryType = 'arraybuffer' ;
s . recvchan . onmessage = s . ws . onmessage ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
} ;
if ( clientside )
{
s . pc . createOffer ( ) . then (
function ( desc )
{
s . pc . setLocalDescription ( desc ) ;
if ( 1 )
desc = JSON . stringify ( desc ) ;
else
desc = desc . sdp ;
s . callcb ( 3 , desc ) ;
} ,
function ( event )
{
s . err = 1 ;
}
) ;
}
return _emscriptenfte _handle _alloc ( s ) ;
} ,
emscriptenfte _rtc _offer : function ( sockid , offer , offertype )
{
2022-07-28 02:16:31 +00:00
var desc ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
var s = FTEH . h [ sockid ] ;
2021-10-05 05:05:50 +00:00
offer = UTF8ToString ( offer ) ;
offertype = UTF8ToString ( offertype ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( s === undefined )
return - 1 ;
2021-10-22 22:27:58 +00:00
try
{
if ( 1 )
desc = JSON . parse ( offer ) ;
else
desc = { sdp : offer , type : offertype } ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
2022-07-28 02:16:31 +00:00
s . pc . setRemoteDescription ( desc ) . then ( ( ) =>
{
if ( ! s . isclient )
{ //server must give a response.
s . pc . createAnswer ( ) . then (
function ( desc )
{
s . pc . setLocalDescription ( desc ) ;
2013-12-19 18:41:57 +00:00
2022-07-28 02:16:31 +00:00
if ( 1 )
desc = JSON . stringify ( desc ) ;
else
desc = desc . sdp ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
2022-07-28 02:16:31 +00:00
s . callcb ( 3 , desc ) ;
} ,
function ( event )
{
s . err = 1 ;
}
) ;
}
} , err =>
{
console . log ( desc ) ;
console . log ( err ) ;
} ) ;
} catch ( err ) { console . log ( err ) ; }
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
} ,
emscriptenfte _rtc _candidate : function ( sockid , offer )
{
var s = FTEH . h [ sockid ] ;
2021-10-05 05:05:50 +00:00
offer = UTF8ToString ( offer ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
if ( s === undefined )
return - 1 ;
2021-10-22 22:27:58 +00:00
try //don't screw up if the peer is trying to screw with us.
{
var desc ;
if ( 1 )
desc = JSON . parse ( offer ) ;
else
desc = { candidate : offer , sdpMid : null , sdpMLineIndex : 0 } ;
s . pc . addIceCandidate ( desc ) ;
} catch ( err ) { console . log ( err ) ; }
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
} ,
2013-12-19 18:41:57 +00:00
emscriptenfte _async _wget _data2 : function ( url , ctx , onload , onerror , onprogress )
{
2021-10-05 05:05:50 +00:00
var _url = UTF8ToString ( url ) ;
2021-10-31 18:20:45 +00:00
// console.log("Attempting download of " + _url);
2013-12-19 18:41:57 +00:00
var http = new XMLHttpRequest ( ) ;
2016-07-12 00:40:13 +00:00
try
{
http . open ( 'GET' , _url , true ) ;
}
catch ( e )
{
if ( onerror )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'onerror' ) } } } ( ctx , 404 ) ;
2016-07-12 00:40:13 +00:00
return ;
}
2013-12-19 18:41:57 +00:00
http . responseType = 'arraybuffer' ;
http . onload = function ( e )
{
2021-10-31 18:20:45 +00:00
//console.log("onload: " + _url + " status " + http.status);
2013-12-19 18:41:57 +00:00
if ( http . status == 200 )
{
if ( onload )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'onload' ) } } } ( ctx , _emscriptenfte _buf _createfromarraybuf ( http . response ) ) ;
2013-12-19 18:41:57 +00:00
}
else
{
if ( onerror )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'onerror' ) } } } ( ctx , http . status ) ;
2013-12-19 18:41:57 +00:00
}
} ;
http . onerror = function ( e )
{
2021-10-31 18:20:45 +00:00
//console.log("onerror: " + _url);
2013-12-19 18:41:57 +00:00
if ( onerror )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'onerror' ) } } } ( ctx , 0 ) ;
2013-12-19 18:41:57 +00:00
} ;
http . onprogress = function ( e )
{
if ( onprogress )
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'viii' , 'onprogress' ) } } } ( ctx , e . loaded , e . total ) ;
2013-12-19 18:41:57 +00:00
} ;
2016-07-12 00:40:13 +00:00
try //ffs
{
http . send ( null ) ;
}
catch ( e )
{
console . log ( e ) ;
http . onerror ( e ) ;
}
2015-04-21 04:12:00 +00:00
} ,
emscriptenfte _al _loadaudiofile : function ( buf , dataptr , datasize )
{
2020-04-26 01:32:02 +00:00
var ctx = AL ;
2015-04-21 04:12:00 +00:00
//match emscripten's openal support.
if ( ! buf )
return ;
2020-04-24 12:09:48 +00:00
2020-04-26 01:32:02 +00:00
var albuf = AL . buffers [ buf ] ;
AL . buffers [ buf ] = null ; //alIsBuffer will report it as invalid now
2015-04-21 04:12:00 +00:00
try
{
2020-04-26 01:32:02 +00:00
//its async, so it needs its own copy of an arraybuffer, not just a view.
2015-04-21 04:12:00 +00:00
var abuf = new ArrayBuffer ( datasize ) ;
2020-04-26 01:32:02 +00:00
var rbuf = new Uint8Array ( abuf ) ;
rbuf . set ( HEAPU8 . subarray ( dataptr , dataptr + datasize ) ) ;
AL . currentCtx . audioCtx . decodeAudioData ( abuf ,
2019-12-10 14:50:47 +00:00
function ( buffer )
{
//Warning: This depends upon emscripten's specific implementation of alBufferData
albuf . bytesPerSample = 2 ;
albuf . channels = 1 ;
2020-04-26 01:32:02 +00:00
albuf . length = buffer . length ;
albuf . frequency = buffer . sampleRate ;
2019-12-10 14:50:47 +00:00
albuf . audioBuf = buffer ;
ctx . buffers [ buf ] = albuf ; //and its valid again!
} ,
function ( )
{
console . log ( "Audio Callback failed!" ) ;
ctx . buffers [ buf ] = albuf ;
}
) ;
2015-04-21 04:12:00 +00:00
}
catch ( e )
{
console . log ( "unable to decode audio data" ) ;
console . log ( e ) ;
2019-12-10 14:50:47 +00:00
ctx . buffers [ buf ] = albuf ;
2015-04-21 04:12:00 +00:00
}
} ,
2021-10-05 05:05:06 +00:00
emscriptenfte _gl _loadtexturefile : function ( texid , widthptr , heightptr , dataptr , datasize , fname , dopremul , genmips )
2015-04-21 04:12:00 +00:00
{
function encode64 ( data ) {
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' ;
var PAD = '=' ;
var ret = '' ;
var leftchar = 0 ;
var leftbits = 0 ;
for ( var i = 0 ; i < data . length ; i ++ ) {
leftchar = ( leftchar << 8 ) | data [ i ] ;
leftbits += 8 ;
while ( leftbits >= 6 ) {
var curr = ( leftchar >> ( leftbits - 6 ) ) & 0x3f ;
leftbits -= 6 ;
ret += BASE [ curr ] ;
}
}
if ( leftbits == 2 ) {
ret += BASE [ ( leftchar & 3 ) << 4 ] ;
ret += PAD + PAD ;
} else if ( leftbits == 4 ) {
ret += BASE [ ( leftchar & 0xf ) << 2 ] ;
ret += PAD ;
}
return ret ;
}
//make sure the texture is defined before its loaded, so we get no errors
GLctx . texImage2D ( GLctx . TEXTURE _2D , 0 , GLctx . RGBA , 1 , 1 , 0 , GLctx . RGBA , GLctx . UNSIGNED _BYTE , null ) ;
var img = new Image ( ) ;
var gltex = GL . textures [ texid ] ;
2021-10-05 05:05:50 +00:00
img . name = UTF8ToString ( fname ) ;
2015-04-21 04:12:00 +00:00
img . onload = function ( )
{
2019-02-23 09:29:20 +00:00
if ( img . width < 1 || img . height < 1 )
{
console . log ( "emscriptenfte_gl_loadtexturefile(" + img . name + "): bad image size\n" ) ;
return ;
}
2015-04-21 04:12:00 +00:00
var oldtex = GLctx . getParameter ( GLctx . TEXTURE _BINDING _2D ) ; //blurgh, try to avoid breaking anything in this unexpected event.
GLctx . bindTexture ( GLctx . TEXTURE _2D , gltex ) ;
2021-10-05 05:05:06 +00:00
if ( dopremul )
GLctx . pixelStorei ( GLctx . UNPACK _PREMULTIPLY _ALPHA _WEBGL , true ) ;
2015-04-21 04:12:00 +00:00
GLctx . texImage2D ( GLctx . TEXTURE _2D , 0 , GLctx . RGBA , GLctx . RGBA , GLctx . UNSIGNED _BYTE , img ) ;
2021-10-05 05:05:06 +00:00
if ( dopremul )
GLctx . pixelStorei ( GLctx . UNPACK _PREMULTIPLY _ALPHA _WEBGL , false ) ;
if ( genmips )
GLctx . generateMipmap ( GLctx . TEXTURE _2D ) ;
2015-04-21 04:12:00 +00:00
GLctx . bindTexture ( GLctx . TEXTURE _2D , oldtex ) ;
} ;
img . crossorigin = true ;
img . src = "data:image/png;base64," + encode64 ( HEAPU8 . subarray ( dataptr , dataptr + datasize ) ) ;
2022-02-07 14:33:44 +00:00
} ,
Sys _Clipboard _PasteText : function ( cbt , callback , ctx )
{
if ( cbt != 0 )
return ; //don't do selections.
let docallback = function ( text )
{
FTEC . clipboard = text ;
try {
let stringlen = ( text . length * 3 ) + 1 ;
let dataptr = _malloc ( stringlen ) ;
stringToUTF8 ( text , dataptr , stringlen ) ;
2022-06-20 04:54:54 +00:00
{ { { makeDynCall ( 'vii' , 'callback' ) } } } ( ctx , dataptr ) ;
2022-02-07 14:33:44 +00:00
_free ( dataptr ) ;
} catch ( e ) {
}
} ;
//try pasting. if it fails then use our internal string.
try
{
navigator . clipboard . readText ( )
. then ( docallback )
. catch ( ( e ) => { docallback ( FTEC . clipboard ) } ) ;
}
catch ( e )
{ //clipboard API not supported at all.
console . log ( e ) ; //happens in firefox. lets print it so we know WHY its failing.
docallback ( FTEC . clipboard ) ;
}
} ,
Sys _SaveClipboard : function ( cbt , text )
{
if ( cbt != 0 )
return ; //don't do selections.
FTEC . clipboard = UTF8ToString ( text ) ;
try
{
//try and copy it to the system clipboard too.
navigator . clipboard . writeText ( FTEC . clipboard ) ;
}
catch { }
2013-12-19 18:41:57 +00:00
}
} ) ;
2021-10-22 22:27:58 +00:00