This commit is contained in:
Alibek Omarov 2024-02-09 08:31:19 -07:00 committed by GitHub
commit 2dcbafa31c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 67 additions and 42 deletions

View File

@ -32,10 +32,9 @@ jobs:
# targetos: android # targetos: android
# targetarch: 64 # targetarch: 64
# - os: ubuntu-20.04 - os: ubuntu-20.04
# targetos: motomagx targetos: motomagx
# targetarch: armv6 targetarch: armv6
- os: ubuntu-latest - os: ubuntu-latest
targetos: nswitch targetos: nswitch
targetarch: arm64 targetarch: arm64

View File

@ -1160,7 +1160,7 @@ void Touch_Init( void )
#if SDL_VERSION_ATLEAST( 2, 0, 10 ) #if SDL_VERSION_ATLEAST( 2, 0, 10 )
SDL_SetHint( SDL_HINT_MOUSE_TOUCH_EVENTS, "0" ); SDL_SetHint( SDL_HINT_MOUSE_TOUCH_EVENTS, "0" );
SDL_SetHint( SDL_HINT_TOUCH_MOUSE_EVENTS, "0" ); SDL_SetHint( SDL_HINT_TOUCH_MOUSE_EVENTS, "0" );
#elif defined(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH) #elif defined( SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH )
SDL_SetHint( SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, "1" ); SDL_SetHint( SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, "1" );
#endif #endif

View File

