Raylib 3.0 was released today. Raylib is an open source, cross platform C based framework of tools and libraries for making games. Components of raylib can be used on their own, however you can also download a preconfigured development environment making it among the easiest ways to get started doing C or C++ game programming.
Details of the 3.0 release:
- 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
orRLGL.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 on how memory is 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 reviewed 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 newMusic
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 asImage
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.
Raylib is available on https://www.raylib.com/, with the source code hosted on GitHub under the liberal ZLib license. The raylib cheatsheet is a one stop shop for learning the commands from the various libraries. Raylib is also well documented on the Wiki.
Learn more about raylib in the video below.