mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2024-11-23 02:15:55 +01:00
platform_sdl: adapt SDL backend code to new platform backends system
This commit is contained in:
parent
960e46c564
commit
7390d11505
@ -26,13 +26,7 @@ GNU General Public License for more details.
|
||||
#include "vid_common.h"
|
||||
#include "gl_local.h"
|
||||
|
||||
extern convar_t *vid_fullscreen;
|
||||
extern convar_t *snd_mute_losefocus;
|
||||
static int wheelbutton;
|
||||
static SDL_Joystick *joy;
|
||||
static SDL_GameController *gamecontroller;
|
||||
|
||||
void R_ChangeDisplaySettingsFast( int w, int h );
|
||||
|
||||
/*
|
||||
=============
|
||||
@ -194,17 +188,6 @@ static void SDLash_InputEvent( SDL_TextInputEvent input )
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_EnableTextInput
|
||||
|
||||
=============
|
||||
*/
|
||||
void SDLash_EnableTextInput( qboolean enable )
|
||||
{
|
||||
enable ? SDL_StartTextInput() : SDL_StopTextInput();
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_EventFilter
|
||||
@ -479,7 +462,7 @@ SDLash_RunEvents
|
||||
|
||||
=============
|
||||
*/
|
||||
void SDLash_RunEvents( void )
|
||||
void Platform_RunEvents( void )
|
||||
{
|
||||
SDL_Event event;
|
||||
|
||||
@ -487,154 +470,9 @@ void SDLash_RunEvents( void )
|
||||
SDLash_EventFilter( &event );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_JoyInit_Old
|
||||
|
||||
=============
|
||||
*/
|
||||
static int SDLash_JoyInit_Old( int numjoy )
|
||||
void* Platform_GetNativeObject( void )
|
||||
{
|
||||
int num;
|
||||
int i;
|
||||
|
||||
MsgDev( D_INFO, "Joystick: SDL\n" );
|
||||
|
||||
if( SDL_WasInit( SDL_INIT_JOYSTICK ) != SDL_INIT_JOYSTICK &&
|
||||
SDL_InitSubSystem( SDL_INIT_JOYSTICK ) )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to initialize SDL Joysitck: %s\n", SDL_GetError() );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( joy )
|
||||
{
|
||||
SDL_JoystickClose( joy );
|
||||
}
|
||||
|
||||
num = SDL_NumJoysticks();
|
||||
|
||||
if( num > 0 )
|
||||
MsgDev( D_INFO, "%i joysticks found:\n", num );
|
||||
else
|
||||
{
|
||||
MsgDev( D_INFO, "No joystick found.\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
for( i = 0; i < num; i++ )
|
||||
MsgDev( D_INFO, "%i\t: %s\n", i, SDL_JoystickNameForIndex( i ) );
|
||||
|
||||
MsgDev( D_INFO, "Pass +set joy_index N to command line, where N is number, to select active joystick\n" );
|
||||
|
||||
joy = SDL_JoystickOpen( numjoy );
|
||||
|
||||
if( !joy )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to select joystick: %s\n", SDL_GetError( ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
MsgDev( D_INFO, "Selected joystick: %s\n"
|
||||
"\tAxes: %i\n"
|
||||
"\tHats: %i\n"
|
||||
"\tButtons: %i\n"
|
||||
"\tBalls: %i\n",
|
||||
SDL_JoystickName( joy ), SDL_JoystickNumAxes( joy ), SDL_JoystickNumHats( joy ),
|
||||
SDL_JoystickNumButtons( joy ), SDL_JoystickNumBalls( joy ) );
|
||||
|
||||
SDL_GameControllerEventState( SDL_DISABLE );
|
||||
SDL_JoystickEventState( SDL_ENABLE );
|
||||
|
||||
return num;
|
||||
return NULL; // SDL don't have it
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_JoyInit_New
|
||||
|
||||
=============
|
||||
*/
|
||||
static int SDLash_JoyInit_New( int numjoy )
|
||||
{
|
||||
int temp, num;
|
||||
int i;
|
||||
|
||||
MsgDev( D_INFO, "Joystick: SDL GameController API\n" );
|
||||
|
||||
if( SDL_WasInit( SDL_INIT_GAMECONTROLLER ) != SDL_INIT_GAMECONTROLLER &&
|
||||
SDL_InitSubSystem( SDL_INIT_GAMECONTROLLER ) )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to initialize SDL GameController API: %s\n", SDL_GetError() );
|
||||
return 0;
|
||||
}
|
||||
|
||||
// chance to add mappings from file
|
||||
SDL_GameControllerAddMappingsFromFile( "controllermappings.txt" );
|
||||
|
||||
if( gamecontroller )
|
||||
{
|
||||
SDL_GameControllerClose( gamecontroller );
|
||||
}
|
||||
|
||||
temp = SDL_NumJoysticks();
|
||||
num = 0;
|
||||
|
||||
for( i = 0; i < temp; i++ )
|
||||
{
|
||||
if( SDL_IsGameController( i ))
|
||||
num++;
|
||||
}
|
||||
|
||||
if( num > 0 )
|
||||
MsgDev( D_INFO, "%i joysticks found:\n", num );
|
||||
else
|
||||
{
|
||||
MsgDev( D_INFO, "No joystick found.\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
for( i = 0; i < num; i++ )
|
||||
MsgDev( D_INFO, "%i\t: %s\n", i, SDL_GameControllerNameForIndex( i ) );
|
||||
|
||||
MsgDev( D_INFO, "Pass +set joy_index N to command line, where N is number, to select active joystick\n" );
|
||||
|
||||
gamecontroller = SDL_GameControllerOpen( numjoy );
|
||||
|
||||
if( !gamecontroller )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to select joystick: %s\n", SDL_GetError( ) );
|
||||
return 0;
|
||||
}
|
||||
// was added in SDL2-2.0.6, allow build with earlier versions just in case
|
||||
#if SDL_MAJOR_VERSION > 2 || SDL_MINOR_VERSION > 0 || SDL_PATCHLEVEL >= 6
|
||||
MsgDev( D_INFO, "Selected joystick: %s (%i:%i:%i)\n",
|
||||
SDL_GameControllerName( gamecontroller ),
|
||||
SDL_GameControllerGetVendor( gamecontroller ),
|
||||
SDL_GameControllerGetProduct( gamecontroller ),
|
||||
SDL_GameControllerGetProductVersion( gamecontroller ));
|
||||
#endif
|
||||
SDL_GameControllerEventState( SDL_ENABLE );
|
||||
SDL_JoystickEventState( SDL_DISABLE );
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_JoyInit
|
||||
|
||||
=============
|
||||
*/
|
||||
int SDLash_JoyInit( int numjoy )
|
||||
{
|
||||
// SDL_Joystick is now an old API
|
||||
// SDL_GameController is preferred
|
||||
if( Sys_CheckParm( "-sdl_joy_old_api" ) )
|
||||
return SDLash_JoyInit_Old(numjoy);
|
||||
|
||||
return SDLash_JoyInit_New(numjoy);
|
||||
}
|
||||
|
||||
|
||||
#endif // defined( XASH_SDL ) && !defined( XASH_DEDICATED )
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
events.h - SDL event system handlers
|
||||
Copyright (C) 2015-2017 a1batross
|
||||
events.h - SDL backend internal header
|
||||
Copyright (C) 2015-2018 a1batross
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -16,12 +16,20 @@ GNU General Public License for more details.
|
||||
#pragma once
|
||||
#ifndef KEYWRAPPER_H
|
||||
#define KEYWRAPPER_H
|
||||
#ifdef XASH_SDL
|
||||
|
||||
#ifdef XASH_SDL
|
||||
#include "platform/platform.h"
|
||||
|
||||
// window management
|
||||
void VID_RestoreScreenResolution( void );
|
||||
void R_ChangeDisplaySettingsFast( int width, int height ); // for fast resizing
|
||||
qboolean VID_CreateWindow( int width, int height, qboolean fullscreen );
|
||||
void VID_DestroyWindow( void );
|
||||
void GL_InitExtensions( void );
|
||||
qboolean GL_CreateContext( void );
|
||||
qboolean GL_UpdateContext( void );
|
||||
qboolean GL_DeleteContext( void );
|
||||
|
||||
void SDLash_RunEvents( void );
|
||||
void SDLash_EnableTextInput( qboolean enable );
|
||||
int SDLash_JoyInit( int numjoy ); // pass -1 to init every joystick
|
||||
|
||||
#endif // XASH_SDL
|
||||
#endif // KEYWRAPPER_H
|
||||
|
202
engine/platform/sdl/in_sdl.c
Normal file
202
engine/platform/sdl/in_sdl.c
Normal file
@ -0,0 +1,202 @@
|
||||
/*
|
||||
vid_sdl.c - SDL input component
|
||||
Copyright (C) 2018 a1batross
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
*/
|
||||
#ifndef XASH_DEDICATED
|
||||
#include <SDL.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "keydefs.h"
|
||||
#include "input.h"
|
||||
#include "client.h"
|
||||
#include "vgui_draw.h"
|
||||
#include "events.h"
|
||||
#include "sound.h"
|
||||
#include "vid_common.h"
|
||||
#include "gl_local.h"
|
||||
|
||||
static SDL_Joystick *joy;
|
||||
static SDL_GameController *gamecontroller;
|
||||
|
||||
/*
|
||||
=============
|
||||
Platform_Vibrate
|
||||
|
||||
=============
|
||||
*/
|
||||
void Platform_Vibrate( float time, char flags )
|
||||
{
|
||||
// stub
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_EnableTextInput
|
||||
|
||||
=============
|
||||
*/
|
||||
void Platform_EnableTextInput( qboolean enable )
|
||||
{
|
||||
enable ? SDL_StartTextInput() : SDL_StopTextInput();
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_JoyInit_Old
|
||||
|
||||
=============
|
||||
*/
|
||||
static int SDLash_JoyInit_Old( int numjoy )
|
||||
{
|
||||
int num;
|
||||
int i;
|
||||
|
||||
MsgDev( D_INFO, "Joystick: SDL\n" );
|
||||
|
||||
if( SDL_WasInit( SDL_INIT_JOYSTICK ) != SDL_INIT_JOYSTICK &&
|
||||
SDL_InitSubSystem( SDL_INIT_JOYSTICK ) )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to initialize SDL Joysitck: %s\n", SDL_GetError() );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( joy )
|
||||
{
|
||||
SDL_JoystickClose( joy );
|
||||
}
|
||||
|
||||
num = SDL_NumJoysticks();
|
||||
|
||||
if( num > 0 )
|
||||
MsgDev( D_INFO, "%i joysticks found:\n", num );
|
||||
else
|
||||
{
|
||||
MsgDev( D_INFO, "No joystick found.\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
for( i = 0; i < num; i++ )
|
||||
MsgDev( D_INFO, "%i\t: %s\n", i, SDL_JoystickNameForIndex( i ) );
|
||||
|
||||
MsgDev( D_INFO, "Pass +set joy_index N to command line, where N is number, to select active joystick\n" );
|
||||
|
||||
joy = SDL_JoystickOpen( numjoy );
|
||||
|
||||
if( !joy )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to select joystick: %s\n", SDL_GetError( ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
MsgDev( D_INFO, "Selected joystick: %s\n"
|
||||
"\tAxes: %i\n"
|
||||
"\tHats: %i\n"
|
||||
"\tButtons: %i\n"
|
||||
"\tBalls: %i\n",
|
||||
SDL_JoystickName( joy ), SDL_JoystickNumAxes( joy ), SDL_JoystickNumHats( joy ),
|
||||
SDL_JoystickNumButtons( joy ), SDL_JoystickNumBalls( joy ) );
|
||||
|
||||
SDL_GameControllerEventState( SDL_DISABLE );
|
||||
SDL_JoystickEventState( SDL_ENABLE );
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_JoyInit_New
|
||||
|
||||
=============
|
||||
*/
|
||||
static int SDLash_JoyInit_New( int numjoy )
|
||||
{
|
||||
int temp, num;
|
||||
int i;
|
||||
|
||||
MsgDev( D_INFO, "Joystick: SDL GameController API\n" );
|
||||
|
||||
if( SDL_WasInit( SDL_INIT_GAMECONTROLLER ) != SDL_INIT_GAMECONTROLLER &&
|
||||
SDL_InitSubSystem( SDL_INIT_GAMECONTROLLER ) )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to initialize SDL GameController API: %s\n", SDL_GetError() );
|
||||
return 0;
|
||||
}
|
||||
|
||||
// chance to add mappings from file
|
||||
SDL_GameControllerAddMappingsFromFile( "controllermappings.txt" );
|
||||
|
||||
if( gamecontroller )
|
||||
{
|
||||
SDL_GameControllerClose( gamecontroller );
|
||||
}
|
||||
|
||||
temp = SDL_NumJoysticks();
|
||||
num = 0;
|
||||
|
||||
for( i = 0; i < temp; i++ )
|
||||
{
|
||||
if( SDL_IsGameController( i ))
|
||||
num++;
|
||||
}
|
||||
|
||||
if( num > 0 )
|
||||
MsgDev( D_INFO, "%i joysticks found:\n", num );
|
||||
else
|
||||
{
|
||||
MsgDev( D_INFO, "No joystick found.\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
for( i = 0; i < num; i++ )
|
||||
MsgDev( D_INFO, "%i\t: %s\n", i, SDL_GameControllerNameForIndex( i ) );
|
||||
|
||||
MsgDev( D_INFO, "Pass +set joy_index N to command line, where N is number, to select active joystick\n" );
|
||||
|
||||
gamecontroller = SDL_GameControllerOpen( numjoy );
|
||||
|
||||
if( !gamecontroller )
|
||||
{
|
||||
MsgDev( D_INFO, "Failed to select joystick: %s\n", SDL_GetError( ) );
|
||||
return 0;
|
||||
}
|
||||
// was added in SDL2-2.0.6, allow build with earlier versions just in case
|
||||
#if SDL_MAJOR_VERSION > 2 || SDL_MINOR_VERSION > 0 || SDL_PATCHLEVEL >= 6
|
||||
MsgDev( D_INFO, "Selected joystick: %s (%i:%i:%i)\n",
|
||||
SDL_GameControllerName( gamecontroller ),
|
||||
SDL_GameControllerGetVendor( gamecontroller ),
|
||||
SDL_GameControllerGetProduct( gamecontroller ),
|
||||
SDL_GameControllerGetProductVersion( gamecontroller ));
|
||||
#endif
|
||||
SDL_GameControllerEventState( SDL_ENABLE );
|
||||
SDL_JoystickEventState( SDL_DISABLE );
|
||||
|
||||
return num;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
Platform_JoyInit
|
||||
|
||||
=============
|
||||
*/
|
||||
int Platform_JoyInit( int numjoy )
|
||||
{
|
||||
// SDL_Joystick is now an old API
|
||||
// SDL_GameController is preferred
|
||||
if( Sys_CheckParm( "-sdl_joy_old_api" ) )
|
||||
return SDLash_JoyInit_Old(numjoy);
|
||||
|
||||
return SDLash_JoyInit_New(numjoy);
|
||||
}
|
||||
|
||||
#endif // XASH_DEDICATED
|
@ -13,14 +13,14 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
*/
|
||||
#ifndef XASH_DEDICATED
|
||||
|
||||
#include <SDL.h>
|
||||
#include "common.h"
|
||||
#include "client.h"
|
||||
#include "gl_local.h"
|
||||
#include "mod_local.h"
|
||||
#include "input.h"
|
||||
#include "vid_common.h"
|
||||
#include <SDL.h>
|
||||
#include "platform/sdl/events.h"
|
||||
|
||||
static vidmode_t *vidmodes = NULL;
|
||||
static int num_vidmodes = 0;
|
||||
@ -204,18 +204,14 @@ int R_MaxVideoModes( void )
|
||||
return num_vidmodes;
|
||||
}
|
||||
|
||||
vidmode_t R_GetVideoMode( int num )
|
||||
vidmode_t *R_GetVideoMode( int num )
|
||||
{
|
||||
static vidmode_t error = { NULL };
|
||||
|
||||
if( !vidmodes || num < 0 || num >= R_MaxVideoModes() )
|
||||
{
|
||||
error.width = glState.width;
|
||||
error.height = glState.height;
|
||||
return error;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return vidmodes[num];
|
||||
return vidmodes + num;
|
||||
}
|
||||
|
||||
static void R_InitVideoModes( void )
|
||||
@ -417,6 +413,24 @@ void GL_UpdateSwapInterval( void )
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
GL_DeleteContext
|
||||
|
||||
always return false
|
||||
=================
|
||||
*/
|
||||
qboolean GL_DeleteContext( void )
|
||||
{
|
||||
if( glw_state.context )
|
||||
{
|
||||
SDL_GL_DeleteContext(glw_state.context);
|
||||
glw_state.context = NULL;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
GL_CreateContext
|
||||
@ -471,24 +485,6 @@ qboolean GL_UpdateContext( void )
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
GL_DeleteContext
|
||||
|
||||
always return false
|
||||
=================
|
||||
*/
|
||||
qboolean GL_DeleteContext( void )
|
||||
{
|
||||
if( glw_state.context )
|
||||
{
|
||||
SDL_GL_DeleteContext(glw_state.context);
|
||||
glw_state.context = NULL;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
qboolean VID_SetScreenResolution( int width, int height )
|
||||
{
|
||||
SDL_DisplayMode want, got;
|
||||
@ -837,13 +833,14 @@ static void GL_SetupAttributes( void )
|
||||
|
||||
/*
|
||||
==================
|
||||
R_Init_OpenGL
|
||||
R_Init_Video
|
||||
==================
|
||||
*/
|
||||
qboolean R_Init_OpenGL( void )
|
||||
qboolean R_Init_Video( void )
|
||||
{
|
||||
SDL_DisplayMode displayMode;
|
||||
string safe;
|
||||
qboolean retval;
|
||||
|
||||
SDL_GetCurrentDisplayMode(0, &displayMode);
|
||||
glw_state.desktopBitsPixel = SDL_BITSPERPIXEL(displayMode.format);
|
||||
@ -875,7 +872,12 @@ qboolean R_Init_OpenGL( void )
|
||||
WIN_SetDPIAwareness();
|
||||
#endif
|
||||
|
||||
return VID_SetMode();
|
||||
if( !(retval = VID_SetMode()) )
|
||||
{
|
||||
return retval;
|
||||
}
|
||||
|
||||
GL_InitExtensions();
|
||||
}
|
||||
|
||||
#ifdef XASH_GLES
|
||||
@ -1253,10 +1255,10 @@ qboolean VID_SetMode( void )
|
||||
|
||||
/*
|
||||
==================
|
||||
R_Free_OpenGL
|
||||
R_Free_Video
|
||||
==================
|
||||
*/
|
||||
void R_Free_OpenGL( void )
|
||||
void R_Free_Video( void )
|
||||
{
|
||||
GL_DeleteContext ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user