@ -9,13 +9,13 @@ typedef struct vidmode_s
int height; int height;
} vidmode_t; } vidmode_t;
typedef enum window_mode_e enum window_mode_e
{ {
WINDOW_MODE_WINDOWED = 0, WINDOW_MODE_WINDOWED = 0,
WINDOW_MODE_FULLSCREEN, WINDOW_MODE_FULLSCREEN,
WINDOW_MODE_BORDERLESS, WINDOW_MODE_BORDERLESS,
WINDOW_MODE_COUNT, WINDOW_MODE_COUNT,
} window_mode_t; };
typedef struct typedef struct
{ {

View File

@ -21,9 +21,9 @@ GNU General Public License for more details.
#include "protocol.h" // MAX_CLIENTS #include "protocol.h" // MAX_CLIENTS
#include "sound.h" #include "sound.h"
typedef struct OpusCustomEncoder OpusCustomEncoder; struct OpusCustomEncoder;
typedef struct OpusCustomDecoder OpusCustomDecoder; struct OpusCustomDecoder;
typedef struct OpusCustomMode OpusCustomMode; struct OpusCustomMode;
#define VOICE_LOOPBACK_INDEX (-2) #define VOICE_LOOPBACK_INDEX (-2)
#define VOICE_LOCALCLIENT_INDEX (-1) #define VOICE_LOCALCLIENT_INDEX (-1)
@ -60,9 +60,9 @@ typedef struct voice_state_s
voice_status_t players_status[MAX_CLIENTS]; voice_status_t players_status[MAX_CLIENTS];
// opus stuff // opus stuff
OpusCustomMode *custom_mode; struct OpusCustomMode *custom_mode;
OpusCustomEncoder *encoder; struct OpusCustomEncoder *encoder;
OpusCustomDecoder *decoder; struct OpusCustomDecoder *decoder;
// audio info // audio info
uint width; uint width;

View File

@ -406,7 +406,7 @@ static void Sys_Crash( int signal, siginfo_t *si, void *context)
pc = (void*)ucontext->uc_mcontext.pc; pc = (void*)ucontext->uc_mcontext.pc;
bp = (void*)ucontext->uc_mcontext.regs[29]; bp = (void*)ucontext->uc_mcontext.regs[29];
sp = (void*)ucontext->uc_mcontext.sp; sp = (void*)ucontext->uc_mcontext.sp;
#elif XASH_ARM #elif XASH_ARM && !XASH_MAGX
pc = (void*)ucontext->uc_mcontext.arm_pc; pc = (void*)ucontext->uc_mcontext.arm_pc;
bp = (void*)ucontext->uc_mcontext.arm_fp; bp = (void*)ucontext->uc_mcontext.arm_fp;
sp = (void*)ucontext->uc_mcontext.arm_sp; sp = (void*)ucontext->uc_mcontext.arm_sp;

View File

@ -209,7 +209,9 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
case SDL_SCANCODE_MINUS: keynum = '-'; break; case SDL_SCANCODE_MINUS: keynum = '-'; break;
case SDL_SCANCODE_TAB: keynum = K_TAB; break; case SDL_SCANCODE_TAB: keynum = K_TAB; break;
case SDL_SCANCODE_RETURN: keynum = K_ENTER; break; case SDL_SCANCODE_RETURN: keynum = K_ENTER; break;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
case SDL_SCANCODE_AC_BACK: case SDL_SCANCODE_AC_BACK:
#endif
case SDL_SCANCODE_ESCAPE: keynum = K_ESCAPE; break; case SDL_SCANCODE_ESCAPE: keynum = K_ESCAPE; break;
case SDL_SCANCODE_SPACE: keynum = K_SPACE; break; case SDL_SCANCODE_SPACE: keynum = K_SPACE; break;
case SDL_SCANCODE_BACKSPACE: keynum = K_BACKSPACE; break; case SDL_SCANCODE_BACKSPACE: keynum = K_BACKSPACE; break;
@ -259,9 +261,9 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
host.force_draw_version_time = host.realtime + FORCE_DRAW_VERSION_TIME; host.force_draw_version_time = host.realtime + FORCE_DRAW_VERSION_TIME;
break; break;
} }
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
case SDL_SCANCODE_PAUSE: keynum = K_PAUSE; break; case SDL_SCANCODE_PAUSE: keynum = K_PAUSE; break;
case SDL_SCANCODE_SCROLLLOCK: keynum = K_SCROLLOCK; break; case SDL_SCANCODE_SCROLLLOCK: keynum = K_SCROLLOCK; break;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
case SDL_SCANCODE_APPLICATION: keynum = K_WIN; break; // (compose key) ??? case SDL_SCANCODE_APPLICATION: keynum = K_WIN; break; // (compose key) ???
// don't console spam on known functional buttons, not used in engine // don't console spam on known functional buttons, not used in engine
case SDL_SCANCODE_MUTE: case SDL_SCANCODE_MUTE:
@ -305,8 +307,10 @@ static void SDLash_MouseEvent( SDL_MouseButtonEvent button )
if( button.state == SDL_RELEASED ) if( button.state == SDL_RELEASED )
down = 0; down = 0;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
else if( button.clicks >= 2 ) else if( button.clicks >= 2 )
down = 2; // special state for double-click in UI down = 2; // special state for double-click in UI
#endif
else else
down = 1; down = 1;
@ -669,7 +673,7 @@ static void SDLash_EventFilter( SDL_Event *event )
} }
#else #else
case SDL_VIDEORESIZE: case SDL_VIDEORESIZE:
VID_SaveWindowSize( event->resize.w, event->resize.h ); VID_SaveWindowSize( event->resize.w, event->resize.h, false );
break; break;
case SDL_ACTIVEEVENT: case SDL_ACTIVEEVENT:
SDLash_ActiveEvent( event->active.gain ); SDLash_ActiveEvent( event->active.gain );

View File

