diff --git a/BINDINGS.md b/BINDINGS.md
index 9ec8c3c3c7d5..22b740588dd5 100644
--- a/BINDINGS.md
+++ b/BINDINGS.md
@@ -13,7 +13,6 @@ Some people ported raylib to other languages in the form of bindings or wrappers
| [Raylib-CsLo](https://github.com/NotNotTech/Raylib-CsLo) | 4.2 | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | MPL-2.0 |
| [Raylib-CSharp-Vinculum](https://github.com/ZeroElectric/Raylib-CSharp-Vinculum) | **5.0** | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | MPL-2.0 |
| [Raylib-CSharp](https://github.com/MrScautHD/Raylib-CSharp) | **5.1-dev** | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | MIT |
-| [Raylib.NET](https://github.com/Odex64/Raylib.NET) | **5.0** | [C#](https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) | MIT |
| [cl-raylib](https://github.com/longlene/cl-raylib) | 4.0 | [Common Lisp](https://common-lisp.net) | MIT |
| [claylib/wrap](https://github.com/defun-games/claylib) | 4.5 | [Common Lisp](https://common-lisp.net) | Zlib |
| [claw-raylib](https://github.com/bohonghuang/claw-raylib) | **auto** | [Common Lisp](https://common-lisp.net) | Apache-2.0 |
@@ -37,7 +36,7 @@ Some people ported raylib to other languages in the form of bindings or wrappers
| [jaylib](https://github.com/janet-lang/jaylib) | **5.0** | [Janet](https://janet-lang.org) | MIT |
| [jaylib](https://github.com/electronstudio/jaylib/) | 4.5 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | GPLv3+CE |
| [raylib-j](https://github.com/CreedVI/Raylib-J) | 4.0 | [Java](https://en.wikipedia.org/wiki/Java_(programming_language)) | Zlib |
-| [raylib.jl](https://github.com/irishgreencitrus/raylib.jl) | 4.2 | [Julia](https://julialang.org) | Zlib |
+| [Raylib.jl](https://github.com/chengchingwen/Raylib.jl) | 4.2 | [Julia](https://julialang.org) | Zlib |
| [kaylib](https://github.com/electronstudio/kaylib) | 3.7 | [Kotlin/native](https://kotlinlang.org) | **???** |
| [KaylibKit](https://codeberg.org/Kenta/KaylibKit) | 4.5 | [Kotlin/native](https://kotlinlang.org) | Zlib |
| [raylib-lua](https://github.com/TSnake41/raylib-lua) | 4.5 | [Lua](http://www.lua.org) | ISC |
diff --git a/CMakeOptions.txt b/CMakeOptions.txt
index 2c58cd5cc227..b063f02a1516 100644
--- a/CMakeOptions.txt
+++ b/CMakeOptions.txt
@@ -1,4 +1,4 @@
-### Config options ###
+# ## Config options ###
include(CMakeDependentOption)
include(EnumOption)
@@ -9,14 +9,14 @@ enum_option(OPENGL_VERSION "OFF;4.3;3.3;2.1;1.1;ES 2.0;ES 3.0" "Force a specific
# Configuration options
option(BUILD_EXAMPLES "Build the examples." ${RAYLIB_IS_MAIN})
option(CUSTOMIZE_BUILD "Show options for customizing your Raylib library build." OFF)
-option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
+option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF)
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended to run with ASAN)" OFF)
# Shared library is always PIC. Static library should be PIC too if linked into a shared library
option(WITH_PIC "Compile static library as position-independent code" OFF)
option(BUILD_SHARED_LIBS "Build raylib as a shared library" OFF)
-option(MACOS_FATLIB "Build fat library for both i386 and x86_64 on macOS" OFF)
+option(MACOS_FATLIB "Build fat library for both i386 and x86_64 on macOS" OFF)
cmake_dependent_option(USE_AUDIO "Build raylib with audio module" ON CUSTOMIZE_BUILD ON)
enum_option(USE_EXTERNAL_GLFW "OFF;IF_POSSIBLE;ON" "Link raylib against system GLFW instead of embedded one")
@@ -28,77 +28,9 @@ option(GLFW_BUILD_X11 "Build the bundled GLFW with X11 support" ON)
option(INCLUDE_EVERYTHING "Include everything disabled by default (for CI usage" OFF)
set(OFF ${INCLUDE_EVERYTHING} CACHE INTERNAL "Replace any OFF by default with \${OFF} to have it covered by this option")
-# raylib modules included
-cmake_dependent_option(SUPPORT_MODULE_RSHAPES "Include module: rshapes" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_MODULE_RTEXTURES "Include module: rtextures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_MODULE_RTEXT "Include module: rtext" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_MODULE_RMODELS "Include module: rmodels" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_MODULE_RAUDIO "Include module: raudio" ON CUSTOMIZE_BUILD ON)
+include(ParseConfigHeader)
-# rcore.c
-cmake_dependent_option(SUPPORT_CAMERA_SYSTEM "Provide camera module (rcamera.h) with multiple predefined cameras: free, 1st/3rd person, orbital" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_GESTURES_SYSTEM "Gestures module is included (rgestures.h) to support gestures detection: tap, hold, swipe, drag" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_RPRAND_GENERATOR "Include pseudo-random numbers generator (rprand.h), based on Xoshiro128** and SplitMix64" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_MOUSE_GESTURES "Mouse gestures are directly mapped like touches and processed by gestures system" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_SSH_KEYBOARD_RPI "Reconfigure standard input to receive key inputs, works with SSH connection" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_DEFAULT_FONT "Default font is loaded on window initialization to be available for the user to render simple text. If enabled, uses external module functions to load default raylib font (module: text)" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_SCREEN_CAPTURE "Allow automatic screen capture of current screen pressing F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_GIF_RECORDING "Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback()" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_BUSY_WAIT_LOOP "Use busy wait loop for timing sync instead of a high-resolution timer" OFF CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_EVENTS_WAITING "Wait for events passively (sleeping while no events) instead of polling them actively every frame" OFF CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_WINMM_HIGHRES_TIMER "Setting a higher resolution can improve the accuracy of time-out intervals in wait functions" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_COMPRESSION_API "Support for compression API" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_EVENTS_AUTOMATION "Support automatic generated events, loading and recording of those events when required" OFF CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_CUSTOM_FRAME_CONTROL "Enabling this flag allows manual control of the frame processes, use at your own risk" OFF CUSTOMIZE_BUILD OFF)
-
-# rshapes.c
-cmake_dependent_option(SUPPORT_QUADS_DRAW_MODE "Use QUADS instead of TRIANGLES for drawing when possible. Some lines-based shapes could still use lines" ON CUSTOMIZE_BUILD ON)
-
-# rtextures.c
-cmake_dependent_option(SUPPORT_IMAGE_EXPORT "Support image exporting to file" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_IMAGE_GENERATION "Support procedural image generation functionality (gradient, spot, perlin-noise, cellular)" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_IMAGE_MANIPULATION "Support multiple image editing functions to scale, adjust colors, flip, draw on images, crop... If not defined only three image editing functions supported: ImageFormat(), ImageAlphaMask(), ImageToPOT()" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PNG "Support loading PNG as textures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_DDS "Support loading DDS as textures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_HDR "Support loading HDR as textures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PIC "Support loading PIC as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PNM "Support loading PNM as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_KTX "Support loading KTX as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_ASTC "Support loading ASTC as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_BMP "Support loading BMP as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_TGA "Support loading TGA as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_JPG "Support loading JPG as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_GIF "Support loading GIF as textures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_QOI "Support loading QOI as textures" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PSD "Support loading PSD as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PKM "Support loading PKM as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_PVR "Support loading PVR as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-cmake_dependent_option(SUPPORT_FILEFORMAT_SVG "Support loading SVG as textures" ${OFF} CUSTOMIZE_BUILD OFF)
-
-# rtext.c
-cmake_dependent_option(SUPPORT_FILEFORMAT_FNT "Support loading fonts in FNT format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_TTF "Support loading font in TTF/OTF format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_TEXT_MANIPULATION "Support text manipulation functions" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FONT_ATLAS_WHITE_REC "Support white rec on font atlas bottom-right corner" ON CUSTOMIZE_BUILD ON)
-
-# rmodels.c
-cmake_dependent_option(SUPPORT_MESH_GENERATION "Support procedural mesh generation functions, uses external par_shapes.h library. NOTE: Some generated meshes DO NOT include generated texture coordinates" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_OBJ "Support loading OBJ file format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_MTL "Support loading MTL file format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_IQM "Support loading IQM file format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_GLTF "Support loading GLTF file format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_VOX "Support loading VOX file format" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_M3D "Support loading M3D file format" ON CUSTOMIZE_BUILD ON)
-
-# raudio.c
-cmake_dependent_option(SUPPORT_FILEFORMAT_WAV "Support loading WAV for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_OGG "Support loading OGG for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_XM "Support loading XM for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_MOD "Support loading MOD for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_MP3 "Support loading MP3 for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_QOA "Support loading QOA for sound" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_FILEFORMAT_FLAC "Support loading FLAC for sound" ${OFF} CUSTOMIZE_BUILD OFF)
-
-# utils.c
-cmake_dependent_option(SUPPORT_STANDARD_FILEIO "Support standard file io library (stdio.h)" ON CUSTOMIZE_BUILD ON)
-cmake_dependent_option(SUPPORT_TRACELOG "Show TraceLog() output messages. NOTE: By default LOG_DEBUG traces not shown" ON CUSTOMIZE_BUILD ON)
+foreach(FLAG IN LISTS CONFIG_HEADER_FLAGS)
+ string(REGEX MATCH "([^=]+)=(.+)" _ ${FLAG})
+ cmake_dependent_option(${CMAKE_MATCH_1} "" ${CMAKE_MATCH_2} CUSTOMIZE_BUILD ${CMAKE_MATCH_2})
+endforeach()
diff --git a/cmake/CompileDefinitions.cmake b/cmake/CompileDefinitions.cmake
index cc8324c4be68..0acbe2fa5b96 100644
--- a/cmake/CompileDefinitions.cmake
+++ b/cmake/CompileDefinitions.cmake
@@ -3,126 +3,22 @@ target_compile_definitions("raylib" PUBLIC "${PLATFORM_CPP}")
target_compile_definitions("raylib" PUBLIC "${GRAPHICS}")
function(define_if target variable)
- if (${${variable}})
+ if(${${variable}})
message(STATUS "${variable}=${${variable}}")
- target_compile_definitions(${target} PUBLIC "${variable}")
- endif ()
+ target_compile_definitions(${target} PRIVATE "${variable}")
+ endif()
endfunction()
-if (${CUSTOMIZE_BUILD})
- target_compile_definitions("raylib" PUBLIC EXTERNAL_CONFIG_FLAGS)
+if(${CUSTOMIZE_BUILD})
+ target_compile_definitions("raylib" PRIVATE EXTERNAL_CONFIG_FLAGS)
define_if("raylib" USE_AUDIO)
- define_if("raylib" SUPPORT_MODULE_RSHAPES)
- define_if("raylib" SUPPORT_MODULE_RTEXTURES)
- define_if("raylib" SUPPORT_MODULE_RTEXT)
- define_if("raylib" SUPPORT_MODULE_RMODELS)
- define_if("raylib" SUPPORT_MODULE_RAUDIO)
- define_if("raylib" SUPPORT_CAMERA_SYSTEM)
- define_if("raylib" SUPPORT_GESTURES_SYSTEM)
- define_if("raylib" SUPPORT_MOUSE_GESTURES)
- define_if("raylib" SUPPORT_SSH_KEYBOARD_RPI)
- define_if("raylib" SUPPORT_DEFAULT_FONT)
- define_if("raylib" SUPPORT_SCREEN_CAPTURE)
- define_if("raylib" SUPPORT_GIF_RECORDING)
- define_if("raylib" SUPPORT_BUSY_WAIT_LOOP)
- define_if("raylib" SUPPORT_EVENTS_WAITING)
- define_if("raylib" SUPPORT_WINMM_HIGHRES_TIMER)
- define_if("raylib" SUPPORT_COMPRESSION_API)
- define_if("raylib" SUPPORT_EVENTS_AUTOMATION)
- define_if("raylib" SUPPORT_CUSTOM_FRAME_CONTROL)
- define_if("raylib" SUPPORT_QUADS_DRAW_MODE)
- define_if("raylib" SUPPORT_IMAGE_EXPORT)
- define_if("raylib" SUPPORT_IMAGE_GENERATION)
- define_if("raylib" SUPPORT_IMAGE_MANIPULATION)
- define_if("raylib" SUPPORT_FILEFORMAT_PNG)
- define_if("raylib" SUPPORT_FILEFORMAT_DDS)
- define_if("raylib" SUPPORT_FILEFORMAT_HDR)
- define_if("raylib" SUPPORT_FILEFORMAT_PIC)
- define_if("raylib" SUPPORT_FILEFORMAT_PNM)
- define_if("raylib" SUPPORT_FILEFORMAT_KTX)
- define_if("raylib" SUPPORT_FILEFORMAT_ASTC)
- define_if("raylib" SUPPORT_FILEFORMAT_BMP)
- define_if("raylib" SUPPORT_FILEFORMAT_TGA)
- define_if("raylib" SUPPORT_FILEFORMAT_JPG)
- define_if("raylib" SUPPORT_FILEFORMAT_GIF)
- define_if("raylib" SUPPORT_FILEFORMAT_QOI)
- define_if("raylib" SUPPORT_FILEFORMAT_PSD)
- define_if("raylib" SUPPORT_FILEFORMAT_PKM)
- define_if("raylib" SUPPORT_FILEFORMAT_PVR)
- define_if("raylib" SUPPORT_FILEFORMAT_SVG)
- define_if("raylib" SUPPORT_FILEFORMAT_FNT)
- define_if("raylib" SUPPORT_FILEFORMAT_TTF)
- define_if("raylib" SUPPORT_TEXT_MANIPULATION)
- define_if("raylib" SUPPORT_MESH_GENERATION)
- define_if("raylib" SUPPORT_FILEFORMAT_OBJ)
- define_if("raylib" SUPPORT_FILEFORMAT_MTL)
- define_if("raylib" SUPPORT_FILEFORMAT_IQM)
- define_if("raylib" SUPPORT_FILEFORMAT_GLTF)
- define_if("raylib" SUPPORT_FILEFORMAT_VOX)
- define_if("raylib" SUPPORT_FILEFORMAT_M3D)
- define_if("raylib" SUPPORT_FILEFORMAT_WAV)
- define_if("raylib" SUPPORT_FILEFORMAT_OGG)
- define_if("raylib" SUPPORT_FILEFORMAT_XM)
- define_if("raylib" SUPPORT_FILEFORMAT_MOD)
- define_if("raylib" SUPPORT_FILEFORMAT_MP3)
- define_if("raylib" SUPPORT_FILEFORMAT_QOA)
- define_if("raylib" SUPPORT_FILEFORMAT_FLAC)
- define_if("raylib" SUPPORT_STANDARD_FILEIO)
- define_if("raylib" SUPPORT_TRACELOG)
- if (UNIX AND NOT APPLE)
- target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=4096")
- else ()
- target_compile_definitions("raylib" PUBLIC "MAX_FILEPATH_LENGTH=512")
- endif ()
-
- target_compile_definitions("raylib" PUBLIC "MAX_GAMEPADS=4")
- target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_AXIS=8")
- target_compile_definitions("raylib" PUBLIC "MAX_GAMEPAD_BUTTONS=32")
- target_compile_definitions("raylib" PUBLIC "MAX_TOUCH_POINTS=10")
- target_compile_definitions("raylib" PUBLIC "MAX_KEY_PRESSED_QUEUE=16")
-
- target_compile_definitions("raylib" PUBLIC "STORAGE_DATA_FILE=\"storage.data\"")
- target_compile_definitions("raylib" PUBLIC "MAX_CHAR_PRESSED_QUEUE=16")
- target_compile_definitions("raylib" PUBLIC "MAX_DECOMPRESSION_SIZE=64")
-
- if (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_33" OR ${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_11")
- target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=8192")
- elseif (${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_ES2")
- target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_BUFFER_ELEMENTS=2048")
- endif ()
-
- target_compile_definitions("raylib" PUBLIC "DEFAULT_BATCH_DRAWCALLS=256")
- target_compile_definitions("raylib" PUBLIC "MAX_MATRIX_STACK_SIZE=32")
- target_compile_definitions("raylib" PUBLIC "MAX_SHADER_LOCATIONS=32")
- target_compile_definitions("raylib" PUBLIC "MAX_MATERIAL_MAPS=12")
- target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_NEAR=0.01")
- target_compile_definitions("raylib" PUBLIC "RL_CULL_DISTANCE_FAR=1000.0")
-
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION=0")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD=1")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL=2")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR=3")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT=4")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2=5")
-
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION=\"vertexPosition\"")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD=\"vertexTexCoord\"")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL=\"vertexNormal\"")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR=\"vertexColor\"")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT=\"vertexTangent\"")
- target_compile_definitions("raylib" PUBLIC "RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2=\"vertexTexCoord2\"")
-
- target_compile_definitions("raylib" PUBLIC "MAX_TEXT_BUFFER_LENGTH=1024")
- target_compile_definitions("raylib" PUBLIC "MAX_TEXT_UNICODE_CHARS=512")
- target_compile_definitions("raylib" PUBLIC "MAX_TEXTSPLIT_COUNT=128")
-
- target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_FORMAT=ma_format_f32")
- target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_CHANNELS=2")
- target_compile_definitions("raylib" PUBLIC "AUDIO_DEVICE_SAMPLE_RATE=44100")
- target_compile_definitions("raylib" PUBLIC "DEFAULT_AUDIO_BUFFER_SIZE=4096")
-
- target_compile_definitions("raylib" PUBLIC "MAX_TRACELOG_MSG_LENGTH=128")
- target_compile_definitions("raylib" PUBLIC "MAX_UWP_MESSAGES=512")
-endif ()
+ foreach(FLAG IN LISTS CONFIG_HEADER_FLAGS)
+ string(REGEX MATCH "([^=]+)=(.+)" _ ${FLAG})
+ define_if("raylib" ${CMAKE_MATCH_1})
+ endforeach()
+ foreach(VALUE IN LISTS CONFIG_HEADER_VALUES)
+ target_compile_definitions("raylib" PRIVATE ${VALUE})
+ endforeach()
+endif()
diff --git a/cmake/LibraryConfigurations.cmake b/cmake/LibraryConfigurations.cmake
index 23a7ec2f0479..6d2250c715be 100644
--- a/cmake/LibraryConfigurations.cmake
+++ b/cmake/LibraryConfigurations.cmake
@@ -58,8 +58,9 @@ if (${PLATFORM} MATCHES "Desktop")
elseif (${PLATFORM} MATCHES "Web")
set(PLATFORM_CPP "PLATFORM_WEB")
- set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 --profiling")
+ if(NOT GRAPHICS)
+ set(GRAPHICS "GRAPHICS_API_OPENGL_ES2")
+ endif()
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
elseif (${PLATFORM} MATCHES "Android")
diff --git a/cmake/ParseConfigHeader.cmake b/cmake/ParseConfigHeader.cmake
new file mode 100644
index 000000000000..797eea3cd69d
--- /dev/null
+++ b/cmake/ParseConfigHeader.cmake
@@ -0,0 +1,17 @@
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h" CONFIG_HEADER_CONTENT)
+
+set(BLANK_OR_BACKSLASH_PATTERN "[ \t\r\n\\]")
+set(VALID_IDENTIFIER_PATTERN "[A-Za-z_]+[A-Za-z_0-9]*")
+set(VALID_VALUE_PATTERN [=["?[A-Za-z_0-9.-]+"?]=]) # not really correct but does the job since the config.h file hopefully will have been checked by a C preprocessor.
+set(MACRO_REGEX "(//${BLANK_OR_BACKSLASH_PATTERN}*)?\#define${BLANK_OR_BACKSLASH_PATTERN}+(${VALID_IDENTIFIER_PATTERN})${BLANK_OR_BACKSLASH_PATTERN}+(${VALID_VALUE_PATTERN})")
+
+string(REGEX MATCHALL ${MACRO_REGEX} MACRO_LIST ${CONFIG_HEADER_CONTENT})
+
+set(CONFIG_HEADER_FLAGS ${MACRO_LIST})
+list(FILTER CONFIG_HEADER_FLAGS INCLUDE REGEX "^.+SUPPORT_")
+list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=OFF]] REGEX "^//")
+list(TRANSFORM CONFIG_HEADER_FLAGS REPLACE ${MACRO_REGEX} [[\2=ON]])
+
+set(CONFIG_HEADER_VALUES ${MACRO_LIST})
+list(FILTER CONFIG_HEADER_VALUES EXCLUDE REGEX "(^.+SUPPORT_)|(^//)")
+list(TRANSFORM CONFIG_HEADER_VALUES REPLACE ${MACRO_REGEX} [[\2=\3]])
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 28550eaecb65..64b6d76040e8 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -96,10 +96,9 @@ if (${PLATFORM} MATCHES "Android")
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/shaders/shaders_basic_lighting.c)
elseif (${PLATFORM} MATCHES "Web")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os")
# Since WASM is used, ALLOW_MEMORY_GROWTH has no extra overheads
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s ALLOW_MEMORY_GROWTH=1 --no-heap-copy")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s WASM=1 -s ASYNCIFY -s ALLOW_MEMORY_GROWTH=1 --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
set(CMAKE_EXECUTABLE_SUFFIX ".html")
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/raylib_opengl_interop.c)
diff --git a/examples/audio/audio_mixed_processor.c b/examples/audio/audio_mixed_processor.c
index 3a008f3e22cd..fd970dd19b0a 100644
--- a/examples/audio/audio_mixed_processor.c
+++ b/examples/audio/audio_mixed_processor.c
@@ -97,7 +97,7 @@ int main(void)
DrawRectangle(199, 199, 402, 34, LIGHTGRAY);
for (int i = 0; i < 400; i++)
{
- DrawLine(201 + i, 232 - averageVolume[i] * 32, 201 + i, 232, MAROON);
+ DrawLine(201 + i, 232 - (int)averageVolume[i] * 32, 201 + i, 232, MAROON);
}
DrawRectangleLines(199, 199, 402, 34, GRAY);
diff --git a/examples/build.zig b/examples/build.zig
index 5a17382caca1..df0cdf8c17f0 100644
--- a/examples/build.zig
+++ b/examples/build.zig
@@ -75,6 +75,7 @@ fn add_module(comptime module: []const u8, b: *std.Build, target: std.Build.Reso
const install_cmd = b.addInstallArtifact(exe, .{});
const run_cmd = b.addRunArtifact(exe);
+ run_cmd.cwd = b.path(module);
run_cmd.step.dependOn(&install_cmd.step);
const run_step = b.step(name, name);
diff --git a/examples/core/core_2d_camera_platformer.c b/examples/core/core_2d_camera_platformer.c
index 75fd6cf6ad94..3743de80b0ef 100644
--- a/examples/core/core_2d_camera_platformer.c
+++ b/examples/core/core_2d_camera_platformer.c
@@ -133,10 +133,10 @@ int main(void)
for (int i = 0; i < envItemsLength; i++) DrawRectangleRec(envItems[i].rect, envItems[i].color);
- Rectangle playerRect = { player.position.x - 20, player.position.y - 40, 40, 40 };
+ Rectangle playerRect = { player.position.x - 20, player.position.y - 40, 40.0f, 40.0f };
DrawRectangleRec(playerRect, RED);
- DrawCircle(player.position.x, player.position.y, 5, GOLD);
+ DrawCircleV(player.position, 5.0f, GOLD);
EndMode2D();
diff --git a/examples/core/core_input_mouse_wheel.c b/examples/core/core_input_mouse_wheel.c
index 54f33545ef6a..d261e9348796 100644
--- a/examples/core/core_input_mouse_wheel.c
+++ b/examples/core/core_input_mouse_wheel.c
@@ -36,7 +36,7 @@ int main(void)
{
// Update
//----------------------------------------------------------------------------------
- boxPositionY -= (GetMouseWheelMove()*scrollSpeed);
+ boxPositionY -= (int)(GetMouseWheelMove()*scrollSpeed);
//----------------------------------------------------------------------------------
// Draw
diff --git a/examples/core/core_random_sequence.c b/examples/core/core_random_sequence.c
index c946b64dad80..2f7c3be95832 100644
--- a/examples/core/core_random_sequence.c
+++ b/examples/core/core_random_sequence.c
@@ -41,7 +41,7 @@ int main(void) {
int rectCount = 20;
float rectSize = (float)screenWidth/rectCount;
- ColorRect* rectangles = GenerateRandomColorRectSequence(rectCount, rectSize, screenWidth, 0.75f * screenHeight);
+ ColorRect* rectangles = GenerateRandomColorRectSequence((float)rectCount, rectSize, (float)screenWidth, 0.75f * screenHeight);
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
@@ -62,7 +62,7 @@ int main(void) {
rectCount++;
rectSize = (float)screenWidth/rectCount;
free(rectangles);
- rectangles = GenerateRandomColorRectSequence(rectCount, rectSize, screenWidth, 0.75f * screenHeight);
+ rectangles = GenerateRandomColorRectSequence((float)rectCount, rectSize, (float)screenWidth, 0.75f * screenHeight);
}
if(IsKeyPressed(KEY_DOWN))
@@ -71,7 +71,7 @@ int main(void) {
rectCount--;
rectSize = (float)screenWidth/rectCount;
free(rectangles);
- rectangles = GenerateRandomColorRectSequence(rectCount, rectSize, screenWidth, 0.75f * screenHeight);
+ rectangles = GenerateRandomColorRectSequence((float)rectCount, rectSize, (float)screenWidth, 0.75f * screenHeight);
}
}
@@ -121,17 +121,17 @@ static Color GenerateRandomColor()
}
static ColorRect* GenerateRandomColorRectSequence(float rectCount, float rectWidth, float screenWidth, float screenHeight){
- int *seq = LoadRandomSequence(rectCount, 0, rectCount-1);
- ColorRect* rectangles = (ColorRect *)malloc(rectCount*sizeof(ColorRect));
+ int *seq = LoadRandomSequence((unsigned int)rectCount, 0, (unsigned int)rectCount-1);
+ ColorRect* rectangles = (ColorRect *)malloc((int)rectCount*sizeof(ColorRect));
float rectSeqWidth = rectCount * rectWidth;
- int startX = (screenWidth - rectSeqWidth) * 0.5f;
+ float startX = (screenWidth - rectSeqWidth) * 0.5f;
for(int x=0;x
-
+
@@ -1317,7 +1317,7 @@
-
+
@@ -1493,12 +1493,12 @@
-
+
-
+
@@ -1525,31 +1525,31 @@
-
+
-
+
-
+
-
+
-
+
@@ -1655,7 +1655,7 @@
-
+
@@ -1842,9 +1842,9 @@
-
+
-
+
@@ -1966,6 +1966,13 @@
+
+
+
+
+
+
+
@@ -2017,6 +2024,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2440,7 +2482,7 @@
-
+
diff --git a/parser/raylib_parser.c b/parser/raylib_parser.c
index 63f957284aca..cfb0133c3d2e 100644
--- a/parser/raylib_parser.c
+++ b/parser/raylib_parser.c
@@ -1100,7 +1100,7 @@ static void ShowCommandLineInfo(void)
printf(" NOTE: If not specified, defaults to: raylib_api.txt\n\n");
printf(" -f, --format : Define output format for parser data.\n");
printf(" Supported types: DEFAULT, JSON, XML, LUA, CODE\n\n");
- printf(" -d, --define : Define functions specifiers (i.e. RLAPI for raylib.h, RMDEF for raymath.h, etc.)\n");
+ printf(" -d, --define : Define functions specifiers (i.e. RLAPI for raylib.h, RMAPI for raymath.h, etc.)\n");
printf(" NOTE: If no specifier defined, defaults to: RLAPI\n\n");
printf(" -t, --truncate : Define string to truncate input after (i.e. \"RLGL IMPLEMENTATION\" for rlgl.h)\n");
printf(" NOTE: If not specified, the full input file is parsed.\n\n");
@@ -1110,7 +1110,7 @@ static void ShowCommandLineInfo(void)
printf(" Process to generate \n\n");
printf(" > raylib_parser --output raylib_data.info --format XML\n");
printf(" Process to generate as XML text data\n\n");
- printf(" > raylib_parser --input raymath.h --output raymath_data.info --format XML\n");
+ printf(" > raylib_parser --input raymath.h --output raymath_data.info --format XML --define RMAPI\n");
printf(" Process to generate as XML text data\n\n");
}
diff --git a/projects/VS2022/examples/shapes_splines_drawing.vcxproj b/projects/VS2022/examples/shapes_splines_drawing.vcxproj
index 77b17a803e8c..7be42c0b7073 100644
--- a/projects/VS2022/examples/shapes_splines_drawing.vcxproj
+++ b/projects/VS2022/examples/shapes_splines_drawing.vcxproj
@@ -202,7 +202,7 @@
Level3
Disabled
- WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
CompileAsC
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
@@ -219,7 +219,7 @@
Level3
Disabled
- WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
CompileAsC
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
/FS %(AdditionalOptions)
@@ -237,7 +237,7 @@
Level3
Disabled
- WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
CompileAsC
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
@@ -258,7 +258,7 @@
Level3
Disabled
- WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ WIN32;_CRT_SECURE_NO_WARNINGS;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
CompileAsC
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
@@ -281,7 +281,7 @@
MaxSpeed
true
true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
+ WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
CompileAsC
true
@@ -303,7 +303,7 @@
MaxSpeed
true
true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
+ WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
CompileAsC
true
@@ -325,7 +325,7 @@
MaxSpeed
true
true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
+ WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
CompileAsC
true
@@ -353,7 +353,7 @@
MaxSpeed
true
true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
+ WIN32;_CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP
$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)
CompileAsC
true
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 387665705c3d..c1360ee299e3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -69,7 +69,10 @@ else()
endif()
if (${PLATFORM} MATCHES "Web")
- target_link_options(raylib PRIVATE "-sUSE_GLFW=3")
+ target_link_options(raylib PUBLIC "-sUSE_GLFW=3")
+ if(${GRAPHICS} MATCHES "GRAPHICS_API_OPENGL_ES3")
+ target_link_options(raylib PUBLIC "-sFULL_ES3")
+ endif()
endif()
set_target_properties(raylib PROPERTIES
diff --git a/src/Makefile b/src/Makefile
index 23742565d2f9..19251b95692e 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -316,7 +316,7 @@ endif
# -D_GNU_SOURCE access to lots of nonstandard GNU/Linux extension functions
# -Werror=pointer-arith catch unportable code that does direct arithmetic on void pointers
# -fno-strict-aliasing jar_xm.h does shady stuff (breaks strict aliasing)
-CFLAGS = -Wall -D_GNU_SOURCE -D$(PLATFORM) -D$(GRAPHICS) -Wno-missing-braces -Werror=pointer-arith -fno-strict-aliasing $(CUSTOM_CFLAGS)
+CFLAGS = -Wall -D_GNU_SOURCE -D$(PLATFORM) -D$(GRAPHICS) -Wno-missing-braces -Werror=pointer-arith -fno-strict-aliasing
ifneq ($(RAYLIB_CONFIG_FLAGS), NONE)
CFLAGS += -DEXTERNAL_CONFIG_FLAGS $(RAYLIB_CONFIG_FLAGS)
@@ -449,6 +449,8 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
endif
endif
+CFLAGS += $(CUSTOM_CFLAGS)
+
# Define include paths for required headers: INCLUDE_PATHS
# NOTE: Several external required libraries (stb and others)
#------------------------------------------------------------------------------------------------
diff --git a/src/build.zig b/src/build.zig
index 51a8ab7b0837..81d4a766263d 100644
--- a/src/build.zig
+++ b/src/build.zig
@@ -22,6 +22,7 @@ pub fn addRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
.platform_drm = options.platform_drm,
.shared = options.shared,
.linux_display_backend = options.linux_display_backend,
+ .opengl_version = options.opengl_version,
});
const raylib = raylib_dep.artifact("raylib");
@@ -216,6 +217,7 @@ fn compileRaylib(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.
},
}
+ raylib.addIncludePath(b.path("src"));
raylib.root_module.addCSourceFiles(.{
.root = b.path("src"),
.files = c_source_files.items,
diff --git a/src/external/rl_gputex.h b/src/external/rl_gputex.h
index c577305522cd..6b26d1c8d9b0 100644
--- a/src/external/rl_gputex.h
+++ b/src/external/rl_gputex.h
@@ -171,6 +171,10 @@ void *rl_load_dds_from_memory(const unsigned char *file_data, unsigned int file_
*width = header->width;
*height = header->height;
+
+ if (*width % 4 != 0) LOG("WARNING: IMAGE: DDS file width must be multiple of 4. Image will not display correctly");
+ if (*height % 4 != 0) LOG("WARNING: IMAGE: DDS file height must be multiple of 4. Image will not display correctly");
+
image_pixel_size = header->width*header->height;
if (header->mipmap_count == 0) *mips = 1; // Parameter not used
diff --git a/src/minshell.html b/src/minshell.html
index 38f3672b9161..4068ca36c750 100644
--- a/src/minshell.html
+++ b/src/minshell.html
@@ -34,8 +34,12 @@