4#define OF_VERSION_MAJOR 0
5#define OF_VERSION_MINOR 12
6#define OF_VERSION_PATCH 0
7#define OF_VERSION_PRE_RELEASE "master"
21#ifndef OF_USE_LEGACY_VECTOR_MATH
22 #define OF_USE_LEGACY_VECTOR_MATH 0
26#define GLM_FORCE_CTOR_INIT
57#ifndef OF_TARGET_IPHONE
58 #define OF_TARGET_IPHONE OF_TARGET_IOS
65 #if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || __GNUC__ > 4
66 #define OF_DEPRECATED_MSG(message, ...) __VA_ARGS__ __attribute__ ((deprecated(message)))
68 #define OF_DEPRECATED_MSG(message, ...) __VA_ARGS__ __attribute__ ((deprecated))
70 #define OF_DEPRECATED(...) __VA_ARGS__ __attribute__ ((deprecated))
71 #define OF_INTERNAL_DEPRECATED(...) __VA_ARGS__ __attribute__ ((deprecated("OF core deprecated")))
72#elif defined(_MSC_VER)
73 #define OF_DEPRECATED_MSG(message, ...) __declspec(deprecated(message)) __VA_ARGS__
74 #define OF_DEPRECATED(...) __declspec(deprecated) __VA_ARGS__
75 #define OF_INTERNAL_DEPRECATED(...) __declspec(deprecated("OF core deprecated")) __VA_ARGS__
77 #pragma message("WARNING: You need to implement DEPRECATED for this compiler")
78 #define OF_DEPRECATED_MSG(message, ...) __VA_ARGS__
79 #define OF_DEPRECATED(...) __VA_ARGS__
89#if defined( __WIN32__ ) || defined( _WIN32 )
95 #if defined(__MINGW32__) || defined(__MINGW64__)
98#elif defined( __APPLE_CC__)
99 #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0
100 #include <TargetConditionals.h>
101 #if (TARGET_OS_IPHONE || TARGET_OS_IOS || TARGET_OS_SIMULATOR || TARGET_IPHONE_SIMULATOR) && !TARGET_OS_TV && !TARGET_OS_WATCH
102 #define TARGET_OF_IPHONE
103 #define TARGET_OF_IOS
104 #define TARGET_OPENGLES
107 #define TARGET_OF_IOS
108 #define TARGET_OF_TVOS
109 #define TARGET_OPENGLES
111 #elif TARGET_OS_WATCH
112 #define TARGET_OF_IOS
113 #define TARGET_OF_WATCHOS
114 #define TARGET_OPENGLES
119#elif defined (__ANDROID__)
120 #define TARGET_ANDROID
121 #define TARGET_OPENGLES
122#elif defined(__ARMEL__)
124 #define TARGET_OPENGLES
125 #define TARGET_LINUX_ARM
126#elif defined(__EMSCRIPTEN__)
127 #define TARGET_EMSCRIPTEN
128 #define TARGET_OPENGLES
129 #define TARGET_PROGRAMMABLE_GL
130 #define TARGET_IMPLEMENTS_URL_LOADER
142 #include "GL/wglew.h"
143 #define __WINDOWS_DS__
144 #define __WINDOWS_MM__
147 #define _CRT_SECURE_NO_WARNINGS
148 #define _WINSOCK_DEPRECATED_NO_WARNINGS
151 #include <functional>
152 #pragma warning(disable : 4068)
153 #pragma warning(disable : 4756)
154 #pragma warning(disable : 4800)
158 #pragma warning(disable : 4244)
159 #pragma warning(disable : 4305)
167 #define TARGET_LITTLE_ENDIAN
171 #define GL_BGR_EXT 0x80E0
174 #define WIN32_HIGH_RES_TIMING
190 #ifndef __MACOSX_CORE__
191 #define __MACOSX_CORE__
195 #include <ApplicationServices/ApplicationServices.h>
197 #if defined(__LITTLE_ENDIAN__)
198 #define TARGET_LITTLE_ENDIAN
201 #if defined(__OBJC__) && !__has_feature(objc_arc)
202 #warning "Please enable ARC (Automatic Reference Counting) at the project level"
210 #ifdef TARGET_LINUX_ARM
211 #ifdef TARGET_RASPBERRY_PI
212 #include "bcm_host.h"
219 #include "GLES/glext.h"
220 #include "GLES2/gl2.h"
221 #include "GLES2/gl2ext.h"
223 #define EGL_EGLEXT_PROTOTYPES
225 #include "EGL/eglext.h"
235 #define TARGET_LITTLE_ENDIAN
246 #import <OpenGLES/ES1/gl.h>
247 #import <OpenGLES/ES1/glext.h>
249 #import <OpenGLES/ES2/gl.h>
250 #import <OpenGLES/ES2/glext.h>
253 #define TARGET_LITTLE_ENDIAN
255 #if defined(__OBJC__) && !__has_feature(objc_arc)
256 #error "Please enable ARC (Automatic Reference Counting) at the project level"
265 #define GL_GLEXT_PROTOTYPES
266 #include <GLES/glext.h>
268 #include <GLES2/gl2.h>
269 #include <GLES2/gl2ext.h>
271 #define TARGET_LITTLE_ENDIAN
274#ifdef TARGET_EMSCRIPTEN
275 #define GL_GLEXT_PROTOTYPES
277 #include <GLES/glext.h>
278 #include <GLES2/gl2.h>
279 #include <GLES2/gl2ext.h>
280 #include <GLES3/gl3.h>
284 #include "EGL/eglext.h"
286 #define TARGET_LITTLE_ENDIAN
289#include "tesselator.h"
294#define OF_EXIT_APP(val) std::exit(val);
300#if !defined(OF_VIDEO_CAPTURE_GSTREAMER) && !defined(OF_VIDEO_CAPTURE_QUICKTIME) && !defined(OF_VIDEO_CAPTURE_DIRECTSHOW) && !defined(OF_VIDEO_CAPTURE_ANDROID) && !defined(OF_VIDEO_CAPTURE_IOS)
303 #define OF_VIDEO_CAPTURE_GSTREAMER
305 #elif defined(TARGET_OSX)
307 #ifndef MAC_OS_X_VERSION_10_7
308 #define OF_VIDEO_CAPTURE_QUICKTIME
310 #elif !defined(MAC_OS_X_VERSION_10_12) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12
311 #define OF_VIDEO_CAPTURE_QTKIT
313 #define OF_VIDEO_CAPTURE_AVF
316 #elif defined (TARGET_WIN32)
323 #define OF_SWITCH_TO_DSHOW_FOR_WIN_VIDCAP
325 #ifdef OF_SWITCH_TO_DSHOW_FOR_WIN_VIDCAP
326 #define OF_VIDEO_CAPTURE_DIRECTSHOW
328 #define OF_VIDEO_CAPTURE_QUICKTIME
331 #elif defined(TARGET_ANDROID)
333 #define OF_VIDEO_CAPTURE_ANDROID
335 #elif defined(TARGET_EMSCRIPTEN)
337 #define OF_VIDEO_CAPTURE_EMSCRIPTEN
339 #elif defined(TARGET_OF_IOS)
341 #define OF_VIDEO_CAPTURE_IOS
348#if !defined(OF_VIDEO_PLAYER_GSTREAMER) && !defined(OF_VIDEO_PLAYER_IOS) && !defined(OF_VIDEO_PLAYER_DIRECTSHOW) && !defined(OF_VIDEO_PLAYER_MEDIA_FOUNDATION) && !defined(OF_VIDEO_PLAYER_QUICKTIME) && !defined(OF_VIDEO_PLAYER_AVFOUNDATION) && !defined(OF_VIDEO_PLAYER_EMSCRIPTEN)
350 #define OF_VIDEO_PLAYER_GSTREAMER
351 #elif defined(TARGET_ANDROID)
352 #define OF_VIDEO_PLAYER_ANDROID
353 #elif defined(TARGET_OF_IOS)
354 #define OF_VIDEO_PLAYER_IOS
355 #elif defined(TARGET_WIN32)
357 #define OF_VIDEO_PLAYER_MEDIA_FOUNDATION
359 #define OF_VIDEO_PLAYER_DIRECTSHOW
361 #elif defined(TARGET_OSX)
363 #ifndef MAC_OS_X_VERSION_10_7
364 #define OF_VIDEO_PLAYER_QUICKTIME
365 #elif !defined(MAC_OS_X_VERSION_10_8)
366 #define OF_VIDEO_PLAYER_QTKIT
368 #define OF_VIDEO_PLAYER_AVFOUNDATION
370 #elif defined(TARGET_EMSCRIPTEN)
371 #define OF_VIDEO_PLAYER_EMSCRIPTEN
373 #define OF_VIDEO_PLAYER_QUICKTIME
379#if !defined(OF_SOUNDSTREAM_RTAUDIO) && !defined(OF_SOUNDSTREAM_ANDROID) && !defined(OF_SOUNDSTREAM_IOS) && !defined(OF_SOUNDSTREAM_EMSCRIPTEN)
380 #if defined(TARGET_LINUX) || defined(TARGET_WIN32) || defined(TARGET_OSX)
381 #define OF_SOUNDSTREAM_RTAUDIO
382 #elif defined(TARGET_ANDROID)
383 #define OF_SOUNDSTREAM_ANDROID
384 #elif defined(TARGET_OF_IOS)
385 #define OF_SOUNDSTREAM_IOS
386 #elif defined(TARGET_EMSCRIPTEN)
387 #define OF_SOUNDSTREAM_EMSCRIPTEN
395 #if defined(TARGET_OF_IOS) || defined(TARGET_OSX)
396 #define OF_SOUND_PLAYER_AV_ENGINE
397 #elif defined(TARGET_WIN32)
398 #define OF_SOUND_PLAYER_MEDIA_FOUNDATION
404#if !defined(TARGET_NO_SOUND)
405#if !defined(OF_SOUND_PLAYER_QUICKTIME) && !defined(OF_SOUND_PLAYER_FMOD) && !defined(OF_SOUND_PLAYER_OPENAL) && !defined(OF_SOUND_PLAYER_EMSCRIPTEN) && !defined(OF_SOUND_PLAYER_AV_ENGINE) && !defined(OF_SOUND_PLAYER_MEDIA_FOUNDATION)
407 #define OF_SOUND_PLAYER_IPHONE
408 #elif defined(TARGET_LINUX) || defined(TARGET_MINGW)
409 #define OF_SOUND_PLAYER_OPENAL
410 #elif defined(TARGET_EMSCRIPTEN)
411 #define OF_SOUND_PLAYER_EMSCRIPTEN
412 #elif !defined(TARGET_ANDROID) && (!defined(USE_FMOD) || USE_FMOD)
413 #define OF_SOUND_PLAYER_FMOD
421#if __cplusplus>=201103 || _MSC_VER >= 1700
429 #if defined(__clang__) && __clang__
430 #if __has_feature(cxx_thread_local) && !defined(__MINGW64__) && !defined(__MINGW32__) && !defined(__ANDROID__) && !defined(TARGET_OF_IOS)
433 #elif !defined(TARGET_WIN32) || _MSC_VER
440#if !defined(NO_OF_MAKE_UNIQUE) && (defined(_MSC_VER) && _MSC_VER < 1800) || (!defined(_MSC_VER) && __cplusplus <= 201103L)
447template <
typename T,
typename... Args>
449 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
452template <
typename T,
typename... Args>
454 static_assert(std::extent<T>::value == 0,
455 "make_unique<T[N]>() is forbidden, please use make_unique<T[]>().");
457 typedef typename std::remove_extent<T>::type U;
458 return std::unique_ptr<T>(
new U[
sizeof...(Args)]{std::forward<Args>(args)...});
461template <
typename T,
typename... Args>
463 return make_unique_helper<T>(std::is_array<T>(), std::forward<Args>(args)...);
473#if __cplusplus >= 201500
474 #define OF_HAS_CPP17 1
475 #if __cplusplus < 201703L
476 #define OF_USE_EXPERIMENTAL_FS 1
479 #define OF_HAS_CPP17 0
483#ifndef OF_USING_STD_FS
485 #define OF_USING_STD_FS 1
488 #define OF_USING_STD_FS 0
495#if OF_USING_STD_FS && !defined(OF_USE_EXPERIMENTAL_FS)
496 #if defined(__cpp_lib_filesystem)
497 #define OF_USE_EXPERIMENTAL_FS 0
498 #elif defined(__cpp_lib_experimental_filesystem)
499 #define OF_USE_EXPERIMENTAL_FS 1
500 #elif !defined(__has_include)
501 #define OF_USE_EXPERIMENTAL_FS 1
502 #elif __has_include(<filesystem>)
507 #if __has_include(<yvals_core.h>)
508 #include <yvals_core.h>
511 #if defined(_HAS_CXX17) && _HAS_CXX17
513 #define OF_USE_EXPERIMENTAL_FS 0
518 #ifndef INCLUDE_STD_FILESYSTEM_EXPERIMENTAL
519 #define OF_USE_EXPERIMENTAL_FS 1
524 #define OF_USE_EXPERIMENTAL_FS 0
527 #define OF_USE_EXPERIMENTAL_FS 0
532 #if OF_USE_EXPERIMENTAL_FS
534 #include <experimental/filesystem>
538 namespace experimental{
539 namespace filesystem {
540 using path = v1::path;
546 namespace experimental{
547 namespace filesystem {
548 using path = v1::__cxx11::path;
555 namespace filesystem = std::experimental::filesystem;
558 #include <filesystem>
562 namespace filesystem = std::filesystem;
566 namespace filesystem = std::filesystem;
573 #define BOOST_NO_CXX11_SCOPED_ENUMS
574 #define BOOST_NO_SCOPED_ENUMS
577 #include <boost/filesystem.hpp>
579 namespace filesystem = boost::filesystem;
Definition ofEvents.cpp:625
Definition ofPixels.h:1522
std::unique_ptr< T > make_unique(Args &&... args)
Definition ofConstants.h:462
std::unique_ptr< T > make_unique_helper(std::false_type, Args &&... args)
Definition ofConstants.h:448
ofTargetPlatform
This enumerates the targeted operating systems or platforms.
Definition ofConstants.h:31
@ OF_TARGET_IOS
32- and 64-bit armv7, arm64, x86 (simulator) architecture Mac iOS.
Definition ofConstants.h:39
@ OF_TARGET_WINVS
32- and 64-bit x86 architecture using Visual Studio on Windows OS.
Definition ofConstants.h:37
@ OF_TARGET_OSX
32- and 64-bit x86 architecture on Mac OSX.
Definition ofConstants.h:33
@ OF_TARGET_LINUXAARCH64
Definition ofConstants.h:53
@ OF_TARGET_MINGW
32- and 64-bit x86 architecture using MinGW on Windows OS.
Definition ofConstants.h:35
@ OF_TARGET_EMSCRIPTEN
Compiled to javascript using Emscripten.
Definition ofConstants.h:52
@ OF_TARGET_ANDROID
32- and 64-bit armeabi-v7a and x86 Android OS.
Definition ofConstants.h:41
@ OF_TARGET_LINUXARMV6L
32-bit armv6 little endian architecture on Linux OS.
Definition ofConstants.h:47
@ OF_TARGET_LINUX64
64-bit x86 architecture on Linux OS.
Definition ofConstants.h:45
@ OF_TARGET_LINUXARMV7L
32-bit armv7 little endian architecture on Linux OS.
Definition ofConstants.h:49
@ OF_TARGET_LINUX
32-bit x86 architecture on Linux OS.
Definition ofConstants.h:43
TESSindex ofIndexType
Definition ofConstants.h:290