+++ /dev/null
-// Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
-
-typedef uint8_t u8;
-typedef uint16_t u16;
-typedef uint32_t u32;
-typedef uint64_t u64;
-typedef int8_t i8;
-typedef int16_t i16;
-typedef int32_t i32;
-typedef int64_t i64;
-
-typedef unsigned int uint;
-
-typedef int v2i[2];
-typedef int v3i[3];
-typedef int v4i[4];
-typedef float v2f[2];
-typedef float v3f[3];
-typedef float v4f[4];
-typedef v2f m2x2f[2];
-typedef v3f m3x3f[3];
-typedef v3f m4x3f[4];
-typedef v3f boxf[2];
-
-// Resource types
-typedef struct vg_tex2d vg_tex2d;
-
-struct vg_achievement
-{
- int is_set;
- const char *name;
-};
-
-#define vg_static_assert _Static_assert
-
-#define vg_list_size( A ) (sizeof(A)/sizeof(A[0]))
-
-// THREADING
-// ==================================================================================================================
-
-// Pthred emulation for windows
-#ifdef _WIN32
- #include <windows.h>
- #define MUTEX_TYPE HANDLE
- #define MUTEX_INITIALIZER NULL
- #define MUTEX_SETUP(x) (x) = CreateMutex(NULL, FALSE, NULL)
- #define MUTEX_CLEANUP(x) (CloseHandle(x)) //TODO: Why is this defined but never used?
- #define MUTEX_LOCK(x) emulate_pthread_mutex_lock(&(x))
- #define MUTEX_UNLOCK(x) (ReleaseMutex(x))
-
- int emulate_pthread_mutex_lock( volatile MUTEX_TYPE *mx )
- {
- if( *mx == NULL ) /* static initializer? */
- {
- HANDLE p = CreateMutex( NULL, FALSE, NULL );
- if( InterlockedCompareExchangePointer( (PVOID*)mx, (PVOID)p, NULL ) != NULL )
- CloseHandle(p);
- }
-
- return WaitForSingleObject( *mx, INFINITE ) == WAIT_FAILED;
- }
-#else
- #include <pthread.h>
- #define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
- #define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
- #define MUTEX_TYPE pthread_mutex_t
- #define MUTEX_INITIALIZER {0}
-#endif
-
-
-int vg_thread_run( void *pfunc, void *data )
-{
-#ifdef _WIN32
-
- HANDLE hThread = CreateThread
- (
- NULL, // Thread attributes
- 0, // Stack size (0 = use default)
- pfunc, // Thread start address
- data, // Parameter to pass to the thread
- 0, // Creation flags
- NULL // Thread id
- );
-
- if ( hThread == NULL )
- {
- // Thread creation failed.
- // More details can be retrieved by calling GetLastError()
- return 1;
- }
- else
- {
- CloseHandle( hThread );
- return 0;
- }
-
-#else
-
- pthread_t hThread;
- if( pthread_create( &hThread, NULL, pfunc, data ) )
- {
- return 1;
- }
- else
- {
- pthread_detach( hThread );
- return 0;
- }
-
-#endif
-}