raylib 3.0.0

3.0.0

raylib v3.0.0

Added 2
  • Add multiple new examples contributed by raylib users and review all examples for correct execution on supported platforms
  • Implement GitHub Actions CI system for Windows, Linux and macOS code and examples compilation on every commit or PR
Changed 7
  • Move all global variables from multiple raylib modules to a global context state with better code readability and memory management
  • Implement RL_MALLOC, RL_FREE and similar macros for all memory allocations in raylib and its dependencies to allow custom memory allocation hooks
  • Centralize all I/O file access into four functions: LoadFileData(), SaveFileData(), LoadFileText(), SaveFileText() for easier Virtual File System integration
  • Optimize all raylib data structures for pass-by-value usage to stay under 64 bytes for fast copy and retrieval
  • Review and categorize all raylib tracelog messages for more comprehensive output information during development
  • Internally review raudio module to accommodate new Music structure and adapt to miniaudio v0.10
  • Redesign Font structure to decouple individual characters as Image glyphs from font atlas parameters and improve Unicode UTF-8 string support

From raylib

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 received 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.

View original

Upgraded? How did it go?

Discussion