@ -45,8 +45,9 @@ so it can unlock and free the data block after it has been played.
======================================================================= =======================================================================
*/ */
static int sdl_dev; static int sdl_dev;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
static SDL_AudioDeviceID in_dev = 0; static SDL_AudioDeviceID in_dev = 0;
static SDL_AudioFormat sdl_format; #endif
static char sdl_backend_name[32]; static char sdl_backend_name[32];
static void SDL_SoundCallback( void *userdata, Uint8 *stream, int len ) static void SDL_SoundCallback( void *userdata, Uint8 *stream, int len )
@ -100,10 +101,12 @@ qboolean SNDDMA_Init( void )
SDL_AudioSpec desired, obtained; SDL_AudioSpec desired, obtained;
int samplecount; int samplecount;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
// even if we don't have PA // even if we don't have PA
// we still can safely set env variables // we still can safely set env variables
SDL_setenv( "PULSE_PROP_application.name", GI->title, 1 ); SDL_setenv( "PULSE_PROP_application.name", GI->title, 1 );
SDL_setenv( "PULSE_PROP_media.role", "game", 1 ); SDL_setenv( "PULSE_PROP_media.role", "game", 1 );
#endif
if( SDL_Init( SDL_INIT_AUDIO )) if( SDL_Init( SDL_INIT_AUDIO ))
{ {
@ -148,8 +151,6 @@ qboolean SNDDMA_Init( void )
dma.buffer = Z_Calloc( dma.samples * 2 ); dma.buffer = Z_Calloc( dma.samples * 2 );
dma.samplepos = 0; dma.samplepos = 0;
sdl_format = obtained.format;
Con_Printf( "Using SDL audio driver: %s @ %d Hz\n", SDL_GetCurrentAudioDriver( ), obtained.freq ); Con_Printf( "Using SDL audio driver: %s @ %d Hz\n", SDL_GetCurrentAudioDriver( ), obtained.freq );
Q_snprintf( sdl_backend_name, sizeof( sdl_backend_name ), "SDL (%s)", SDL_GetCurrentAudioDriver( )); Q_snprintf( sdl_backend_name, sizeof( sdl_backend_name ), "SDL (%s)", SDL_GetCurrentAudioDriver( ));
dma.initialized = true; dma.initialized = true;
@ -263,6 +264,7 @@ VoiceCapture_Init
*/ */
qboolean VoiceCapture_Init( void ) qboolean VoiceCapture_Init( void )
{ {
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
SDL_AudioSpec wanted, spec; SDL_AudioSpec wanted, spec;
if( !SDLash_IsAudioError( in_dev )) if( !SDLash_IsAudioError( in_dev ))
@ -270,7 +272,7 @@ qboolean VoiceCapture_Init( void )
VoiceCapture_Shutdown(); VoiceCapture_Shutdown();
} }
SDL_zero( wanted ); memset( &wanted, 0, sizeof( wanted ));
wanted.freq = voice.samplerate; wanted.freq = voice.samplerate;
wanted.format = AUDIO_S16LSB; wanted.format = AUDIO_S16LSB;
wanted.channels = VOICE_PCM_CHANNELS; wanted.channels = VOICE_PCM_CHANNELS;
@ -284,9 +286,12 @@ qboolean VoiceCapture_Init( void )
Con_Printf( "VoiceCapture_Init: error creating capture device (%s)\n", SDL_GetError() ); Con_Printf( "VoiceCapture_Init: error creating capture device (%s)\n", SDL_GetError() );
return false; return false;
} }
Con_Printf( S_NOTE "VoiceCapture_Init: capture device creation success (%i: %s)\n", in_dev, SDL_GetAudioDeviceName( in_dev, SDL_TRUE ) ); Con_Printf( S_NOTE "VoiceCapture_Init: capture device creation success (%i: %s)\n", in_dev, SDL_GetAudioDeviceName( in_dev, SDL_TRUE ) );
return true; return true;
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
return false;
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
} }
/* /*
@ -296,11 +301,15 @@ VoiceCapture_Activate
*/ */
qboolean VoiceCapture_Activate( qboolean activate ) qboolean VoiceCapture_Activate( qboolean activate )
{ {
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
if( SDLash_IsAudioError( in_dev )) if( SDLash_IsAudioError( in_dev ))
return false; return false;
SDL_PauseAudioDevice( in_dev, activate ? SDL_FALSE : SDL_TRUE ); SDL_PauseAudioDevice( in_dev, activate ? SDL_FALSE : SDL_TRUE );
return true; return true;
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
return false;
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
} }
/* /*
@ -310,6 +319,7 @@ VoiceCapture_Lock
*/ */
qboolean VoiceCapture_Lock( qboolean lock ) qboolean VoiceCapture_Lock( qboolean lock )
{ {
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
if( SDLash_IsAudioError( in_dev )) if( SDLash_IsAudioError( in_dev ))
return false; return false;
@ -317,6 +327,9 @@ qboolean VoiceCapture_Lock( qboolean lock )
else SDL_UnlockAudioDevice( in_dev ); else SDL_UnlockAudioDevice( in_dev );
return true; return true;
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
return false;
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
} }
/* /*
@ -326,10 +339,14 @@ VoiceCapture_Shutdown
*/ */
void VoiceCapture_Shutdown( void ) void VoiceCapture_Shutdown( void )
{ {
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
if( SDLash_IsAudioError( in_dev )) if( SDLash_IsAudioError( in_dev ))
return; return;
SDL_CloseAudioDevice( in_dev ); SDL_CloseAudioDevice( in_dev );
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
return false;
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
} }
#endif // XASH_SOUND == SOUND_SDL #endif // XASH_SOUND == SOUND_SDL

