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 fb2d5d2d0c add images to readme 2026-07-13 23:29:33 -07:00
alardner f50871e3d8 ??? 2026-07-13 23:05:46 -07:00
11 changed files with 45 additions and 20 deletions
+1
View File
@@ -41,3 +41,4 @@ debug
build
debug
.cache
tmp
+13 -2
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,12 +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](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
View File
@@ -67,6 +67,8 @@ int main(int argc, char* argv[]) {
raylib::Vector2 mouse_i, mouse_f, mouse_d;
raylib::Vector2 midpoint(screenWidth * 0.5, screenHeight * 0.5);
raylib::Image screenshot(screenWidth, screenHeight, WHITE);
float dirH[2] = {1.0f, 0.0f};
float dirV[2] = {0.0f, 1.0f};
@@ -89,6 +91,10 @@ int main(int argc, char* argv[]) {
if (IsKeyPressed(KEY_B)) useShader = !useShader;
if (IsKeyPressed(KEY_SPACE)) paused = !paused;
if (IsKeyPressed(KEY_T)) sim.reverseInterval();
if (IsKeyPressed(KEY_S)) {
screenshot.LoadFromScreen();
screenshot.ExportAsCode("screenshot" + std::to_string(window.GetTime()));
}
if (!paused) {
sim.updateFields(window.GetTime());
+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));