# polypartiCL

Naive photon simulator using [SYCL](https://khronos.org/sycl/) and [raylib](https://raylib.com)

This project uses the [raylib-cpp](https://robloach.github.io/raylib-cpp) wrapper library and is provided in the /include directory.
raylib-cpp is licensed under an unmodified zlib/libpng license. A copy of this license is provided at /include/LICENSE.

cmake assumes icpx and the [Intel OneAPI](https://www.intel.com/content/www/us/en/developer/tools/oneapi/overview.html) environment is installed.
You'll need these even if you don't compile with cmake until SYCL gets native LLVM support.

All simulation code uses single-precision floating point arithmetic to ensure compatability with (integrated) graphics packages that do not support 64-bit floating point.

polypartiCL is licensed with the 3-clause BSD license.

## Todo
- Reduce corner escaping
    - Ability limited by f32 precision
- Rewrite & optimize simulation code, store all points/velocites in one array and submit once
    - Consider modelling each particle and all its relevant data points individually
    - Submit each relevant data point by pointer offset, size of struct is irrelevant as long as it is constant, only necessary data will be submitted to kernel
- Add linear beams
- Add environment objects / multiple rooms per screen
- Add timed events
- Add MIDI support for real-time music visualization
- Add compile option for 64-bit floating point simulation

![Screenshot 1](screenshots/1.png)
![Screenshot 2](screenshots/2.png)
![Screenshot 3](screenshots/3.png)
![Screenshot 4](screenshots/4.png)
