C++ games and interactive media framework that makes creating cross-platform applications easier and faster https://shampoo.ooo
Go to file
frank 3444afc2c1 changed get_configuration to configuration; added option to return the larger ratio to box aspect; changed default window size to 16:9; changed get_window to window; added SDL_RENDERER_PRESENTVSYNC; removed clear renderer to black on emscripten builds to prevent mouse bug; 2022-06-16 16:45:41 -04:00
demo add engine name to log file name 2022-05-06 23:39:32 -04:00
lib changed get_configuration to configuration; added option to return the larger ratio to box aspect; changed default window size to 16:9; changed get_window to window; added SDL_RENDERER_PRESENTVSYNC; removed clear renderer to black on emscripten builds to prevent mouse bug; 2022-06-16 16:45:41 -04:00
src changed get_configuration to configuration; added option to return the larger ratio to box aspect; changed default window size to 16:9; changed get_window to window; added SDL_RENDERER_PRESENTVSYNC; removed clear renderer to black on emscripten builds to prevent mouse bug; 2022-06-16 16:45:41 -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 changed get_configuration to configuration; added option to return the larger ratio to box aspect; changed default window size to 16:9; changed get_window to window; added SDL_RENDERER_PRESENTVSYNC; removed clear renderer to black on emscripten builds to prevent mouse bug; 2022-06-16 16:45:41 -04:00

README

         /\         +--------------------------------------------------------------+ 
    ____/  \____   /| - zlib/MIT/Unlicenced game framework licensed to freely use, |
    \          /  / |   copy, modify and sell without restriction                  |
  +--\ ^__^   /--+  |                                                              |
  | ~/        \~ |  | - originally created at [http://nugget.fun]                  |
  | ~~~~~~~~~~~~ |  +--------------------------------------------------------------+
  | 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
```````
- Download from http://libsdl.org/download-2.0.php
- Run ./configure --prefix=[YOUR LIBRARIES PATH] (I'm using $HOME/local/sdl)
- Run make && make install

libSDL2-image, libSDL2-ttf, libSDL2-mixer
`````````````````````````````````````````
- Download from:
  - https://www.libsdl.org/projects/SDL_image/
  - https://www.libsdl.org/projects/SDL_ttf/
  - https://www.libsdl.org/projects/SDL_mixer/
- Run ./configure --prefix=[YOUR LIB PATH] --with-sdl-prefix=[YOUR SDL PATH]
- In my case, prefix and SDL prefix are both $HOME/local/sdl

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:

 - http://squircular.blogspot.com/2015/09/mapping-circle-to-square.html

###################
# 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/
- configure (with custom installation path)
  cmake -DCMAKE_INSTALL_PREFIX=$HOME/local/opencv ..
- make && make install

zbar
````
- Download from http://zbar.sourceforge.net/download.html
- 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 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 #
###########

email    sega@nugget.fun
twitter  https://twitter.com/diskmem