@ -113,36 +113,36 @@
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "raylib.h" // Declares module functions
# include "raylib.h" // Declares module functions
/ / Check if config flags have been externally provided on compilation line
# if !defined(EXTERNAL_CONFIG_FLAGS)
# include "config.h" // Defines module configuration flags
# include "config.h" // Defines module configuration flags
# else
# define RAYLIB_VERSION "3.0"
# endif
# include "utils.h" // Required for: TRACELOG macros
# include "utils.h" // Required for: TRACELOG macros
# if (defined(__linux__) || defined(PLATFORM_WEB)) && _POSIX_C_SOURCE < 199309L
# undef _POSIX_C_SOURCE
# define _POSIX_C_SOURCE 199309L / / Required for CLOCK_MONOTONIC if compiled with c99 without gnu ext.
# endif
# define RAYMATH_IMPLEMENTATION / / Define external out-of-line implementation of raymath here
# include "raymath.h" // Required for: Vector3 and Matrix functions
# define RAYMATH_IMPLEMENTATION / / Define external out-of-line implementation of raymath here
# include "raymath.h" // Required for: Vector3 and Matrix functions
# define RLGL_IMPLEMENTATION
# include "rlgl.h" // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3+ or ES2
# include "rlgl.h" // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3+ or ES2
# if defined(SUPPORT_GESTURES_SYSTEM)
# define GESTURES_IMPLEMENTATION
# include "gestures.h" // Gestures detection functionality
# include "gestures.h" // Gestures detection functionality
# endif
# if defined(SUPPORT_CAMERA_SYSTEM)
# define CAMERA_IMPLEMENTATION
# include "camera.h" // Camera system functionality
# include "camera.h" // Camera system functionality
# endif
# if defined(SUPPORT_GIF_RECORDING)
@ -150,20 +150,16 @@
# define RGIF_FREE RL_FREE
# define RGIF_IMPLEMENTATION
# include "external/rgif.h" // Support GIF recording
# include "external/rgif.h" // Support GIF recording
# endif
# if defined(__APPLE__)
# define SUPPORT_HIGH_DPI / / Force HighDPI support on macOS
# endif
# include <stdlib.h> // Required for: srand(), rand(), atexit()
# include <stdio.h> // Required for: sprintf() [Used in OpenURL()]
# include <string.h> // Required for: strrchr(), strcmp(), strlen()
# include <time.h> // Required for: time() [Used in InitTimer()]
# include <math.h> // Required for: tan() [Used in BeginMode3D()]
# include <stdlib.h> // Required for: srand(), rand(), atexit()
# include <stdio.h> // Required for: sprintf() [Used in OpenURL()]
# include <string.h> // Required for: strrchr(), strcmp(), strlen()
# include <time.h> // Required for: time() [Used in InitTimer()]
# include <math.h> // Required for: tan() [Used in BeginMode3D()]
# include <sys/stat.h> // Required for: stat() [Used in GetFileModTime()]
# include <sys/stat.h> // Required for: stat() [Used in GetFileModTime()]
# if (defined(PLATFORM_DESKTOP) || defined(PLATFORM_UWP)) && defined(_WIN32) && (defined(_MSC_VER) || defined(__TINYC__))
# define DIRENT_MALLOC RL_MALLOC
@ -203,65 +199,59 @@
# endif
# elif defined(__linux__)
# include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
# include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
/ / # define GLFW_EXPOSE_NATIVE_X11 / / WARNING : Exposing Xlib . h > X . h results in dup symbols for Font type
/ / # define GLFW_EXPOSE_NATIVE_X11 / / WARNING : Exposing Xlib . h > X . h results in dup symbols for Font type
/ / # define GLFW_EXPOSE_NATIVE_WAYLAND
/ / # define GLFW_EXPOSE_NATIVE_MIR
# include <GLFW/glfw3native.h> // Required for: glfwGetX11Window()
# include <GLFW/glfw3native.h> // Required for: glfwGetX11Window()
# elif defined(__APPLE__)
# include <unistd.h> // Required for: usleep()
# include <unistd.h> // Required for: usleep()
/ / # define GLFW_EXPOSE_NATIVE_COCOA / / WARNING : Fails due to type redefinition
# include <GLFW/glfw3native.h> // Required for: glfwGetCocoaWindow()
/ / # define GLFW_EXPOSE_NATIVE_COCOA / / WARNING : Fails due to type redefinition
# include <GLFW/glfw3native.h> // Required for: glfwGetCocoaWindow()
# endif
# endif
# if defined(__linux__)
# define MAX_FILEPATH_LENGTH 4096 / / Use Linux PATH_MAX value
# else
# define MAX_FILEPATH_LENGTH 512 / / Use common value
# endif
# if defined(PLATFORM_ANDROID)
/ / # include < android / sensor . h > / / Android sensors functions ( accelerometer , gyroscope , light . . . )
# include <android/window.h> // Defines AWINDOW_FLAG_FULLSCREEN and others
# include <android_native_app_glue.h> // Defines basic app state struct and manages activity
# include <EGL/egl.h> // Khronos EGL library - Native platform display device control functions
# include <GLES2/gl2.h> // Khronos OpenGL ES 2.0 library
# include <EGL/egl.h> // EGL library - Native platform display device control functions
# include <GLES2/gl2.h> // OpenGL ES 2.0 library
# endif
# if defined(PLATFORM_RPI)
# include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl()
# include <unistd.h> // POSIX standard function definitions - read(), close(), STDIN_FILENO
# include <termios.h> // POSIX terminal control definitions - tcgetattr(), tcsetattr()
# include <pthread.h> // POSIX threads management (inputs reading)
# include <dirent.h> // POSIX directory browsing
# include <sys/ioctl.h> // UNIX System call for device-specific input/output operations - ioctl()
# include <linux/kd.h> // Linux: KDSKBMODE, K_MEDIUMRAM constants definition
# include <linux/input.h> // Linux: Keycodes constants definition (KEY_A, ...)
# include <linux/joystick.h> // Linux: Joystick support library
# include "bcm_host.h" // Raspberry Pi VideoCore IV access functions
# include "EGL/egl.h" // Khronos EGL library - Native platform display device control functions
# include "EGL/eglext.h" // Khronos EGL library - Extensions
# include "GLES2/gl2.h" // Khronos OpenGL ES 2.0 library
# include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl()
# include <unistd.h> // POSIX standard function definitions - read(), close(), STDIN_FILENO
# include <termios.h> // POSIX terminal control definitions - tcgetattr(), tcsetattr()
# include <pthread.h> // POSIX threads management (inputs reading)
# include <dirent.h> // POSIX directory browsing
# include <sys/ioctl.h> // UNIX System call for device-specific input/output operations - ioctl()
# include <linux/kd.h> // Linux: KDSKBMODE, K_MEDIUMRAM constants definition
# include <linux/input.h> // Linux: Keycodes constants definition (KEY_A, ...)
# include <linux/joystick.h> // Linux: Joystick support library
# include "bcm_host.h" // Raspberry Pi VideoCore IV access functions
# include "EGL/egl.h" // EGL library - Native platform display device control functions
# include "EGL/eglext.h" // EGL library - Extensions
# include "GLES2/gl2.h" // OpenGL ES 2.0 library
# endif
# if defined(PLATFORM_UWP)
# include "EGL/egl.h" // Khronos EGL library - Native platform display device control functions
# include "EGL/eglext.h" // Khronos EGL library - Extensions
# include "GLES2/gl2.h" // Khronos OpenGL ES 2.0 library
# include "uwp_events.h" // UWP bootstrapping functions
# include "EGL/egl.h" // EGL library - Native platform display device control functions
# include "EGL/eglext.h" // EGL library - Extensions
# include "GLES2/gl2.h" // OpenGL ES 2.0 library
# include "uwp_events.h" // UWP bootstrapping functions
# endif
# if defined(PLATFORM_WEB)
# define GLFW_INCLUDE_ES2 / / GLFW3: Enable OpenGL ES 2.0 (translated to WebGL)
# include <GLFW/glfw3.h> // GLFW3 library: Windows, OpenGL context and Input management
# include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
# define GLFW_INCLUDE_ES2 / / GLFW3: Enable OpenGL ES 2.0 (translated to WebGL)
# include <GLFW/glfw3.h> // GLFW3 library: Windows, OpenGL context and Input management
# include <sys/time.h> // Required for: timespec, nanosleep(), select() - POSIX
# include <emscripten/emscripten.h> // Emscripten library - LLVM to JavaScript compiler
# include <emscripten/html5.h> // Emscripten HTML5 library
@ -288,18 +278,36 @@
/ / # define DEFAULT_KEYBOARD_DEV " /dev/input/eventN "
/ / # define DEFAULT_MOUSE_DEV " /dev/input/eventN "
/ / # define DEFAULT_GAMEPAD_DEV " /dev/input/eventN "
# define MOUSE_SENSITIVITY 0.8f
# endif
# define MAX_GAMEPADS 4 / / Max number of gamepads supported
# define MAX_GAMEPAD_AXIS 8 / / Max number of axis supported (per gamepad)
# define MAX_GAMEPAD_BUTTONS 32 / / Max bumber of buttons supported (per gamepad)
# ifndef MAX_FILEPATH_LENGTH
# if defined(__linux__)
# define MAX_FILEPATH_LENGTH 4096 / / Maximum length for filepaths (Linux PATH_MAX default value)
# else
# define MAX_FILEPATH_LENGTH 512 / / Maximum length supported for filepaths
# endif
# endif
# define MAX_CHARS_QUEUE 16 / / Max number of characters in the input queue
# ifndef MAX_GAMEPADS
# define MAX_GAMEPADS 4 / / Max number of gamepads supported
# endif
# ifndef MAX_GAMEPAD_AXIS
# define MAX_GAMEPAD_AXIS 8 / / Max number of axis supported (per gamepad)
# endif
# ifndef MAX_GAMEPAD_BUTTONS
# define MAX_GAMEPAD_BUTTONS 32 / / Max bumber of buttons supported (per gamepad)
# endif
# ifndef MAX_TOUCH_POINTS
# define MAX_TOUCH_POINTS 10 / / Maximum number of touch points supported
# endif
# ifndef MAX_KEY_PRESSED_QUEUE
# define MAX_KEY_PRESSED_QUEUE 16 / / Max number of characters in the key input queue
# endif
# if defined(SUPPORT_DATA_STORAGE)
# define STORAGE_DATA_FILE "storage.data"
# ifndef STORAGE_DATA_FILE
# define STORAGE_DATA_FILE "storage.data" / / Automatic storage filename
# endif
# endif
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -390,7 +398,7 @@ typedef struct CoreData {
char currentKeyState [ 512 ] ; / / Registers current frame key state
char previousKeyState [ 512 ] ; / / Registers previous frame key state
int keyPressedQueue [ MAX_CHARS _QUEUE ] ; / / Input characters queue
int keyPressedQueue [ MAX_KEY_PRESSED _QUEUE ] ; / / Input characters queue
int keyPressedQueueCount ; / / Input characters queue count
# if defined(PLATFORM_RPI)
int defaultMode ; / / Default keyboard mode
@ -1400,7 +1408,7 @@ void BeginMode3D(Camera3D camera)
double top = 0.01 * tan ( camera . fovy * 0.5 * DEG2RAD ) ;
double right = top * aspect ;
rlFrustum ( - right , right , - top , top , RL_NEAR_ CULL_DISTANCE , RL_FAR_ CULL_DISTANCE ) ;
rlFrustum ( - right , right , - top , top , RL_CULL_DISTANCE_NEAR , RL_CULL_DISTANCE_FAR ) ;
}
else if ( camera . type = = CAMERA_ORTHOGRAPHIC )
{
@ -1408,7 +1416,7 @@ void BeginMode3D(Camera3D camera)
double top = camera . fovy / 2.0 ;
double right = top * aspect ;
rlOrtho ( - right , right , - top , top , RL_NEAR_ CULL_DISTANCE , RL_FAR_ CULL_DISTANCE ) ;
rlOrtho ( - right , right , - top , top , RL_CULL_DISTANCE_NEAR , RL_CULL_DISTANCE_FAR ) ;
}
/ / NOTE : zNear and zFar values are important when computing depth buffer values
@ -1521,7 +1529,7 @@ Ray GetMouseRay(Vector2 mouse, Camera camera)
if ( camera . type = = CAMERA_PERSPECTIVE )
{
/ / Calculate projection matrix from perspective
matProj = MatrixPerspective ( camera . fovy * DEG2RAD , ( ( double ) GetScreenWidth ( ) / ( double ) GetScreenHeight ( ) ) , RL_NEAR_ CULL_DISTANCE , RL_FAR_ CULL_DISTANCE ) ;
matProj = MatrixPerspective ( camera . fovy * DEG2RAD , ( ( double ) GetScreenWidth ( ) / ( double ) GetScreenHeight ( ) ) , RL_CULL_DISTANCE_NEAR , RL_CULL_DISTANCE_FAR ) ;
}
else if ( camera . type = = CAMERA_ORTHOGRAPHIC )
{
@ -1605,7 +1613,7 @@ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int heigh
if ( camera . type = = CAMERA_PERSPECTIVE )
{
/ / Calculate projection matrix from perspective
matProj = MatrixPerspective ( camera . fovy * DEG2RAD , ( ( double ) width / ( double ) height ) , RL_NEAR_ CULL_DISTANCE , RL_FAR_ CULL_DISTANCE ) ;
matProj = MatrixPerspective ( camera . fovy * DEG2RAD , ( ( double ) width / ( double ) height ) , RL_CULL_DISTANCE_NEAR , RL_CULL_DISTANCE_FAR ) ;
}
else if ( camera . type = = CAMERA_ORTHOGRAPHIC )
{
@ -1614,7 +1622,7 @@ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int heigh
double right = top * aspect ;
/ / Calculate projection matrix from orthographic
matProj = MatrixOrtho ( - right , right , - top , top , RL_NEAR_ CULL_DISTANCE , RL_FAR_ CULL_DISTANCE ) ;
matProj = MatrixOrtho ( - right , right , - top , top , RL_CULL_DISTANCE_NEAR , RL_CULL_DISTANCE_FAR ) ;
}
/ / Calculate view matrix from camera look at ( and transpose it )
@ -3989,7 +3997,7 @@ static void CharCallback(GLFWwindow *window, unsigned int key)
/ / Ref : https : / / www . glfw . org / docs / latest / input_guide . html # input_char
/ / Check if there is space available in the queue
if ( CORE . Input . Keyboard . keyPressedQueueCount < MAX_CHARS _QUEUE )
if ( CORE . Input . Keyboard . keyPressedQueueCount < MAX_KEY_PRESSED _QUEUE )
{
/ / Add character to the queue
CORE . Input . Keyboard . keyPressedQueue [ CORE . Input . Keyboard . keyPressedQueueCount ] = key ;
@ -5261,7 +5269,7 @@ void UWPKeyDownEvent(int key, bool down, bool controlKey)
void UWPKeyCharEvent ( int key )
{
if ( CORE . Input . Keyboard . keyPressedQueueCount < MAX_CHARS _QUEUE )
if ( CORE . Input . Keyboard . keyPressedQueueCount < MAX_KEY_PRESSED _QUEUE )
{
/ / Add character to the queue
CORE . Input . Keyboard . keyPressedQueue [ CORE . Input . Keyboard . keyPressedQueueCount ] = key ;