#ifndef COMMON_H #define COMMON_H #include "include/helper_math.h" #include /** template class vect_t2; template class vect3; template class vect_t4; //this feels so hacky... idk why people are so scared of metaprogramming template <> class vect_t2 { public: using vect_t = double2; }; template <> class vect3 { public: using vect_t = double3; }; template <> class vect_t4 { public: using vect_t = double4; }; template <> class vect_t2 { public: using vect_t = float2; }; template <> class vect3 { public: using vect_t = float3; }; template <> class vect_t4 { public: using vect_t = float4; }; template __device__ T vect_create(X x); template __device__ T vect_create(X x, Y y, Z z); //I have no fucking clue if this is right, check me later ig template __device__ inline float3 vect_create(X x) { return make_float3(x); } template __device__ inline float3 vect_create(X x, Y y, Z z) { return make_float3(x, y, z); } **/ /** I'm not sure weather float or double percision is nessesary. I was using templates, but this changes the structure of my entire project in unwanted ways, so I'm switching over to typedefs. **/ typedef float2 vect2; typedef float3 vect3; typedef float T; #define T_MAX FLT_MAX #define make_vect3(...) (make_float3(__VA_ARGS__)) //TODO move to color.cuh typedef float3 Color; #define make_color(...) (make_float3(__VA_ARGS__)) //TODO move to ray.cuh struct Ray { Color color; vect3 start; vect3 direction; //MUST BE A UNIT VECTOR int bounces; }; #endif