subtraction seems to work now
[csgray] / src / geom.h
index 7405fa3..e3865d2 100644 (file)
@@ -14,22 +14,28 @@ struct hit {
        float x, y, z;
        float nx, ny, nz;
        csg_object *o;
        float x, y, z;
        float nx, ny, nz;
        csg_object *o;
+};
+
+struct hinterv {
+       struct hit end[2];
+       csg_object *o;
 
 
-       struct hit *next;
+       struct hinterv *next;
 };
 
 };
 
-struct hit *alloc_hit(void);
-void free_hit(struct hit *hit);
-void free_hit_list(struct hit *hit);
 
 
-struct hit *ray_intersect(struct ray *ray, csg_object *o);
+struct hinterv *alloc_hits(int n);
+void free_hit(struct hinterv *hv);
+void free_hit_list(struct hinterv *hv);
+
+struct hinterv *ray_intersect(struct ray *ray, csg_object *o);
 
 
-struct hit *ray_sphere(struct ray *ray, csg_object *o);
-struct hit *ray_cylinder(struct ray *ray, csg_object *o);
-struct hit *ray_plane(struct ray *ray, csg_object *o);
-struct hit *ray_csg_un(struct ray *ray, csg_object *o);
-struct hit *ray_csg_isect(struct ray *ray, csg_object *o);
-struct hit *ray_csg_sub(struct ray *ray, csg_object *o);
+struct hinterv *ray_sphere(struct ray *ray, csg_object *o);
+struct hinterv *ray_cylinder(struct ray *ray, csg_object *o);
+struct hinterv *ray_plane(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_un(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_isect(struct ray *ray, csg_object *o);
+struct hinterv *ray_csg_sub(struct ray *ray, csg_object *o);
 
 void xform_ray(struct ray *ray, float *mat);
 
 
 void xform_ray(struct ray *ray, float *mat);