245 lines
11 KiB
Markdown
245 lines
11 KiB
Markdown
<img src="http://www.raylib.com/img/fb_raylib_logo.png" width=256>
|
|
|
|
about
|
|
-----
|
|
|
|
raylib is a simple and easy-to-use library to learn videogames programming.
|
|
|
|
raylib is highly inspired by Borland BGI graphics lib and by XNA framework.
|
|
Allegro and SDL have also been analyzed for reference.
|
|
|
|
Want to see how easy is making games with raylib? Jump to [code examples!] (http://www.raylib.com/examples.htm)
|
|
|
|
history
|
|
-------
|
|
|
|
I've developed videogames for some years and last year I had to taught videogames development
|
|
to young people with artistic profile, most of them had never written a single line of code.
|
|
|
|
I started with C language basis and, after searching for the most simple and easy-to-use library to teach
|
|
videogames programming, I found WinBGI; it was great and it worked very well with students, in just a
|
|
couple of weeks that people that had never written a single line of code were able to program (and understand)
|
|
a simple PONG and some of them even a BREAKOUT!
|
|
|
|
But WinBGI was not the clearer and most organized lib. There were a lot of things I found useless and
|
|
confusing and some function names were not clear enough for most of the students; not to mention points
|
|
like no transparencies support or no hardware acceleration.
|
|
|
|
So, I decided to create my own lib, hardware accelerated, clear function names, quite organized, well structured,
|
|
plain C coding and, the most important, primarily intended to LEARN videogames programming.
|
|
|
|
I've coded quite a lot in C# and XNA and I really love it (in fact, my students learn C# after C),
|
|
so, I decided to use C# language notation and XNA naming conventions. That way, students can jump from
|
|
raylib to XNA, MonoGame or similar libs extremely easily.
|
|
|
|
raylib started as a weekend project and after three months of hard work, first version was published.
|
|
|
|
Enjoy it.
|
|
|
|
notes on raylib 1.1
|
|
-------------------
|
|
|
|
On April 2014, after 6 month of first raylib release, raylib 1.1 has been released. This new version presents a
|
|
complete internal redesign of the library to support OpenGL 1.1, OpenGL 3.3+ and OpenGL ES 2.0.
|
|
|
|
A new module named [rlgl] (https://github.com/raysan5/raylib/blob/master/src/rlgl.h) has been added to the library. This new module translate raylib-OpenGL-style
|
|
immediate mode functions (i.e. rlVertex3f(), rlBegin(), ...) to different versions of OpenGL (1.1, 3.3+, ES2), selectable by one define.
|
|
|
|
[rlgl] (https://github.com/raysan5/raylib/blob/master/src/rlgl.h) also comes with a second new module named [raymath] (https://github.com/raysan5/raylib/blob/master/src/raymath.h), which includes
|
|
a bunch of useful functions for 3d-math with vectors, matrices and quaternions.
|
|
|
|
Some other big changes of this new version have been the support for OGG files loading and stream playing, and the
|
|
support of DDS texture files (compressed and uncompressed) along with mipmaps support.
|
|
|
|
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.1.
|
|
|
|
notes on raylib 1.2
|
|
-------------------
|
|
|
|
On September 2014, after 5 month of raylib 1.1 release, it comes raylib 1.2. Again, this version presents a
|
|
complete internal redesign of [core] (https://github.com/raysan5/raylib/blob/master/src/core.c) module to support two new platforms: [Android] (http://www.android.com/) and [Raspberry Pi] (http://www.raspberrypi.org/).
|
|
|
|
It's been some month of really hard work to accomodate raylib to those new platforms while keeping it easy for the user.
|
|
On Android, raylib manages internally the activity cicle, as well as the inputs; on Raspberry Pi, a complete raw input
|
|
system has been written from scratch.
|
|
|
|
A new display initialization system has been created to support multiple resolutions, adding black bars if required;
|
|
user only defines desired screen size and it gets properly displayed.
|
|
|
|
Now raylib can easily deploy games to Android devices and Raspberry Pi (console mode).
|
|
|
|
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.2.
|
|
|
|
features
|
|
--------
|
|
|
|
* Written in plain C code (C99)
|
|
* Uses C# PascalCase/camelCase notation
|
|
* Hardware accelerated with OpenGL (1.1, 3.3+ or ES2)
|
|
* Unique OpenGL abstraction layer [rlgl]
|
|
* Powerful fonts module with SpriteFonts support
|
|
* Multiple textures support, including DDS, PKM and mipmaps generation
|
|
* Basic 3d support for Shapes, Models, Heightmaps and Billboards
|
|
* Powerful math module for Vector and Matrix operations [raymath]
|
|
* Audio loading and playing with streaming support (WAV and OGG)
|
|
* Custom color palette for fancy visuals on raywhite background
|
|
* Multiple platforms support: Windows, Linux, Mac, **Android** and **Raspberry Pi**
|
|
|
|
raylib uses on its core module the outstanding [GLFW3] (http://www.glfw.org/) library. The best option by far I found for
|
|
multiplatform (Windows, Linux, Mac) window/context and input management (clean, focused, great license, well documented, modern, ...).
|
|
|
|
raylib uses on its [audio] (https://github.com/raysan5/raylib/blob/master/src/audio.c) module, [OpenAL Soft] (http://kcat.strangesoft.net/openal.html) audio library, in multiple flavours,
|
|
to accomodate to Android and Raspberry Pi.
|
|
|
|
On Android, raylib uses native_app_glue module (provided on Android NDK) and native Android libraries to manage window/context,
|
|
inputs and activity cycle.
|
|
|
|
On Raspberry Pi, raylib uses Videocore API and EGL for window/context management and raw inputs reading.
|
|
|
|
raylib is licensed under a zlib/libpng license. View [LICENSE] (https://github.com/raysan5/raylib/blob/master/LICENSE.md).
|
|
|
|
tools requirements
|
|
------------------
|
|
|
|
raylib has been developed using exclusively two tools:
|
|
|
|
* Notepad++ (text editor) - [http://notepad-plus-plus.org/](http://notepad-plus-plus.org/)
|
|
* MinGW (GCC compiler) - [http://www.mingw.org/](http://www.mingw.org/)
|
|
|
|
Those are the tools I recommend to develop with raylib, in fact, those are the tools my students use.
|
|
I believe those are the best tools to train spartan-programmers.
|
|
|
|
Someone could argue about debugging. raylib is a library intended for learning and I think C it's a clear enough language
|
|
to allow writing small-mid size programs with a printf-based debugging. All raylib examples have also been written this way.
|
|
|
|
Since raylib v1.1, you can download a windows Installer package for easy installation and configuration. Check [raylib Webpage](http://www.raylib.com/)
|
|
|
|
building source (generate libraylib.a)
|
|
--------------------------------------
|
|
|
|
**Building raylib sources on desktop platforms:**
|
|
|
|
_Step 1:_ Using MinGW make tool, just navigate from command line to raylib/src/ folder and type:
|
|
|
|
mingw32-make PLATFORM=PLATFORM_DESKTOP
|
|
|
|
NOTE: By default raylib compiles using OpenGL 1.1 to maximize compatibility; to use OpenGL 3.3 just type:
|
|
|
|
mingw32-make PLATFORM=PLATFORM_DESKTOP GRAPHICS=GRAPHICS_API_OPENGL_33
|
|
|
|
**Building raylib sources on Raspberry Pi:**
|
|
|
|
_Step 1._ Make sure you have installed in your Raspberry Pi OpenAL Soft library for audio:
|
|
|
|
sudo apt-get install openal1
|
|
|
|
_Step 2._ Navigate from command line to raylib/src/ folder and type:
|
|
|
|
make
|
|
|
|
**Building raylib sources for Android:**
|
|
|
|
_Step 1._ Make sure you have installed Android SDK, Android NDK and Apache Ant tools:
|
|
|
|
> Download and decompress on C: [Android SDK r23](http://dl.google.com/android/android-sdk_r23.0.2-windows.zip)
|
|
|
|
> Download and decompress on C: [Android NDK r10b](http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86.zip)
|
|
|
|
> Download and decompress on C: [Apache Ant 1.9.4](http://ftp.cixug.es/apache//ant/binaries/apache-ant-1.9.4-bin.zip)
|
|
|
|
_Step 2._ Create the following environment variables with the correct paths:
|
|
|
|
ANDROID_SDK_TOOLS = C:\android-sdk\platform-tools
|
|
ANDROID_NDK_ROOT = C:\android-ndk-r10b
|
|
ANT_HOME = C:\apache-ant-1.9.4
|
|
|
|
_Step 3._ Navigate from command line to folder raylib/template_android/ and type:
|
|
|
|
%ANDROID_NDK_ROOT%\ndk-build
|
|
|
|
NOTE: libraylib.a will be generated in folder raylib/src_android/obj/local/armeabi/, it must be copied
|
|
to Android project; if using raylib/template_android project, copy it to raylib/template_android/jni/libs/.
|
|
|
|
building examples
|
|
-----------------
|
|
|
|
**Building raylib examples on desktop platforms:**
|
|
|
|
_Step 1:_ Using MinGW make tool, just navigate from command line to raylib/examples/ folder and type:
|
|
|
|
mingw32-make PLATFORM=PLATFORM_DESKTOP
|
|
|
|
NOTE: Make sure the following libs (and their headers) are placed on their respectibe MinGW folders:
|
|
|
|
libglfw3.a - GLFW3 (static version)
|
|
libglew32.a - GLEW, OpenGL extension loading, only required if using OpenGL 3.3+ or ES2
|
|
libopenal32.a - OpenAL Soft, audio device management
|
|
|
|
**Building raylib examples on Raspberry Pi:**
|
|
|
|
_Step 1._ Make sure you have installed in your Raspberry Pi OpenAL Soft library for audio:
|
|
|
|
sudo apt-get install openal1
|
|
|
|
_Step 2._ Navigate from command line to raylib/examples/ folder and type:
|
|
|
|
make
|
|
|
|
**Building raylib project for Android (using template):**
|
|
|
|
_Step 1._ Make sure you have installed Android SDK, Android NDK and Apache Ant tools:
|
|
|
|
> Download and decompress on C: [Android SDK r23] (http://dl.google.com/android/android-sdk_r23.0.2-windows.zip)
|
|
|
|
> Download and decompress on C: [Android NDK r10b] (http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86.zip)
|
|
|
|
> Download and decompress on C: [Apache Ant 1.9.4] (http://ftp.cixug.es/apache//ant/binaries/apache-ant-1.9.4-bin.zip)
|
|
|
|
_Step 2._ Create the following environment variables with the correct paths:
|
|
|
|
ANDROID_SDK_TOOLS = C:\android-sdk\platform-tools
|
|
ANDROID_NDK_ROOT = C:\android-ndk-r10b
|
|
ANT_HOME = C:\apache-ant-1.9.4
|
|
|
|
_Step 3._ To compile project, navigate from command line to folder raylib/template_android/ and type:
|
|
|
|
%ANDROID_NDK_ROOT%\ndk-build
|
|
|
|
_Step 4._ To generate APK, navigate to folder raylib/template_android/ and type:
|
|
|
|
%ANT_HOME%\bin\ant debug
|
|
|
|
_Step 5:_ To install APK into connected device (previously intalled drivers and activated USB debug mode on device):
|
|
|
|
%ANT_HOME%\bin\ant installd
|
|
|
|
_Step 6:_ To view log output from device:
|
|
|
|
%ANDROID_SDK_TOOLS%\adb logcat -c
|
|
%ANDROID_SDK_TOOLS%\adb -d logcat raylib:V *:S
|
|
|
|
**If you have any doubt, [just let me know][raysan5].**
|
|
|
|
contact
|
|
-------
|
|
|
|
* Webpage: [http://www.raylib.com](http://www.raylib.com)
|
|
* Twitter: [http://www.twitter.com/raysan5](http://www.twitter.com/raysan5)
|
|
* Facebook: [http://www.facebook.com/raylibgames](http://www.facebook.com/raylibgames)
|
|
|
|
If you are using raylib and you enjoy it, please, [let me know][raysan5].
|
|
|
|
If you feel you can help, then, [helpme!] (http://www.raylib.com/helpme.htm)
|
|
|
|
acknowledgments
|
|
---------------
|
|
|
|
The following people have contributed in some way to make raylib project a reality. Big thanks to them!
|
|
|
|
- [Zopokx](https://github.com/Zopokx) for testing and hosting the web.
|
|
- [Elendow](http://www.elendow.com) for testing and helping on web development.
|
|
- Victor Dual for implementation and testing of 3D shapes functions.
|
|
- Marc Palau for implementation and testing of 3D shapes functions.
|
|
|
|
[raysan5]: mailto:raysan@raysanweb.com "Ramon Santamaria - Ray San"
|