Compare commits

..

9 Commits

Author SHA1 Message Date
alardner 7b72cd39f8 fixed broken branches, updated README 2026-08-19 01:02:43 -07:00
alardner f2c7c0d882 make shared ptrs device ptrs 2026-07-17 16:45:52 -07:00
alardner c0a0d101eb backup 2026-07-16 13:38:08 -07:00
alardner 70dbf1a649 fix gitignore 2026-07-14 01:37:24 -07:00
alardner 78fa51384a update readme 2026-07-14 00:56:02 -07:00
alardner 5168be0ea9 update readme 2026-07-14 00:20:01 -07:00
alardner 7f013bf36b Merge pull request 'Dev' (#3) from dev into main
Reviewed-on: #3
2026-07-13 23:38:42 -07:00
alardner 821a01c167 Merge pull request 'Dev' (#2) from dev into main
Reviewed-on: #2
2026-07-13 23:04:40 -07:00
alardner cd83fa71bb Merge pull request 'Dev' (#1) from dev into main
Reviewed-on: #1
2026-07-11 00:42:26 -07:00
10 changed files with 37 additions and 24 deletions
-1
View File
@@ -42,4 +42,3 @@ build
debug
.cache
tmp
screenshot*
+12 -5
View File
@@ -1,6 +1,6 @@
# polypartiCL
Naive photon simulator with SYCL and [raylib](https://raylib.com)
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.
@@ -8,16 +8,23 @@ raylib-cpp is licensed under an unmodified zlib/libpng license. A copy of this l
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.
polypartiCL is licensed with the 3-clause BSD license.
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. Initial development of GLSL shaders (./shaders/*.fs) was assisted by generative AI (Claude Sonnet).
## 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](https://alexlardner.com/img/1.png)
![Screenshot 2](https://alexlardner.com/img/2.png)
![Screenshot 3](https://alexlardner.com/img/3.png)
![Screenshot 1](screenshots/1.png)
![Screenshot 2](screenshots/2.png)
![Screenshot 3](screenshots/3.png)
![Screenshot 4](screenshots/4.png)
+8
View File
@@ -0,0 +1,8 @@
Center Delay
count velocity x y theta_i theta_f color start end decayrate
===================================================
s
20000 70 0.5 0.5 0 360 red 1 0 0
20000 70 0.5 0.5 0 360 green 3.30769 0 0
20000 70 0.5 0.5 0 360 blue 5.61538 0 0
20000 70 0.5 0.5 0 360 white 7.92308 0 0
+4 -3
View File
@@ -2,6 +2,7 @@ Center Delay
count velocity x y theta_i theta_f color start end decayrate
===================================================
s
16000 79 0.5 0.5 0 360 cyan 1 0 0
16000 79 0.5 0.5 0 360 magenta 2.075 0 0
16000 79 0.5 0.5 0 360 yellow 4.931 0 0
10000 40 0.5 0.5 0 360 orange 1 0 0
10000 40 0.5 0.5 0 360 cyan 3.30769 0 0
10000 40 0.5 0.5 0 360 violet 5.61538 0 0
10000 40 0.5 0.5 0 360 green 7.92308 0 0
+7 -9
View File
@@ -1,11 +1,9 @@
Big Hexagon (fixed 1080)
Big Diamond (relative)
x y
==================
f
960.0 1.303
1426.525 270.652
1426.525 809.348
960.0 1078.697
493.475 809.348
493.475 270.652
960.0 1.303
r
0.5 0.0
0.78125 0.5
0.5 1.0
0.21875 0.5
0.5 0.0
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 758 KiB

+6 -6
View File
@@ -30,9 +30,9 @@ struct Polyparti::ParticleField::ColCode {
//Pointers to malloc on GPU VRAM for calculations. malloc_shared pointers are entry/exit
//point for data in CPU RAM
float *v_ptr = malloc_shared<float>(2 * len_points, q);
float *d_ptr = malloc_shared<float>(2 * len_points, q);
float *c_ptr = malloc_shared<float>(2 * len_points, q);
float *v_ptr = malloc_device<float>(2 * len_points, q);
float *d_ptr = malloc_device<float>(2 * len_points, q);
float *c_ptr = malloc_device<float>(2 * len_points, q);
float *ray_ptr = malloc_device<float>(2 * len_points, q);
float *det_ptr = malloc_device<float>(len_points, q);
float *bestA_ptr = malloc_device<float>(2 * len_points, q);
@@ -170,9 +170,9 @@ struct Polyparti::ParticleField::ColCode {
void moveParticles() {
queue& q = q_shared();
int len = positions.size();
float *v_ptr = malloc_shared<float>(2 * len, q);
float *p_ptr = malloc_shared<float>(2 * len, q);
float *t_ptr = malloc_shared<float>(1, q);
float *v_ptr = malloc_device<float>(2 * len, q);
float *p_ptr = malloc_device<float>(2 * len, q);
float *t_ptr = malloc_device<float>(1, q);
q.submit([&](handler& h) {
h.memcpy(p_ptr, &positions[0], len * 2 * sizeof(float));