View File

@ -699,7 +699,7 @@ static qboolean VID_CreateWindowWithSafeGL( const char *wndname, int xpos, int y
#if SDL_VERSION_ATLEAST( 2, 0, 0 ) #if SDL_VERSION_ATLEAST( 2, 0, 0 )
host.hWnd = SDL_CreateWindow( wndname, xpos, ypos, w, h, flags ); host.hWnd = SDL_CreateWindow( wndname, xpos, ypos, w, h, flags );
#else #else
host.hWnd = sw.surf = SDL_SetVideoMode( width, height, 16, flags ); host.hWnd = sw.surf = SDL_SetVideoMode( w, h, 16, flags );
#endif #endif
// we have window, exit loop // we have window, exit loop
if( host.hWnd ) if( host.hWnd )
@ -732,13 +732,16 @@ VID_CreateWindow
qboolean VID_CreateWindow( int width, int height, window_mode_t window_mode ) qboolean VID_CreateWindow( int width, int height, window_mode_t window_mode )
{ {
string wndname; string wndname;
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
qboolean maximized = vid_maximized.value != 0.0f;
Uint32 wndFlags = SDL_WINDOW_SHOWN | SDL_WINDOW_MOUSE_FOCUS;
int xpos, ypos; int xpos, ypos;
Uint32 wndFlags;
qboolean maximized;
Q_strncpy( wndname, GI->title, sizeof( wndname )); Q_strncpy( wndname, GI->title, sizeof( wndname ));
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
maximized = vid_maximized.value != 0.0f;
SetBits( wndFlags, SDL_WINDOW_SHOWN | SDL_WINDOW_MOUSE_FOCUS );
if( vid_highdpi.value ) if( vid_highdpi.value )
SetBits( wndFlags, SDL_WINDOW_ALLOW_HIGHDPI ); SetBits( wndFlags, SDL_WINDOW_ALLOW_HIGHDPI );
if( !glw_state.software ) if( !glw_state.software )
@ -850,13 +853,14 @@ qboolean VID_CreateWindow( int width, int height, window_mode_t window_mode )
} }
#else // SDL_VERSION_ATLEAST( 2, 0, 0 ) #else // SDL_VERSION_ATLEAST( 2, 0, 0 )
Uint32 flags = 0; xpos = window_xpos.value;
ypos = window_ypos.value;
if( window_mode != WINDOW_MODE_WINDOWED ) if( window_mode != WINDOW_MODE_WINDOWED )
SetBits( flags, SDL_FULLSCREEN|SDL_HWSURFACE ); SetBits( wndFlags, SDL_FULLSCREEN|SDL_HWSURFACE );
if( !glw_state.software ) if( !glw_state.software )
SetBits( flags, SDL_OPENGL ); SetBits( wndFlags, SDL_OPENGL );
if( !VID_CreateWindowWithSafeGL( wndname, xpos, ypos, width, height, wndFlags )) if( !VID_CreateWindowWithSafeGL( wndname, xpos, ypos, width, height, wndFlags ))
return false; return false;
@ -940,7 +944,7 @@ int GL_SetAttribute( int attr, int val )
#ifdef SDL_HINT_OPENGL_ES_DRIVER #ifdef SDL_HINT_OPENGL_ES_DRIVER
if( val == REF_GL_CONTEXT_PROFILE_ES ) if( val == REF_GL_CONTEXT_PROFILE_ES )
{ {
SDL_SetHint(SDL_HINT_OPENGL_ES_DRIVER, "1"); SDL_SetHint( SDL_HINT_OPENGL_ES_DRIVER, "1" );
SDL_SetHint( "SDL_VIDEO_X11_FORCE_EGL", "1" ); SDL_SetHint( "SDL_VIDEO_X11_FORCE_EGL", "1" );
} }
#endif // SDL_HINT_OPENGL_ES_DRIVER #endif // SDL_HINT_OPENGL_ES_DRIVER
@ -1013,9 +1017,6 @@ qboolean R_Init_Video( const int type )
SDL_DisplayMode displayMode; SDL_DisplayMode displayMode;
SDL_GetCurrentDisplayMode(0, &displayMode); SDL_GetCurrentDisplayMode(0, &displayMode);
refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format ); refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format );
#else
refState.desktopBitsPixel = 16;
#endif
#ifdef SDL_HINT_QTWAYLAND_WINDOW_FLAGS #ifdef SDL_HINT_QTWAYLAND_WINDOW_FLAGS
SDL_SetHint( SDL_HINT_QTWAYLAND_WINDOW_FLAGS, "OverridesSystemGestures" ); SDL_SetHint( SDL_HINT_QTWAYLAND_WINDOW_FLAGS, "OverridesSystemGestures" );
@ -1024,11 +1025,12 @@ qboolean R_Init_Video( const int type )
SDL_SetHint( SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION, "landscape" ); SDL_SetHint( SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION, "landscape" );
#endif #endif
#if SDL_VERSION_ATLEAST( 2, 0, 0 ) && !XASH_WIN32
SDL_SetHint( "SDL_VIDEO_X11_XRANDR", "1" ); SDL_SetHint( "SDL_VIDEO_X11_XRANDR", "1" );
SDL_SetHint( "SDL_VIDEO_X11_XVIDMODE", "1" ); SDL_SetHint( "SDL_VIDEO_X11_XVIDMODE", "1" );
if( Sys_CheckParm( "-egl" ) ) if( Sys_CheckParm( "-egl" ) )
SDL_SetHint( "SDL_VIDEO_X11_FORCE_EGL", "1" ); SDL_SetHint( "SDL_VIDEO_X11_FORCE_EGL", "1" );
#else
refState.desktopBitsPixel = 16;
#endif #endif
// must be initialized before creating window // must be initialized before creating window

