#endif
#include <string>
+#include <vector>
#include "irrlicht.h"
#include "irrlichttypes.h" // u32
#include "irrlichttypes_extrabloated.h"
#ifdef _WIN32
#include <windows.h>
-
+
#define sleep_ms(x) Sleep(x)
#else
#include <unistd.h>
#include <stdint.h> //for uintptr_t
-
- #if (defined(linux) || defined(__linux)) && !defined(_GNU_SOURCE)
+
+ #if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE)
#define _GNU_SOURCE
#endif
#endif
#define sleep_ms(x) usleep(x*1000)
-
+
#define THREAD_PRIORITY_LOWEST 0
#define THREAD_PRIORITY_BELOW_NORMAL 1
#define THREAD_PRIORITY_NORMAL 2
#define _WIN32_WINNT 0x0501
#endif
#include <windows.h>
-
+
inline u32 getTimeS()
{
return GetTickCount() / 1000;
}
-
+
inline u32 getTimeMs()
{
return GetTickCount();
}
-
+
inline u32 getTimeUs()
{
LARGE_INTEGER freq, t;
QueryPerformanceCounter(&t);
return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000.0);
}
-
+
inline u32 getTimeNs()
{
LARGE_INTEGER freq, t;
QueryPerformanceCounter(&t);
return (double)(t.QuadPart) / ((double)(freq.QuadPart) / 1000000000.0);
}
-
+
#else // Posix
#include <sys/time.h>
#include <time.h>
-#ifdef __MACH__
+#if defined(__MACH__) && defined(__APPLE__)
#include <mach/clock.h>
#include <mach/mach.h>
#endif
gettimeofday(&tv, NULL);
return tv.tv_sec;
}
-
+
inline u32 getTimeMs()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
-
+
inline u32 getTimeUs()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000000 + tv.tv_usec;
}
-
+
inline u32 getTimeNs()
{
struct timespec ts;
// from http://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
-#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time
+#if defined(__MACH__) && defined(__APPLE__) // OS X does not have clock_gettime, use clock_get_time
clock_serv_t cclock;
mach_timespec_t mts;
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
#endif
return ts.tv_sec * 1000000000 + ts.tv_nsec;
}
-
+
/*#include <sys/timeb.h>
inline u32 getTimeMs()
{
inline void setThreadName(const char *name) {
pthread_setname_np(name);
}
-#elif defined(_WIN32)
+#elif defined(_WIN32) || defined(__GNU__)
inline void setThreadName(const char* name) {}
#else
#warning "Unrecognized platform, thread names will not be available."
v2u32 getDisplaySize();
v2u32 getWindowSize();
+
+std::vector<core::vector3d<u32> > getSupportedVideoModes();
+std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
+const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type);
+const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type);
#endif
+inline const char *getPlatformName()
+{
+ return
+#if defined(ANDROID)
+ "Android"
+#elif defined(linux) || defined(__linux) || defined(__linux__)
+ "Linux"
+#elif defined(_WIN32) || defined(_WIN64)
+ "Windows"
+#elif defined(__DragonFly__) || defined(__FreeBSD__) || \
+ defined(__NetBSD__) || defined(__OpenBSD__)
+ "BSD"
+#elif defined(__APPLE__) && defined(__MACH__)
+ #if TARGET_OS_MAC
+ "OSX"
+ #elif TARGET_OS_IPHONE
+ "iOS"
+ #else
+ "Apple"
+ #endif
+#elif defined(_AIX)
+ "AIX"
+#elif defined(__hpux)
+ "HP-UX"
+#elif defined(__sun) || defined(sun)
+ #if defined(__SVR4)
+ "Solaris"
+ #else
+ "SunOS"
+ #endif
+#elif defined(__CYGWIN__)
+ "Cygwin"
+#elif defined(__unix__) || defined(__unix)
+ #if defined(_POSIX_VERSION)
+ "Posix"
+ #else
+ "Unix"
+ #endif
+#else
+ "?"
+#endif
+ ;
+}
+
+void setXorgClassHint(const video::SExposedVideoData &video_data,
+ const std::string &name);
+
+// This only needs to be called at the start of execution, since all future
+// threads in the process inherit this exception handler
+void setWin32ExceptionHandler();
+
} // namespace porting
+#ifdef __ANDROID__
+#include "porting_android.h"
+#endif
+
#endif // PORTING_HEADER