 }
 
 struct CameraSampleResult {
-	Ray r;
-	float3 posOnLens;
-	float3 nmlOnLens;
+	aten::ray r;
+	aten::vec3 posOnLens;
+	aten::vec3 nmlOnLens;
 
 	__host__ __device__ CameraSampleResult() {}
 };
 
 struct Camera {
-	float3 origin;
+	aten::vec3 origin;
 
 	float aspect;
-	float3 center;
-
-	float3 u;
-	float3 v;
-
-	float3 dir;
-	float3 right;
-	float3 up;
+	aten::vec3 center;
+
+	aten::vec3 u;
+	aten::vec3 v;
+
+	aten::vec3 dir;
+	aten::vec3 right;
+	aten::vec3 up;
 
 	float dist;
 	int width;


	sample->posOnLens = screenPos;
	sample->nmlOnLens = camera->dir;
	sample->r = Ray(camera->origin, dirToScr);
}

__host__ __device__ bool intersect(
	const Ray* r, hitrecord* rec,
	const Context* ctx)
{
	bool isHit = false;

}

static Sphere g_spheres[] = {
	Sphere(aten::vec3(0, 0, -10), 1.0, 0),
	Sphere(aten::vec3(3, 0, -10), 1.0, 1),
};

void renderRayTracing(