View File

@ -261,7 +261,7 @@ typedef struct remap_info_s
model_t *model; // for catch model changes model_t *model; // for catch model changes
} remap_info_t; } remap_info_t;
typedef struct convar_s convar_t; struct convar_s;
struct con_nprint_s; struct con_nprint_s;
struct engine_studio_api_s; struct engine_studio_api_s;
struct r_studio_interface_s; struct r_studio_interface_s;
@ -302,7 +302,7 @@ typedef struct ref_api_s
const char *(*pfnGetCvarString)( const char *szName ); const char *(*pfnGetCvarString)( const char *szName );
void (*Cvar_SetValue)( const char *name, float value ); void (*Cvar_SetValue)( const char *name, float value );
void (*Cvar_Set)( const char *name, const char *value ); void (*Cvar_Set)( const char *name, const char *value );
void (*Cvar_RegisterVariable)( convar_t *var ); void (*Cvar_RegisterVariable)( struct convar_s *var );
void (*Cvar_FullSet)( const char *var_name, const char *value, int flags ); void (*Cvar_FullSet)( const char *var_name, const char *value, int flags );
// command handlers // command handlers

View File

@ -46,12 +46,12 @@ enum
DIRENTRY_CASEINSENSITIVE = -2, // directory is already caseinsensitive, just copy whatever is left DIRENTRY_CASEINSENSITIVE = -2, // directory is already caseinsensitive, just copy whatever is left
}; };
typedef struct dir_s struct dir_s
{ {
string name; string name;
int numentries; int numentries;
struct dir_s *entries; // sorted struct dir_s *entries; // sorted
} dir_t; };
static qboolean Platform_GetDirectoryCaseSensitivity( const char *dir ) static qboolean Platform_GetDirectoryCaseSensitivity( const char *dir )
{ {

View File

@ -5,15 +5,14 @@
cd $GITHUB_WORKSPACE || die cd $GITHUB_WORKSPACE || die
mkdir -p Xash/valve/cl_dlls ./waf configure -T fast --enable-magx build -v install --destdir=Xash/ --strip || die
mkdir -p Xash/valve/dlls
pushd hlsdk || die pushd hlsdk || die
./waf configure -T fast --enable-magx --enable-simple-mod-hacks build install --destdir=../Xash || die ./waf configure -T fast --enable-magx build -v install --destdir=../Xash --strip || die
git checkout opfor
./waf configure -T fast --enable-magx build -v install --destdir=../Xash --strip || die
popd popd
./waf configure -T fast --enable-magx build install --destdir=Xash/ || die
cat > Xash/run.sh << 'EOF' cat > Xash/run.sh << 'EOF'
mypath=${0%/*} mypath=${0%/*}
LIBDIR1=/ezxlocal/download/mystuff/games/lib LIBDIR1=/ezxlocal/download/mystuff/games/lib

View File

@ -209,6 +209,7 @@ def configure(conf):
conf.options.LOW_MEMORY = 1 conf.options.LOW_MEMORY = 1
conf.options.NO_ASYNC_RESOLVE = True conf.options.NO_ASYNC_RESOLVE = True
conf.define('XASH_SDLMAIN', 1) conf.define('XASH_SDLMAIN', 1)
conf.define('XASH_MAGX', 1)
enforce_pic = False enforce_pic = False
elif conf.env.DEST_OS == 'nswitch': elif conf.env.DEST_OS == 'nswitch':
conf.options.NO_VGUI = True conf.options.NO_VGUI = True
@ -271,6 +272,9 @@ def configure(conf):
# Do not warn us about bug in SDL_Audio headers # Do not warn us about bug in SDL_Audio headers
conf.env.append_unique('CFLAGS', ['-Wno-attributes']) conf.env.append_unique('CFLAGS', ['-Wno-attributes'])
conf.env.append_unique('CXXFLAGS', ['-Wno-attributes']) conf.env.append_unique('CXXFLAGS', ['-Wno-attributes'])
elif conf.env.MAGX:
conf.env.append_unique('CFLAGS', ['-std=gnu99'])
conf.env.append_unique('CXXFLAGS', ['-std=gnu++98'])
conf.check_cc(cflags=cflags, linkflags=linkflags, msg='Checking for required C flags') conf.check_cc(cflags=cflags, linkflags=linkflags, msg='Checking for required C flags')
conf.check_cxx(cxxflags=cxxflags, linkflags=linkflags, msg='Checking for required C++ flags') conf.check_cxx(cxxflags=cxxflags, linkflags=linkflags, msg='Checking for required C++ flags')