when you get an error like this:
rayMarch: no matching overloaded function found (using implicit conversion)
it generally means that you called the function with the wrong VEC counts.
Not that the function itself has an error.
example: the first line of the function is expecting a vec3, vec3, vec2 as it's input.
vec4 rayMarch(in vec3 from, in vec3 dir, in vec2 pix) {
// Add some noise to prevent banding
but the call to the function sent a vec3, vec3,
vec4( and it is the line where the call is, that reported the error )
gl_FragCoord is a vec4
gl_FragColor = rayMarch(camPos, rayDir, gl_FragCoord );
so to correct the error, is not to edit function, but you could re-write it to accept a vec4
it was easier to use a swizzle on the call to the function so it is sending a vec2 and not a vec4
gl_FragColor = rayMarch(camPos, rayDir, gl_FragCoord.xy );