The project relies heavily on GLSL shaders for both visualization and computation.
geodesic.comp (Compute Shader)This is the heart of the simulation. It runs for every pixel in the viewport.
image2D outImage: The texture to write the final color to.Camera UBO: Contains camera position, orientation, and FOV data.Disk UBO: Parameters for the accretion disk (radii, thickness).Objects UBO: Array of simple spherical objects (planets/stars) with their positions, colors, and masses.initRay(vec3 pos, vec3 dir): Converts Cartesian camera ray to spherical coordinates $(r, \theta, \phi)$ and calculates conserved quantities $E$ and $L$.geodesicRHS(...): Computes the derivatives for the Schwarzschild geodesic equations. used by the RK4 integrator.rk4Step(...): Performs a single 4th-order Runge-Kutta integration step.intercept(...): Checks if the ray has fallen into the event horizon.grid.vert & grid.fragUsed for the CPU-generated grid visualization.
draw.vert & draw.frag (Implied)Used to render the full-screen quad that displays the texture generated by the compute shader.