cray v3.0.0 Release Notes

Release Date: 2020-03-31 // 2 months ago
  • After 10 months of intense development , new raylib version is ready. Despite primary intended as a minor release, the CHANGELIST has grown so big and the library has changed so much internally that it finally became a major release. Library internal ABI has reveived a big redesign and review, targeting portability, integration with other platforms and making it a perfect option for other progamming language bindings.

    All global variables from the multiple raylib modules have been moved to a global context state , it has several benefits, first, better code readability with more comprehensive variables naming and categorization (organized by types, i.e. CORE.Window.display.width, CORE.Input.Keyboard.currentKeyState or RLGL.State.modelview). Second, it allows better memory management to load global context state dynamically when required (not at the moment), making it easy to implement a hot-reloading mechanism if desired.

    All memory allocations on raylib and its dependencies now use RL_MALLOC, RL_FREE and similar macros. Now users can easely hook their own memory allocations mechanism if desired, having more control over memory allocated internally by the library. Additionally, it makes it easier to port the library to embedded devices where memory control is critical. For more info check raylib issue #1074.

    All I/O file accesses from raylib are being moved to memory data access , now all I/O file access is centralized into just four functions: LoadFileData(), SaveFileData(), LoadFileText(), SaveFileText(). Users can just update those functions to any I/O file system. This change makes it easier to integrate raylib with Virtual File Systems or custom I/O file implementations.

    All raylib data structures have been reviewed and optimized for pass-by-value usage. One of raylib distinctive design decisions is that most of its functions receive and return data by value. This design makes raylib really simple for newcomers, avoiding pointers and allowing complete access to all structures data in a simple way. The downside is that data is copied on stack every function call and that copy could be costly so, all raylib data structures have been optimized to stay under 64 bytes for fast copy and retrieve.

    All raylib tracelog messages have been reviewd and categorized for a more comprehensive output information when developing raylib applications, now all display, input, timer, platform, auxiliar libraries, file-accesses, data loading/unloading issues are properly reported with more detailed and visual messages.

    raudio module has been internally reviewed to accomodate the new Music structure (converted from previous pointer format) and the module has been adapted to the highly improved miniaudio v0.10.

    👌 text module reviewed to improve fonts generation and text management functions, Font structure has been redesigned to better accomodate characters data, decoupling individual characters as Image glyphs from the font atlas parameters. Several improvements have been made to better support Unicode strings with UTF-8 encoding.

    Multiple new examples added (most of them contributed by raylib users) and all examples reviewed for correct execution on most of the supported platforms, specially Web and Raspberry Pi. A detailed categorized table has been created on github for easy examples navigation and code access.

    New GitHub Actions CI system has been implemented for Windows, Linux and macOS code and examples compilation on every new commit or PR to make sure library keeps stable and usable with no breaking bugs.

    Note that only key changes are listed here but there is way more! About 30 new functions , multiple functions reviewed, bindings to +40 programming languages and great samples/demos/tutorials created by the community, including raylib integration with Spine, Unity, Tiled, Nuklear, enet and more!

    It has been 10 months of improvements to create the best raylib ever.

    Welcome to raylib 3.0.


Previous changes from v2.6.0

  • 🚀 This release is just intended to keep a tag of raylib 2.6 state before moving to the upcoming raylib 3.0 release.

    ♻️ On raylib 3.0 all modules globals have been moved to a global context state, using the name of the module (in capitals) as the object instance. It implied a very big refactoring of all the code, renaming ALL the global variables used in every module... but new code is more readable and global variables around the code are easily detected.

    👷 raylib 3.0 develop branch was used on GGJ2020 to develop a game and compile it for Desktop and HTML5 platforms, it worked very good. raylib 3.0 has also been tested on RaspberryPi and compiled with no errors for all CI available platforms. At this point raylib 3.0 should be stable.

    From now on master branch will include this new design, a 2.6 branch will be kept for reference.