C++ games and interactive media framework that makes creating cross-platform applications easier and faster https://shampoo.ooo
Go to file
frank dc2141c2c4 Merge branch 'pudding' into cuckoo 2022-08-09 18:30:39 -04:00
demo add engine name to log file name 2022-05-06 23:39:32 -04:00
lib set GL attributes before creating a window 2022-08-06 18:43:12 -04:00
src Merge branch 'pudding' into cuckoo 2022-08-09 18:30:39 -04:00
.gitignore squircle and 2d collision demo; config auto refresh 2021-08-31 23:55:38 -04:00
BPmono.ttf - framerate indicator sprite added to Game class 2020-07-19 15:43:47 -04:00
LICENSE.txt added licensing info 2021-06-26 20:25:03 -04:00
LICENSE_BPmono.txt added licensing info 2021-06-26 20:25:03 -04:00
README.md adjust pre tag 2022-07-23 19:34:11 -04:00

README.md

SPACE BOX

         /\         +------------------------------------------------------------+ 
    ____/  \____   /| zlib/MIT/Unlicenced game framework licensed to freely use, |
    \          /  / | copy, modify and sell without restriction                  |
  +--\ ^__^   /--+  |                                                            |
  | ~/        \~ |  | Learn more about [SPACE BOX] at [shampoo.ooo]              |
  | ~~~~~~~~~~~~ |  +------------------------------------------------------------+
  | SPACE ~~~~~  | /
  |  ~~~~~~~ BOX |/
  +--------------+   

[SPACE BOX] is a C++ framework that facilitates the creation of SDL + OpenGL projects through the use of generic objects that can be used and extended by the programmer. It focuses on game projects but its usefulness is not limited to games.

The main intention for the project is to make running cross-platform applications easier and more immediate by providing a universal tool set that exists as a hidden, extensible layer between SDL + OpenGL and the project.

An important quality of the framework is it should allow the programmer to start a project by extending only a single function, the Game class's update function. Additionally, the framework should by default create applications that can be easily exported to many platforms (PC, OS/X, Linux, Web GL, Raspberry Pi, and Android) by using a standard Makefile.

It is in an early, untested state. It comes with a few simple examples that demonstrate how in can be used to create interactive graphics programs.

Requirements

The repository includes some external libraries in lib/ that the default Makefile included with the demo shows how to compile, but there are other requirements, including external libraries that must be linked to a project in order to compile it.

  • libSDL2 (developed against v2.0.14)
  • libSDL2-image
  • libSDL2-ttf
  • libSDL2-mixer
  • OpenGL/GLES/GLES2
  • compiler that supports C++17

Installing Requirements

libSDL2, libSDL2-image, libSDL2-ttf, and libSDL2-mixer must be available to link with your project, so you can try your package manager's libSDL2 dev packages or build from source. The included sdl2-config utility program can be used to generate flags for linking to SDL2 when it is installed outside of your platform's usual library location.

libSDL2

libSDL2-image, libSDL2-ttf, libSDL2-mixer

OpenGL/GLES/GLES2

  • Install GL/GLES according to your platform and link to it during compilation. GLEW is included in the lib/ folder of this framework and should find GL on your platform if it is installed.

Demos

The demo/ folder contains programs that demonstrate and test the capabilities of the framework. In order to compile each, you should edit the definitions in the Makefile.

cube

Switch between GL and SDL contexts by pressing spacebar. The GL context draws a textured, rotating cube, and the SDL context draws basic geometric shapes and a moving 2D sprite.

2d_collision

Test collision detection between a 2D sprite and other 2D sprites and boxes. Per-pixel collision can be tested.

squircle

Map an image from a rectangle to a circle or from a circle to a rectangle using a shader program. Based on the elliptical grid mapping equations at:

Other libraries

These are other libraries that have been used in projects that use this framework but aren't required by the framework

opencv

Download from https://opencv.org/releases/ and configure (with custom installation path):

cmake -DCMAKE_INSTALL_PREFIX=$HOME/local/opencv ..

make:

make && make install

zbar

Download from http://zbar.sourceforge.net/download.html and configure to only use image processing features (requires imagemagick) and choose your installation directory:

./configure --without-gtk --without-python --without-qt --disable-video \ 
    --prefix=$HOME/local/zbar

make

make && make install

Font

When initializing a Game object, the framework will attempt to load the font file "BPmono.ttf" from the project root (where the compiled executable is located). If this file isn't found, the program can still run successfully, but the framerate indicator (mapped to CTRL+f by default) will be disabled. The repository contains "BPmono.ttf", so you can create a symlink to the file in the project root if you want to use the framerate indicator.

License

The original code for this framework is licensed to freely use, copy, modify and sell, without restriction under the zlib license. See LICENSE.txt for details.

Included libraries are included under various permissive licenses:

  • BPmono.ttf is licensed under the Creative Commons Attribution - No Derivative Works 3.0 license. See LICENSE_BPmono.txt for details.

  • gif-h is unlicensed, public domain code released under the The Unlicense. See lib/gif-h/LICENSE

  • GLEW is included under a permissive license in lib/glew/LICENSE.txt

  • GLM is included under the MIT license in lib/glm/LICENSE

  • nlohmann's json library is included under the MIT license in lib/json/LICENSE.MIT

  • SDL2 GFX is included under a permissive license in lib/sdl2-gfx/LICENSE

  • superxbr.cpp is included under the permissive license at the top of lib/superxbr.cpp

Contact