Shell abstraction layer and rendering interface for 3D applications
Go to file
Lioncash 4d91a1b3c3 BooObject: Make atomic ordering constraints less strict
Increasing a reference count is able to always be relaxed. New
references to an object can only be formed from an existing reference.
The passing of an existing reference from one thread to another will
already necessitate the use of synchronization primitives, so this is a
safe change to make. Regardless, nothing other than the object itself
directly relies on the reference count, so this will always be a
suitably atomic operation, even in the face of no synchronization
primitives.

In the case of decrementing the reference count, it's sufficient to
treat it with release semantics and follow it up with an atomic thread
fence. This ensures that all accesses to the object in one thread will
occur before the delete occurs in another thread (if the situation ever
occurs).

This should make for a slightly more efficient increment and decrement.
2019-08-17 13:08:10 -04:00
glslang@c374030e80 Update glslang 2018-10-06 17:38:15 -10:00
include/boo BooObject: Make atomic ordering constraints less strict 2019-08-17 13:08:10 -04:00
lib General: Convert typedefs into using aliases 2019-08-16 18:27:23 -07:00
logvisor@dcd0ffcaec Windows build fixes 2019-07-27 15:19:25 -10:00
soxr SOXR build system minimization 2018-12-30 19:00:37 -10:00
test General: Add missing override specifiers 2019-08-16 18:27:23 -07:00
xxhash ensure clang enables XXH_swap* intrinsics 2017-11-07 16:27:48 -10:00
.gitignore Add .gitignore 2016-01-15 13:33:49 -10:00
.gitmodules macOS API sync 2018-10-15 17:13:57 -10:00
CMakeLists.txt Windows build fixes 2019-07-27 15:19:25 -10:00
FindIPP.cmake Vulkan array-texture validation fix; better handling of unsupported audio HW on ALSA 2017-10-30 17:42:41 -10:00
GLEW-LICENSE Integrated GLEW; began migration to Xlib 2015-10-30 18:28:21 -10:00
IPP-LICENSE Add IPP-LICENSE and README note about PLII encoding 2017-09-27 17:40:16 -10:00
InputDeviceClasses.cpp New code style refactor 2018-12-07 19:17:51 -10:00
LICENSE Update copyright date 2018-01-02 14:22:13 -10:00
README.md Windows build fixes and cleanups 2018-05-24 20:30:42 -10:00

README.md

Boo Mascot
Charlie

Boo

Boo is a cross-platform windowing and event manager similar to SDL or SFML, with additional 3D rendering functionality.

The primary focus of Boo is 2D/3D rendering using polygon-rasterization APIs like OpenGL or Direct3D. It exposes a unified command-queue API for calling the underlying graphics API.

The only per-platform responsibility of the client code is providing the shaders' source. Drawing, resource-management and state-switching are performed using the unified API; these may be written once for all platforms.

Boo also features a unified audio API for mixing voices and performing variable sample-rate-conversion. All audio computation occurs on the CPU, synchronously 'pumped' by the client each frame-iteration.

Client code is entered via the appMain method supplied in a callback object. This code executes on a dedicated thread with graphics command context available. The API may be used to synchronize loops on the client thread with the display refresh-rate.

Supported Graphics Backends

  • OpenGL 3.3+
  • Direct3D 11
  • Metal 1.1 (OS X 10.11 only for now, iOS coming soon)
  • Vulkan

Supported Audio Backends

  • [Windows] WASAPI
  • [OS X] Audio Queue Services
  • [Linux] ALSA

Pro Logic II Encoding Support

The Boo audio engine supports real-time Pro Logic II surround matrixing for 5.1 client mixes. Call IAudioVoiceEngine::enableLtRt(true); to enable this functionality.

Note: Before building Boo, the Intel Integrated Performance Primitives must be installed for full surround-sound encoding capabilities. Without this library, only the left, right, and center channels will be encoded. The surround channels are phase-shifted 90-degrees using the Hilbert functions in the library.