From f197a66af22f597f7f83d51ee6ae86b6c1783f6b Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 29 Jan 2022 17:47:55 +0000 Subject: [PATCH] cleaner steamworks switches --- dep/steam/steamworks_thin.h | 848 ------------------------------------ src/vg/config.h | 34 -- src/vg/template_game.c | 1 - src/vg/vg.h | 14 +- src/vg/vg_audio.h | 3 + src/vg/vg_console.h | 2 +- src/vg/vg_input.h | 2 +- src/vg/vg_steamworks.h | 17 +- vg_compiler.sh | 13 +- 9 files changed, 32 insertions(+), 902 deletions(-) delete mode 100644 dep/steam/steamworks_thin.h delete mode 100644 src/vg/config.h diff --git a/dep/steam/steamworks_thin.h b/dep/steam/steamworks_thin.h deleted file mode 100644 index 5c6397b..0000000 --- a/dep/steam/steamworks_thin.h +++ /dev/null @@ -1,848 +0,0 @@ -/* - steamworks_thin.h - simple wrapper / macro set for building steamworks apps in pure C - Usage: - Put the latest steam_api.dll in your build folder - link against -lsteam_api - - all functions are prefixed with sw_ -*/ - -#ifndef STEAMWORKS_H -#define STEAMWORKS_H - -#include -#include - -GLuint _localplayer_image; -char _localplayer_name[128]; - -#ifndef NO_STEAM - -#ifndef VOYAGER_RELEASE_MODE - #define STRUCTURE_PACK_CHECK -#endif - -/*______________________________________________________________________________________________________________________________ - - ENUMS -______________________________________________________________________________________________________________________________*/ - -typedef enum{ - - k_ESteamIPTypeIPv4 = 0, - k_ESteamIPTypeIPv6 = 1, - -} ESteamIPType_t; - -typedef enum{ - - k_ESNetSocketConnectionTypeNotConnected = 0, - k_ESNetSocketConnectionTypeUDP = 1, - k_ESNetSocketConnectionTypeUDPRelay = 2, - -} ESNetSocketConnectionType_t; - -//----------------------------------------------------------------------------- -// Purpose: Base values for callback identifiers, each callback must -// have a unique ID. -//----------------------------------------------------------------------------- - -enum { k_iSteamUserCallbacks = 100 }; -enum { k_iSteamGameServerCallbacks = 200 }; -enum { k_iSteamFriendsCallbacks = 300 }; -enum { k_iSteamBillingCallbacks = 400 }; -enum { k_iSteamMatchmakingCallbacks = 500 }; -enum { k_iSteamContentServerCallbacks = 600 }; -enum { k_iSteamUtilsCallbacks = 700 }; -enum { k_iClientFriendsCallbacks = 800 }; -enum { k_iClientUserCallbacks = 900 }; -enum { k_iSteamAppsCallbacks = 1000 }; -enum { k_iSteamUserStatsCallbacks = 1100 }; -enum { k_iSteamNetworkingCallbacks = 1200 }; -enum { k_iSteamNetworkingSocketsCallbacks = 1220 }; -enum { k_iSteamNetworkingMessagesCallbacks = 1250 }; -enum { k_iSteamNetworkingUtilsCallbacks = 1280 }; -enum { k_iClientRemoteStorageCallbacks = 1300 }; -enum { k_iClientDepotBuilderCallbacks = 1400 }; -enum { k_iSteamGameServerItemsCallbacks = 1500 }; -enum { k_iClientUtilsCallbacks = 1600 }; -enum { k_iSteamGameCoordinatorCallbacks = 1700 }; -enum { k_iSteamGameServerStatsCallbacks = 1800 }; -enum { k_iSteam2AsyncCallbacks = 1900 }; -enum { k_iSteamGameStatsCallbacks = 2000 }; -enum { k_iClientHTTPCallbacks = 2100 }; -enum { k_iClientScreenshotsCallbacks = 2200 }; -enum { k_iSteamScreenshotsCallbacks = 2300 }; -enum { k_iClientAudioCallbacks = 2400 }; -enum { k_iClientUnifiedMessagesCallbacks = 2500 }; -enum { k_iSteamStreamLauncherCallbacks = 2600 }; -enum { k_iClientControllerCallbacks = 2700 }; -enum { k_iSteamControllerCallbacks = 2800 }; -enum { k_iClientParentalSettingsCallbacks = 2900 }; -enum { k_iClientDeviceAuthCallbacks = 3000 }; -enum { k_iClientNetworkDeviceManagerCallbacks = 3100 }; -enum { k_iClientMusicCallbacks = 3200 }; -enum { k_iClientRemoteClientManagerCallbacks = 3300 }; -enum { k_iClientUGCCallbacks = 3400 }; -enum { k_iSteamStreamClientCallbacks = 3500 }; -enum { k_IClientProductBuilderCallbacks = 3600 }; -enum { k_iClientShortcutsCallbacks = 3700 }; -enum { k_iClientRemoteControlManagerCallbacks = 3800 }; -enum { k_iSteamAppListCallbacks = 3900 }; -enum { k_iSteamMusicCallbacks = 4000 }; -enum { k_iSteamMusicRemoteCallbacks = 4100 }; -enum { k_iClientVRCallbacks = 4200 }; -enum { k_iClientGameNotificationCallbacks = 4300 }; -enum { k_iSteamGameNotificationCallbacks = 4400 }; -enum { k_iSteamHTMLSurfaceCallbacks = 4500 }; -enum { k_iClientVideoCallbacks = 4600 }; -enum { k_iClientInventoryCallbacks = 4700 }; -enum { k_iClientBluetoothManagerCallbacks = 4800 }; -enum { k_iClientSharedConnectionCallbacks = 4900 }; -enum { k_ISteamParentalSettingsCallbacks = 5000 }; -enum { k_iClientShaderCallbacks = 5100 }; -enum { k_iSteamGameSearchCallbacks = 5200 }; -enum { k_iSteamPartiesCallbacks = 5300 }; -enum { k_iClientPartiesCallbacks = 5400 }; -enum { k_iSteamSTARCallbacks = 5500 }; -enum { k_iClientSTARCallbacks = 5600 }; -enum { k_iSteamRemotePlayCallbacks = 5700 }; -enum { k_iClientCompatCallbacks = 5800 }; -enum { k_iSteamChatCallbacks = 5900 }; - -// Steam universes. Each universe is a self-contained Steam instance. -typedef enum { - k_EUniverseInvalid = 0, - k_EUniversePublic = 1, - k_EUniverseBeta = 2, - k_EUniverseInternal = 3, - k_EUniverseDev = 4, - // k_EUniverseRC = 5, // no such universe anymore - k_EUniverseMax -} EUniverse_t; - -typedef enum{ - // Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare). - // The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or - // there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again. - k_EP2PSendUnreliable = 0, - - // As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first - // packet sent to a remote host almost guarantees the packet will be dropped. - // This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets - k_EP2PSendUnreliableNoDelay = 1, - - // Reliable message send. Can send up to 1MB of data in a single message. - // Does fragmentation/re-assembly of messages under the hood, as well as a sliding window for efficient sends of large chunks of data. - k_EP2PSendReliable = 2, - - // As above, but applies the Nagle algorithm to the send - sends will accumulate - // until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm). - // Useful if you want to send a set of smaller messages but have the coalesced into a single packet - // Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then - // do a normal k_EP2PSendReliable to force all the buffered data to be sent. - k_EP2PSendReliableWithBuffering = 3, - -} EP2PSend_t; - -// list of possible errors returned by SendP2PPacket() API -// these will be posted in the P2PSessionConnectFail_t callback -typedef enum { - k_EP2PSessionErrorNone = 0, - k_EP2PSessionErrorNotRunningApp = 1, // target is not running the same game - k_EP2PSessionErrorNoRightsToApp = 2, // local user doesn't own the app that is running - k_EP2PSessionErrorDestinationNotLoggedIn = 3, // target user isn't connected to Steam - k_EP2PSessionErrorTimeout = 4, // target isn't responding, perhaps not calling AcceptP2PSessionWithUser() - // corporate firewalls can also block this (NAT traversal is not firewall traversal) - // make sure that UDP ports 3478, 4379, and 4380 are open in an outbound direction - k_EP2PSessionErrorMax = 5 -} EP2PSessionError_t; - -typedef enum { - - k_EFriendFlagNone = 0x00, - k_EFriendFlagBlocked = 0x01, - k_EFriendFlagFriendshipRequested = 0x02, - k_EFriendFlagImmediate = 0x04, // "regular" friend - k_EFriendFlagClanMember = 0x08, - k_EFriendFlagOnGameServer = 0x10, - // k_EFriendFlagHasPlayedWith = 0x20, // not currently used - // k_EFriendFlagFriendOfFriend = 0x40, // not currently used - k_EFriendFlagRequestingFriendship = 0x80, - k_EFriendFlagRequestingInfo = 0x100, - k_EFriendFlagIgnored = 0x200, - k_EFriendFlagIgnoredFriend = 0x400, - // k_EFriendFlagSuggested = 0x800, // not used - k_EFriendFlagChatMember = 0x1000, - k_EFriendFlagAll = 0xFFFF, - -} EFriendFlags_t; - -// size limits on Rich Presence data -enum { k_cchMaxRichPresenceKeys = 30 }; -enum { k_cchMaxRichPresenceKeyLength = 64 }; -enum { k_cchMaxRichPresenceValueLength = 256 }; - -/*______________________________________________________________________________________________________________________________ - - STEAM TYPES -______________________________________________________________________________________________________________________________*/ - -// Redefube class pointers to void -typedef void ISteamFriends; -typedef void ISteamUserStats; -typedef void ISteamUtils; -typedef void ISteamUser; -typedef void ISteamNetworking; - -typedef int32_t HSteamPipe; -typedef int32_t HSteamUser; - -typedef int E_iCallBack_t; - -typedef uint32_t SNetSocket_t; // CreateP2PConnectionSocket() -typedef uint32_t SNetListenSocket_t; // CreateListenSocket() - -typedef uint64_t uint64_steamid; -typedef uint64_t SteamAPICall_t; - -/*______________________________________________________________________________________________________________________________ - - PACKING: 1 Byte -______________________________________________________________________________________________________________________________*/ - -#pragma pack( push, 1 ) - -typedef struct -{ - // 64 bits total - union { - struct SteamIDComponent_t - { -#ifdef VALVE_BIG_ENDIAN - EUniverse_t m_EUniverse : 8; // universe this account belongs to - unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference - unsigned int m_unAccountInstance : 20; // dynamic instance ID - uint32_t m_unAccountID : 32; // unique account identifier -#else - uint32_t m_unAccountID : 32; // unique account identifier - unsigned int m_unAccountInstance : 20; // dynamic instance ID - unsigned int m_EAccountType : 4; // type of account - can't show as EAccountType, due to signed / unsigned difference - EUniverse_t m_EUniverse : 8; // universe this account belongs to -#endif - } m_comp; - - uint64_t m_unAll64Bits; - }; -} CSteamID; - -typedef struct{ - union { - - uint32_t m_unIPv4; // Host order - uint8_t m_rgubIPv6[16]; // Network order! Same as inaddr_in6. (0011:2233:4455:6677:8899:aabb:ccdd:eeff) - - // Internal use only - uint64_t m_ipv6Qword[2]; // big endian - - }; - - ESteamIPType_t m_eType; - -} SteamIPAddress_t; - -#pragma pack(pop) - -/*______________________________________________________________________________________________________________________________ - - PACKING: Some kind of strange alignment thing -______________________________________________________________________________________________________________________________*/ - -#if defined(__linux__) || defined(__APPLE__) -// The 32-bit version of gcc has the alignment requirement for uint64 and double set to -// 4 meaning that even with #pragma pack(8) these types will only be four-byte aligned. -// The 64-bit version of gcc has the alignment requirement for these types set to -// 8 meaning that unless we use #pragma pack(4) our structures will get bigger. -// The 64-bit structure packing has to match the 32-bit structure packing for each platform. - #define VALVE_CALLBACK_PACK_SMALL -#else - #define VALVE_CALLBACK_PACK_LARGE -#endif - -#if defined( VALVE_CALLBACK_PACK_SMALL ) - #pragma pack( push, 4 ) -#elif defined( VALVE_CALLBACK_PACK_LARGE ) - #pragma pack( push, 8 ) -#else - #error steam_api_common.h should define VALVE_CALLBACK_PACK_xxx -#endif - -typedef struct{ - - uint8_t m_bConnectionActive; // true if we've got an active open connection - uint8_t m_bConnecting; // true if we're currently trying to establish a connection - uint8_t m_eP2PSessionError; // last error recorded (see enum above) - uint8_t m_bUsingRelay; // true if it's going through a relay server (TURN) - int32_t m_nBytesQueuedForSend; - int32_t m_nPacketsQueuedForSend; - uint32_t m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server. - uint16_t m_nRemotePort; // Only exists for compatibility with older authentication api's - -} P2PSessionState_t; - -typedef struct { - - HSteamUser m_hSteamUser; // Specific user to whom this callback applies. - int m_iCallback; // Callback identifier. (Corresponds to the k_iCallback enum in the callback structure.) - uint8_t *m_pubParam; // Points to the callback structure - int m_cubParam; // Size of the data pointed to by m_pubParam - -} CallbackMsg_t; - -typedef struct { - - SteamAPICall_t m_hAsyncCall; - int m_iCallback; - uint32_t m_cubParam; - -} SteamAPICallCompleted_t; -#define SW_CBID_SteamAPICallCompleted (k_iSteamUtilsCallbacks + 3) - - -// callback notification - a user wants to talk to us over the P2P channel via the SendP2PPacket() API -// in response, a call to AcceptP2PPacketsFromUser() needs to be made, if you want to talk with them -typedef struct { - - CSteamID m_steamIDRemote; // user who wants to talk to us - -} P2PSessionRequest_t; -#define SW_CBID_P2PSessionRequest (k_iSteamNetworkingCallbacks + 2) - - -// callback notification - packets can't get through to the specified user via the SendP2PPacket() API -// all packets queued packets unsent at this point will be dropped -// further attempts to send will retry making the connection (but will be dropped if we fail again) -typedef struct { - - CSteamID m_steamIDRemote; // user we were sending packets to - uint8_t m_eP2PSessionError; // EP2PSessionError indicating why we're having trouble - -} P2PSessionConnectFail_t; -#define SW_CBID_P2PSessionConnectFail (k_iSteamNetworkingCallbacks + 3) - -// callback notification - status of a socket has changed -// used as part of the CreateListenSocket() / CreateP2PConnectionSocket() -typedef struct { - - SNetSocket_t m_hSocket; // the socket used to send/receive data to the remote host - SNetListenSocket_t m_hListenSocket; // this is the server socket that we were listening on; NULL if this was an outgoing connection - CSteamID m_steamIDRemote; // remote steamID we have connected to, if it has one - int m_eSNetSocketState; // socket state, ESNetSocketState - -} SocketStatusCallback_t; -#define SW_CBID_SocketStatusCallback (k_iSteamNetworkingCallbacks + 1) - -//----------------------------------------------------------------------------- -// Purpose: called when the user tries to join a game from their friends list -// rich presence will have been set with the "connect" key which is set here -//----------------------------------------------------------------------------- -typedef struct { - CSteamID m_steamIDFriend; // the friend they did the join via (will be invalid if not directly via a friend) - char m_rgchConnect[k_cchMaxRichPresenceValueLength]; -} GameRichPresenceJoinRequested_t; -#define SW_CBID_GameRichPresenceJoinRequested (k_iSteamFriendsCallbacks + 37) - -// Making SURE we have alignment -#ifdef STRUCTURE_PACK_CHECK -typedef struct { - uint32_t m_u32; - uint64_t m_u64; - uint16_t m_u16; - double m_d; -} ValvePackingSentinel_t; -#endif - -#pragma pack( pop ) - -#ifndef NO_STEAM - -/*______________________________________________________________________________________________________________________________ - - Forward linker declerations. Type: cdecl (obviously) -______________________________________________________________________________________________________________________________*/ - -void SteamAPI_Shutdown(); -int SteamAPI_Init(); -int SteamAPI_RestartAppIfNecessary( uint32_t unOwnAppID ); - -void SteamAPI_ManualDispatch_Init(); -void SteamAPI_ManualDispatch_RunFrame( HSteamPipe hSteamPipe ); -int SteamAPI_ManualDispatch_GetNextCallback( HSteamPipe hSteamPipe, CallbackMsg_t *pCallbackMsg ); -void SteamAPI_ManualDispatch_FreeLastCallback( HSteamPipe hSteamPipe ); -int SteamAPI_ManualDispatch_GetAPICallResult( HSteamPipe hSteamPipe, SteamAPICall_t hSteamAPICall, void *pCallback, int cubCallback, int iCallbackExpected, int *pbFailed ); - - -char *SteamAPI_ISteamFriends_GetPersonaName( ISteamFriends *self ); -const char *SteamAPI_ISteamFriends_GetFriendPersonaName( ISteamFriends *self, uint64_steamid steamIDFriend ); -uint64_steamid SteamAPI_ISteamUser_GetSteamID( ISteamUser *self ); -int SteamAPI_ISteamFriends_SetRichPresence( ISteamFriends* self, const char * pchKey, const char * pchValue ); -int SteamAPI_ISteamFriends_HasFriend( ISteamFriends* self, uint64_steamid steamIDFriend, int iFriendFlags ); -int SteamAPI_ISteamFriends_GetSmallFriendAvatar ( ISteamFriends *self, uint64_steamid steamIDFriend ); // 32x32 -int SteamAPI_ISteamFriends_GetMediumFriendAvatar ( ISteamFriends *self, uint64_steamid steamIDFriend ); -int SteamAPI_ISteamFriends_GetLargeFriendAvatar ( ISteamFriends *self, uint64_steamid steamIDFriend ); -int SteamAPI_ISteamUtils_GetImageSize( ISteamUtils *self, int iImage, uint32_t *pnWidth, uint32_t *pnHeight ); -int SteamAPI_ISteamUtils_GetImageRGBA( ISteamUtils *self, int iImage, uint8_t *pubDest, int nDestBufferSize ); -int SteamAPI_ISteamUserStats_SetAchievement( ISteamUserStats *self, const char *pchName ); - -HSteamPipe SteamAPI_GetHSteamPipe(); -HSteamUser SteamAPI_GetHSteamUser(); - -/* NETWORKING INTERFACES --------------------------*/ - -int /* SendP2PPacket */ SteamAPI_ISteamNetworking_SendP2PPacket( ISteamNetworking *self, - uint64_steamid steamIDRemote, - const void *pubData, - uint32_t cubData, - EP2PSend_t eP2PSendType, - int nChannel -); - -int /* IsP2PPacketAvailable */ SteamAPI_ISteamNetworking_IsP2PPacketAvailable( ISteamNetworking *self, - uint32_t *pcubMsgSize, - int nChannel -); - -int /* ReadP2PPacket */ SteamAPI_ISteamNetworking_ReadP2PPacket( ISteamNetworking *self, - void *pubDest, - uint32_t cubDest, - uint32_t *pcubMsgSize, - CSteamID *psteamIDRemote, - int nChannel -); - -int /* AcceptP2PSessionWithUser */ SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser( ISteamNetworking *self, - uint64_steamid steamIDRemote -); - -int /* CloseP2PSessionWithUser */ SteamAPI_ISteamNetworking_CloseP2PSessionWithUser( ISteamNetworking *self, - uint64_steamid steamIDRemote -); - -int /* CloseP2PChannelWithUser */ SteamAPI_ISteamNetworking_CloseP2PChannelWithUser( ISteamNetworking *self, - uint64_steamid steamIDRemote, - int nChannel -); - -int /* GetP2PSessionState */ SteamAPI_ISteamNetworking_GetP2PSessionState( ISteamNetworking *self, - uint64_steamid steamIDRemote, - P2PSessionState_t *pConnectionState -); - -int /* AllowP2PPacketRelay */ SteamAPI_ISteamNetworking_AllowP2PPacketRelay( ISteamNetworking *self, - int bAllow -); - -SNetListenSocket_t /* CreateListenSocket */ SteamAPI_ISteamNetworking_CreateListenSocket( ISteamNetworking *self, - int nVirtualP2PPort, - SteamIPAddress_t nIP, - uint16_t nPort, - int bAllowUseOfPacketRelay -); - -SNetSocket_t /* CreateP2PConnectionSocket */ SteamAPI_ISteamNetworking_CreateP2PConnectionSocket( ISteamNetworking *self, - uint64_steamid steamIDTarget, - int nVirtualPort, - int nTimeoutSec, - int bAllowUseOfPacketRelay -); - -SNetSocket_t /* CreateConnectionSocket */ SteamAPI_ISteamNetworking_CreateConnectionSocket( ISteamNetworking *self, - SteamIPAddress_t nIP, - uint16_t nPort, - int nTimeoutSec -); - -int /* DestroySocket */ SteamAPI_ISteamNetworking_DestroySocket( ISteamNetworking *self, - SNetSocket_t hSocket, - int bNotifyRemoteEnd -); - -int /* DestroyListenSocket */ SteamAPI_ISteamNetworking_DestroyListenSocket( ISteamNetworking *self, - SNetListenSocket_t hSocket, - int bNotifyRemoteEnd -); - -int /* SendDataOnSocket */ SteamAPI_ISteamNetworking_SendDataOnSocket( ISteamNetworking *self, - SNetSocket_t hSocket, - void *pubData, - uint32_t cubData, - int bReliable -); - -int /* IsDataAvailableOnSocket */ SteamAPI_ISteamNetworking_IsDataAvailableOnSocket( ISteamNetworking *self, - SNetSocket_t hSocket, - uint32_t *pcubMsgSize -); - -int /* RetrieveDataFromSocket */ SteamAPI_ISteamNetworking_RetrieveDataFromSocket( ISteamNetworking *self, - SNetSocket_t hSocket, - void *pubDest, - uint32_t cubDest, - uint32_t *pcubMsgSize -); - -int /* IsDataAvailable */ SteamAPI_ISteamNetworking_IsDataAvailable( ISteamNetworking *self, - SNetListenSocket_t hListenSocket, - uint32_t *pcubMsgSize, - SNetSocket_t *phSocket -); - -int /* RetrieveData */ SteamAPI_ISteamNetworking_RetrieveData( ISteamNetworking *self, - SNetListenSocket_t hListenSocket, - void *pubDest, - uint32_t cubDest, - uint32_t *pcubMsgSize, - SNetSocket_t *phSocket -); - -int /* GetSocketInfo */ SteamAPI_ISteamNetworking_GetSocketInfo( ISteamNetworking *self, - SNetSocket_t hSocket, - CSteamID *pSteamIDRemote, - int *peSocketStatus, - SteamIPAddress_t *punIPRemote, - uint16_t *punPortRemote -); - -int /* GetListenSocketInfo */ SteamAPI_ISteamNetworking_GetListenSocketInfo( ISteamNetworking *self, - SNetListenSocket_t hListenSocket, - SteamIPAddress_t *pnIP, - uint16_t *pnPort -); - -ESNetSocketConnectionType_t /* GetSocketConnectionType */ SteamAPI_ISteamNetworking_GetSocketConnectionType( ISteamNetworking *self, - SNetSocket_t hSocket -); - -int /* GetMaxPacketSize */ SteamAPI_ISteamNetworking_GetMaxPacketSize( ISteamNetworking *self, - SNetSocket_t hSocket -); - -#define sw_SteamAPI_Shutdown SteamAPI_Shutdown -#define sw_SteamAPI_Init() SteamAPI_Init() -#define sw_SteamAPI_RestartAppIfNecessary(...) SteamAPI_RestartAppIfNecessary( __VA_ARGS__ ) - -// This method can only be cleared correctly in first party c++ mode -// See: sw_SteamAPI_ManualDispatch_Init -// #define sw_SteamAPI_RunCallbacks() - -// Steam pipe stuff -#define sw_SteamAPI_GetHSteamPipe() SteamAPI_GetHSteamPipe() -#define sw_SteamAPI_GetHSteamUser() SteamAPI_GetHSteamUser() - -#define sw_SteamAPI_ManualDispatch_Init() SteamAPI_ManualDispatch_Init() -#define sw_SteamAPI_ManualDispatch_GetNextCallback(...) SteamAPI_ManualDispatch_GetNextCallback( __VA_ARGS__ ) -#define sw_SteamAPI_ManualDispatch_FreeLastCallback(...) SteamAPI_ManualDispatch_FreeLastCallback( __VA_ARGS__ ) -#define sw_SteamAPI_ManualDispatch_GetAPICallResult(...) SteamAPI_ManualDispatch_GetAPICallResult( __VA_ARGS__ ) -#define sw_SteamAPI_ManualDispatch_RunFrame(...) SteamAPI_ManualDispatch_RunFrame( __VA_ARGS__ ) - -#define sw_GetPersonaName(...) SteamAPI_ISteamFriends_GetPersonaName( __thinsteam_friends, ##__VA_ARGS__ ) -#define sw_GetFriendPersonaName(...) SteamAPI_ISteamFriends_GetFriendPersonaName( __thinsteam_friends, __VA_ARGS__ ) -#define sw_GetSteamID(...) SteamAPI_ISteamUser_GetSteamID( __thinsteam_user, ##__VA_ARGS__ ) -#define sw_HasFriend(...) SteamAPI_ISteamFriends_HasFriend( __thinsteam_friends, __VA_ARGS__ ) -#define sw_SetRichPresence(...) SteamAPI_ISteamFriends_SetRichPresence( __thinsteam_friends, __VA_ARGS__ ) - -#define sw_GetSmallFriendAvatar(...) SteamAPI_ISteamFriends_GetSmallFriendAvatar( __thinsteam_friends, ##__VA_ARGS__ ) -#define sw_GetMediumFriendAvatar(...) SteamAPI_ISteamFriends_GetMediumFriendAvatar( __thinsteam_friends, ##__VA_ARGS__ ) -#define sw_GetLargeFriendAvatar(...) SteamAPI_ISteamFriends_GetLargeFriendAvatar( __thinsteam_friends, ##__VA_ARGS__ ) -#define sw_GetImageSize(...) SteamAPI_ISteamUtils_GetImageSize( __thinsteam_utils, ##__VA_ARGS__ ) -#define sw_GetImageRGBA(...) SteamAPI_ISteamUtils_GetImageRGBA( __thinsteam_utils, ##__VA_ARGS__ ) - -#define sw_SetAchievement(...) SteamAPI_ISteamUserStats_SetAchievement( __thinsteam_stats, ##__VA_ARGS__ ) - -// https://partner.steamgames.com/doc/api/ISteamNetworkingUtils -#define sw_SendP2PPacket(...) SteamAPI_ISteamNetworking_SendP2PPacket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_IsP2PPacketAvailable(...) SteamAPI_ISteamNetworking_IsP2PPacketAvailable( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_ReadP2PPacket(...) SteamAPI_ISteamNetworking_ReadP2PPacket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_AcceptP2PSessionWithUser(...) SteamAPI_ISteamNetworking_AcceptP2PSessionWithUser( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_CloseP2PSessionWithUser(...) SteamAPI_ISteamNetworking_CloseP2PSessionWithUser( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_CloseP2PChannelWithUser(...) SteamAPI_ISteamNetworking_CloseP2PChannelWithUser( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_GetP2PSessionState(...) SteamAPI_ISteamNetworking_GetP2PSessionState( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_AllowP2PPacketRelay(...) SteamAPI_ISteamNetworking_AllowP2PPacketRelay( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_CreateListenSocket(...) SteamAPI_ISteamNetworking_CreateListenSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_CreateP2PConnectionSocket(...) SteamAPI_ISteamNetworking_CreateP2PConnectionSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_CreateConnectionSocket(...) SteamAPI_ISteamNetworking_CreateConnectionSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_DestroySocket(...) SteamAPI_ISteamNetworking_DestroySocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_DestroyListenSocket(...) SteamAPI_ISteamNetworking_DestroyListenSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_SendDataOnSocket(...) SteamAPI_ISteamNetworking_SendDataOnSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_IsDataAvailableOnSocket(...) SteamAPI_ISteamNetworking_IsDataAvailableOnSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_RetrieveDataFromSocket(...) SteamAPI_ISteamNetworking_RetrieveDataFromSocket( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_IsDataAvailable(...) SteamAPI_ISteamNetworking_IsDataAvailable( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_RetrieveData(...) SteamAPI_ISteamNetworking_RetrieveData( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_GetSocketInfo(...) SteamAPI_ISteamNetworking_GetSocketInfo( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_GetListenSocketInfo(...) SteamAPI_ISteamNetworking_GetListenSocketInfo( __thinsteam_net, ##__VA_ARGS__ ) -#define sw_GetSocketConnectionType(...) SteamAPI_ISteamNetworking_GetSocketConnectionType( __thinsteam_net,##__VA_ARGS__ ) -#define sw_GetMaxPacketSize(...) SteamAPI_ISteamNetworking_GetMaxPacketSize( __thinsteam_net, ##__VA_ARGS__ ) - -#define _sw__fill( self, func, ... ) func( self, ##__VA_ARGS__ ) -#endif - -/*______________________________________________________________________________________________________________________________ - - WRAPPER LAYER -______________________________________________________________________________________________________________________________*/ - -ISteamFriends *__thinsteam_friends = NULL; -ISteamUser *__thinsteam_user = NULL; -ISteamUtils *__thinsteam_utils = NULL; -ISteamUserStats *__thinsteam_stats = NULL; -ISteamNetworking *__thinsteam_net = NULL; - -ISteamFriends *SteamAPI_SteamFriends_v017(); -ISteamUser *SteamAPI_SteamUser_v021(); -ISteamUtils *SteamAPI_SteamUtils_v009(); -ISteamUserStats *SteamAPI_SteamUserStats_v012(); -ISteamNetworking *SteamAPI_SteamNetworking_v006(); - -HSteamPipe g_hSteamPipe; - -GLuint get_player_image( uint64_steamid usr ) -{ - GLuint gl_img; - - uint32_t x = 64, y = 64; - int steam_image; - - steam_image = sw_GetMediumFriendAvatar( usr ); - sw_GetImageSize( steam_image, &x, &y ); - - unsigned char * img_buf = (unsigned char *)calloc( x * y * 4, 1 ); - - sw_GetImageRGBA( steam_image, img_buf, x * y * 4 ); - - glGenTextures( 1, &gl_img ); - glBindTexture( GL_TEXTURE_2D, gl_img ); - - glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, img_buf ); - glGenerateMipmap( GL_TEXTURE_2D ); - - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - - free( img_buf ); - - return gl_img; -} - -int sw_vipid( uint64_steamid usr ) -{ - static uint64_steamid massiveLEGENDS[] = - { - 76561198134179460, // Spud - 76561198020563704, // Assasssin - 76561198062961277, // lopen - 76561198084693332 // ernie - }; - - for( int i = 0; i < sizeof(massiveLEGENDS)/sizeof(massiveLEGENDS[0]); i ++ ) - { - if( massiveLEGENDS[i] == usr ) - return 1; - } - - return 0; -} - -// Initialize steamworks through this function and your appid -int sw_init( uint32_t appid ) { - -#ifdef STRUCTURE_PACK_CHECK - -// This code should never fail and if it does something went wrong with the build -// Remember to undefine STRUCTURE_PACK_CHECK for publishing!!! - -#if defined(VALVE_CALLBACK_PACK_SMALL) - if( sizeof(ValvePackingSentinel_t) != 24 ){ - printf( "Struct packing error: ValvePackingSentinel_t expected 24 got %i\nThe application is built incorrectly\n", (int)sizeof(ValvePackingSentinel_t)); - return 0; - } -#elif defined(VALVE_CALLBACK_PACK_LARGE) - if( sizeof(ValvePackingSentinel_t) != 32 ){ - printf( "Struct packing error: ValvePackingSentinel_t expected 32 got %i\nThe application is built incorrectly\n", (int)sizeof(ValvePackingSentinel_t)); - return 0; - } -#else - #error ??? -#endif - -#endif - - #ifdef STEAMWORKS_VERBOSE - printf( "Initializing steamworks..\n" ); - #endif - - if( sw_SteamAPI_RestartAppIfNecessary( appid ) == 1 ){ - #ifdef STEAMWORKS_VERBOSE - printf( "Restarting via steam\n" ); - #endif - return 0; - } - - if( !sw_SteamAPI_Init() ){ - #ifdef STEAMWORKS_VERBOSE - printf( "Steamworks connection failed\n" ); - #endif - return 0; - } - - // We are using C so we have to deal with callbacks microsoft event loop style - sw_SteamAPI_ManualDispatch_Init(); - - __thinsteam_friends = SteamAPI_SteamFriends_v017(); - __thinsteam_user = SteamAPI_SteamUser_v021(); - __thinsteam_utils = SteamAPI_SteamUtils_v009(); - __thinsteam_stats = SteamAPI_SteamUserStats_v012(); - __thinsteam_net = SteamAPI_SteamNetworking_v006(); - - // This might happen if the DLL is too old - if( !__thinsteam_friends | !__thinsteam_user | !__thinsteam_utils | !__thinsteam_stats | !__thinsteam_net ){ - #ifdef STEAMWORKS_VERBOSE - printf( "Interface hooks failed\n" ); - #endif - return 0; - } - - g_hSteamPipe = sw_SteamAPI_GetHSteamPipe(); - - #ifdef STEAMWORKS_VERBOSE - printf( "Steamworks ready\n" ); - #endif - - return 1; -} - -void sw_init_postgl() -{ - _localplayer_image = get_player_image( sw_GetSteamID() ); - strcpy( _localplayer_name, sw_GetPersonaName() ); -} - -/*______________________________________________________________________________________________________________________________ - - USER CODE -______________________________________________________________________________________________________________________________*/ - -// Macro Creates (args): -// Function(args) pointer definition -// Callback global pointer -// sw_SetCallback (*ptr) function - -#define _swCallbackPair( CNAME, ... ) \ -typedef void(*sw_##CNAME##Fun)( __VA_ARGS__ ); \ -sw_##CNAME##Fun CNAME = NULL; \ -void sw_Set##CNAME##Callback(sw_##CNAME##Fun d) { CNAME = d; } - -_swCallbackPair( OnSocketStatus, SNetSocket_t, SNetListenSocket_t, CSteamID, int ) -_swCallbackPair( OnP2PSessionConnectFail, CSteamID, EP2PSessionError_t ) -_swCallbackPair( OnP2PSessionRequest, CSteamID ) -_swCallbackPair( OnSteamJoinRequest, CSteamID, char * ) - -void sw_RunSteamEventLoop(void) -{ - sw_SteamAPI_ManualDispatch_RunFrame( g_hSteamPipe ); - CallbackMsg_t callback; - while( sw_SteamAPI_ManualDispatch_GetNextCallback( g_hSteamPipe, &callback ) ){ - - // Check for dispatching API call results - if( callback.m_iCallback == SW_CBID_SteamAPICallCompleted ){ - - SteamAPICallCompleted_t *pCallCompleted = (SteamAPICallCompleted_t *)&callback; - void *pTmpCallResult = malloc( pCallCompleted->m_cubParam ); - int bFailed; - - if( sw_SteamAPI_ManualDispatch_GetAPICallResult( g_hSteamPipe, pCallCompleted->m_hAsyncCall, pTmpCallResult, \ - pCallCompleted->m_cubParam, pCallCompleted->m_iCallback, &bFailed ) ){ - - // Dispatch the call result to the registered handler(s) for the - // call identified by pCallCompleted->m_hAsyncCall - - } - - free( pTmpCallResult ); - - } else { - - // Look at callback.m_iCallback to see what kind of callback it is, - // and dispatch to appropriate handler(s) - - vg_info( "steamworks_event::callback( %i )\n", callback.m_iCallback ); - - void *data = callback.m_pubParam; - - switch( callback.m_iCallback ){ - - case SW_CBID_P2PSessionRequest: if( OnP2PSessionRequest ) OnP2PSessionRequest( - ((P2PSessionRequest_t *)data)->m_steamIDRemote - ); break; - - case SW_CBID_SocketStatusCallback: if( OnSocketStatus ) OnSocketStatus( - ((SocketStatusCallback_t *)data)->m_hSocket, - ((SocketStatusCallback_t *)data)->m_hListenSocket, - ((SocketStatusCallback_t *)data)->m_steamIDRemote, - ((SocketStatusCallback_t *)data)->m_eSNetSocketState - ); break; - - case SW_CBID_P2PSessionConnectFail: if( OnP2PSessionConnectFail ) OnP2PSessionConnectFail( - ((P2PSessionConnectFail_t *)data)->m_steamIDRemote, - ((P2PSessionConnectFail_t *)data)->m_eP2PSessionError - ); break; - - case SW_CBID_GameRichPresenceJoinRequested: if( OnSteamJoinRequest ) OnSteamJoinRequest( - ((GameRichPresenceJoinRequested_t *)data)->m_steamIDFriend, - ((GameRichPresenceJoinRequested_t *)data)->m_rgchConnect - ); break; - - default: break; - - } - - } - - SteamAPI_ManualDispatch_FreeLastCallback( g_hSteamPipe ); - - } - -} - -/*______________________________________________________________________________________________________________________________ - - NO_STEAM -______________________________________________________________________________________________________________________________*/ - -#else // #define NO_STEAM -// In case we dont want to spam the steam servers - -char *__str_sw_unlinked = "__NO_STEAMWORKS__"; - -#define SW_BLANK_RETURN 0 - -#define sw_init( x ) 1 -#define sw_exit() -#define sw_runcallbacks() -#define sw_get_persona_name() __str_sw_unlinked -#define sw_get_steamid() SW_BLANK_RETURN -#define sw_get_friend_smallavatar( x ) SW_BLANK_RETURN -#define sw_get_friend_mediumavatar( x ) SW_BLANK_RETURN -#define sw_get_friend_largeavatar( x ) SW_BLANK_RETURN - -#define sw_get_image_size( x, y, z ) -#define sw_get_image_rgba( x, y, z ) -#define sw_set_achievement( x ) - -#endif - -#endif - diff --git a/src/vg/config.h b/src/vg/config.h deleted file mode 100644 index 6bfb311..0000000 --- a/src/vg/config.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved - -static struct button_binding vg_button_binds[] = -{ - { .name = "primary", .bind = GLFW_MOUSE_BUTTON_LEFT }, - { .name = "secondary", .bind = GLFW_MOUSE_BUTTON_RIGHT }, - { .name = "tertiary", .bind = GLFW_MOUSE_BUTTON_MIDDLE }, - { .name = "noclip", .bind = GLFW_KEY_V }, - { .name = "go", .bind = GLFW_KEY_SPACE }, - { .name = "prev", .bind = GLFW_KEY_N }, - { .name = "next", .bind = GLFW_KEY_M } -}; - -static struct axis_binding vg_axis_binds[] = -{ - { .name = "primary", .positive = GLFW_MOUSE_BUTTON_LEFT, .negative = -1 }, - { .name = "secondary", .positive = GLFW_MOUSE_BUTTON_RIGHT, .negative = -1 }, - { .name = "horizontal", .positive = GLFW_KEY_D, .negative = GLFW_KEY_A }, - { .name = "vertical", .positive = GLFW_KEY_W, .negative = GLFW_KEY_S } -}; - -#ifdef VG_STEAM -static struct vg_achievement vg_achievements[] = -{ - { .name = "CAN_DO_THAT" }, - { .name = "TUTORIALS" }, - { .name = "GRADUATE" }, - { .name = "BANG" }, - { .name = "GOOD_ENOUGH" }, - { .name = "MIGHTY_CONSUMER" }, - { .name = "SQUEEZE" }, - { .name = "MASTER_ENGINEER" } -}; -#endif diff --git a/src/vg/template_game.c b/src/vg/template_game.c index d85cfca..15b26e9 100644 --- a/src/vg/template_game.c +++ b/src/vg/template_game.c @@ -1,6 +1,5 @@ // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved -//#define VG_STEAM #include "vg/vg.h" m3x3f m_projection; diff --git a/src/vg/vg.h b/src/vg/vg.h index e210277..cb59cd1 100644 --- a/src/vg/vg.h +++ b/src/vg/vg.h @@ -1,12 +1,11 @@ // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved +// TODO: replace as much of this as possible #include #include -#include #include #include #include -#include #include #include "glad/glad.h" @@ -14,8 +13,6 @@ #define STB_DS_IMPLEMENTATION #include "stb/stb_ds.h" -//#define STB_IMAGE_IMPLEMENTATION -//#include "stb/stb_image.h" #define QOI_IMPLEMENTATION #include "phoboslab/qoi.h" @@ -64,10 +61,7 @@ float vg_time_delta; #include "vg/vg_ui.h" #include "vg/vg_console.h" #include "vg/vg_debug.h" - -#ifdef VG_STEAM #include "vg/vg_steamworks.h" -#endif // Engine main // =========================================================================================================== @@ -150,11 +144,9 @@ static void vg_free(void) VG_GAMELOOP; static void vg_init( int argc, char *argv[], const char *window_name ) { -#ifdef VG_STEAM // Initialize steamworks if( !sw_init() ) return; -#endif // Context creation // ========================================================================================================================== @@ -233,6 +225,7 @@ static void vg_init( int argc, char *argv[], const char *window_name ) vg_register(); vg_register_exit( &vg_free, "vg_free" ); + vg_register_exit( &sw_free_opengl, "steamworks (opengl)" ); if( vg_shaders_compile() ) { @@ -252,10 +245,7 @@ static void vg_init( int argc, char *argv[], const char *window_name ) v2_copy( (v2f){ 0.0f, 0.0f }, vg_mouse_wheel ); glfwPollEvents(); - - #ifdef VG_STEAM sw_event_loop(); - #endif vg_time_last = vg_time; vg_time = glfwGetTime(); diff --git a/src/vg/vg_audio.h b/src/vg/vg_audio.h index e62d584..0fb61bd 100644 --- a/src/vg/vg_audio.h +++ b/src/vg/vg_audio.h @@ -1,5 +1,8 @@ // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved +#define MA_NO_GENERATION +#define MA_NO_DECODING +#define MA_NO_ENCODING #define MINIAUDIO_IMPLEMENTATION #include "dr_soft/miniaudio.h" diff --git a/src/vg/vg_console.h b/src/vg/vg_console.h index 07a90d2..e8ca2f0 100644 --- a/src/vg/vg_console.h +++ b/src/vg/vg_console.h @@ -275,7 +275,7 @@ static void execute_console_input( const char *cmd ) { if( cmd[i] ) { - if( isspace( cmd[i] ) ) + if( cmd[i] == ' ' || cmd[i] == '\t' ) { temp[i] = '\0'; in_token = 0; diff --git a/src/vg/vg_input.h b/src/vg/vg_input.h index 62d4690..8c43550 100644 --- a/src/vg/vg_input.h +++ b/src/vg/vg_input.h @@ -50,7 +50,7 @@ static struct button_binding } vg_button_binds[]; -#include "vg/config.h" +#include "vg_config.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wreturn-type" diff --git a/src/vg/vg_steamworks.h b/src/vg/vg_steamworks.h index c0baba5..1a3e899 100644 --- a/src/vg/vg_steamworks.h +++ b/src/vg/vg_steamworks.h @@ -635,6 +635,8 @@ static void _sw_access_cache( struct cached_player *player ) static GLuint sw_get_player_image( u64_steamid usr ) { +#ifdef VG_STEAM + // Look for player in cache for( int i = 0; i < steam_api_classes.cache_count; i ++ ) { @@ -700,6 +702,10 @@ static GLuint sw_get_player_image( u64_steamid usr ) free( img_buf ); return dest->avatar_texture; + +#else + return 0; +#endif } ISteamFriends *SteamAPI_SteamFriends_v017(); @@ -710,10 +716,11 @@ ISteamUtils *SteamAPI_SteamUtils_v010(); static void sw_exit(void) { +#ifdef VG_STEAM SteamAPI_Shutdown(); +#endif } -// Needs to be manually called by client unfortunately static void sw_free_opengl(void) { for( int i = 0; i < steam_api_classes.cache_count; i ++ ) @@ -723,6 +730,7 @@ static void sw_free_opengl(void) static int sw_init(void) { +#ifdef VG_STEAM #if defined(VALVE_CALLBACK_PACK_SMALL) if( sizeof(ValvePackingSentinel_t) != 24 ){ printf( "Struct packing error: ValvePackingSentinel_t expected 24 got %i\nThe application is built incorrectly\n", (int)sizeof(ValvePackingSentinel_t)); @@ -769,6 +777,9 @@ static int sw_init(void) vg_register_exit( &sw_exit, "SteamAPI" ); return 1; +#else + return 1; +#endif } @@ -777,6 +788,7 @@ void (*sw_leaderboard_downloaded)( LeaderboardScoresDownloaded_t *pCallback ); static void sw_event_loop(void) { +#ifdef VG_STEAM SteamAPI_ManualDispatch_RunFrame( steam_api_classes.pipe ); CallbackMsg_t callback; @@ -851,6 +863,7 @@ static void sw_event_loop(void) SteamAPI_ManualDispatch_FreeLastCallback( steam_api_classes.pipe ); } +#endif } static void sw_set_achievement( const char *vg_ach_name ) @@ -863,7 +876,9 @@ static void sw_set_achievement( const char *vg_ach_name ) if( !ach->is_set ) { +#ifdef VG_STEAM SteamAPI_ISteamUserStats_SetAchievement( steam_api_classes.stats, vg_ach_name ); +#endif ach->is_set = 1; vg_success( "Achievement set: '%s'\n", vg_ach_name ); } diff --git a/vg_compiler.sh b/vg_compiler.sh index fec59b9..49a12fd 100755 --- a/vg_compiler.sh +++ b/vg_compiler.sh @@ -12,6 +12,7 @@ opt_linux=false opt_windows=false opt_tools=false opt_full=false +opt_gcc="" opt_steam="" # Util @@ -66,7 +67,7 @@ target_os_windows(){ target_os_linux(){ target_ext="" target_compiler="gcc" - target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl" + target_libs="-lGL -lglfw -lX11 -lXxf86vm -lXrandr -lm -lpthread -lXi -ldl -lsteam_api" target_dir="build.linux" target_steam_api="libsteam_api.so" if [ $opt_release = true ]; then @@ -77,8 +78,8 @@ target_os_linux(){ } compile_x(){ - paths="-I. -L$vg_root/dep/glfw -I$vg_root/dep -I$vg_root/src" - setup="$target_compiler -Wall -Wstrict-aliasing=3 -Wno-unused-function $paths" + paths="-I. -L$vg_root/dep/glfw -L$vg_root/dep/steam -I$vg_root/dep -I$vg_root/src" + setup="$target_compiler $opt_gcc -Wall -Wstrict-aliasing=3 -Wno-unused-function $paths" targets="$1 $vg_root/dep/glad/glad.c -o $2$target_ext" final="$target_libs -Wl,-rpath=./ $opt_steam" cmd="$setup $target_opts $targets $final" @@ -177,7 +178,7 @@ else target_os_linux fi -options=rptlwa +options=rptlwaq longopts=release,build-linux,build-windows,steam,play,build-tools,assets,full parsed=$(getopt --options=$options --longoptions=$longopts --name "vgc" -- "$@") @@ -189,6 +190,10 @@ fi eval set -- "$parsed" while true; do case "$1" in + -q) + opt_gcc="" + shift; + ;; -a|--assets) opt_assets=true shift; -- 2.25.1