#define @0 #define @1 #define @2 #define @3 #define @@ #define uniform #define varying struct vec2 { vec2(double t) {}; vec2(double x, double y) {}; double x; double y; vec2 operator + (vec2); vec2 operator - (vec2); vec2 operator * (vec2); vec2 operator / (vec2); vec2 operator + (double); vec2 operator - (double); vec2 operator * (double); vec2 operator / (double); friend vec2 operator +(double, vec2); friend vec2 operator -(double, vec2); friend vec2 operator *(double, vec2); friend vec2 operator /(double, vec2); void operator += (double); void operator -= (double); void operator *= (double); void operator /= (double); void operator += (vec2); void operator -= (vec2); void operator *= (vec2); void operator /= (vec2); }; struct vec3 { vec3(double t) {}; vec3(double x, double y, double z) {}; double x; double y; double z; vec3 operator + (vec3); vec3 operator - (vec3); vec3 operator * (vec3); vec3 operator / (vec3); vec3 operator + (double); vec3 operator - (double); vec3 operator * (double); vec3 operator / (double); friend vec3 operator +(double, vec3); friend vec3 operator -(double, vec3); friend vec3 operator *(double, vec3); friend vec3 operator /(double, vec3); void operator += (double); void operator -= (double); void operator *= (double); void operator /= (double); void operator += (vec3); void operator -= (vec3); void operator *= (vec3); void operator /= (vec3); }; struct vec4 { vec4(double t) {}; vec4(double x, double y, double z, double w) {}; double x; double y; double z; double w; vec4 operator + (vec4); vec4 operator - (vec4); vec4 operator * (vec4); vec4 operator / (vec4); vec4 operator + (double); vec4 operator - (double); vec4 operator * (double); vec4 operator / (double); friend vec4 operator +(double, vec4); friend vec4 operator -(double, vec4); friend vec4 operator *(double, vec4); friend vec4 operator /(double, vec4); void operator += (double); void operator -= (double); void operator *= (double); void operator /= (double); void operator += (vec4); void operator -= (vec4); void operator *= (vec4); void operator /= (vec4); }; typedef double sampler2D; vec4 texture2D(sampler2D t, vec2 uv); template T mix(T a, T b, double c); template T mod(T a, double b); template T fract(T a); template T step(double b, T a); template T smoothstep(double a, double b, T a);