;;; struct slots

(define _X 0)
(define _Y 1)
(define _Z 2)

(define _CAMERA_LOCATION 0)
(define _CAMERA_DIRECTION 1)
(define _CAMERA_DOWN 2)
(define _CAMERA_UP_VEC 3)
(define _CAMERA_LEFT_VEC 4)
(define _CAMERA_TEMP 5)
(define _CAMERA_DOWN_VEC 6)
(define _CAMERA_RIGHT_VEC 7)
(define _CAMERA_UP_LEFT_VEC 8)
(define _CAMERA_DOWN_LEFT_VEC 9)
(define _CAMERA_DOWN_RIGHT_VEC 10)
(define _CAMERA_UP_RIGHT_VEC 11)
(define _CAMERA_START_VEC 12)
(define _CAMERA_END_VEC 13)
(define _CAMERA_IMAGE_POINT 14)
(define _CAMERA_COL_DELTA 15)
(define _CAMERA_ROW_DELTA 16)
(define _CAMERA_ROW_SIZE 17)
(define _CAMERA_COL_SIZE 18)
(define _CAMERA_ASPECT 19)
(define _CAMERA_RAD_ANGLE 20)
(define _CAMERA_PERSPECTIVE 21)

(define _RAY_ORIGIN 0)
(define _RAY_DIRECTION 1)
(define _RAY_INVERSE_DIRECTION 2)
(define _RAY_CLASSIFICATION 3)
(define _RAY_IBYJ 4)
(define _RAY_JBYI 5)
(define _RAY_JBYK 6)
(define _RAY_KBYJ 7)
(define _RAY_IBYK 8)
(define _RAY_KBYI 9)
(define _RAY_XY 10)
(define _RAY_XZ 11)
(define _RAY_YX 12)
(define _RAY_YZ 13)
(define _RAY_ZX 14)
(define _RAY_ZY 15)

(define _AABB_LOWER 0)
(define _AABB_UPPER 1)

(define _OCTREE_OBJECTS 0)
(define _OCTREE_SCENE_OBJECT_COUNT 1)
(define _OCTREE_BOUNDING_BOX 2)
(define _OCTREE 3)

(define _INTERSECTION_OBJECT_DISTANCE 0)
(define _INTERSECTION_OBJECT_SCENE_OBJECT 1)
(define _INTERSECTION_OBJECT_MIN_POINT 2)

(define _COLOR_LEN 0)
(define _COLOR1 1)
(define _COLOR2 2)

(define _SCENE_OBJECT_SHADER 0)
(define _SCENE_OBJECT_TAG 1)
(define _SCENE_OBJECT 2)

(define _PHONG_AMBIENT 0)
(define _PHONG_DIFFUSE 1)
(define _PHONG_SPECULAR 2)
(define _PHONG_SPECULAR_N 3)

(define _SHADER_COLOR 0)
(define _SHADER_PHONG 1)
(define _SHADER_REFLECTION 2)
(define _SHADER_NO_SHADOW 3)
(define _SHADER_DECAL_IMAGE 4)
(define _SHADER_LAT_OFF 5)
(define _SHADER_LONG_OFF 6)

(define _LIGHT_LOCATION 0)
(define _LIGHT_COLOR 1)

(define _RECURSION_NORMAL 0)
(define _RECURSION_NORMAL2 1)
(define _RECURSION_DIRECTION2 2)
(define _RECURSION_LOCATION2 3)
(define _RECURSION_INTERSECTION_POINT 4)
(define _RECURSION_INTERSECTION_OBJECT 5)
(define _RECURSION_RAY 6)
(define _RECURSION_SHADOW_RAY 7)
(define _RECURSION_REFLECTION_PIXEL_COLOR 8)

(define _SPHERE_CENTER_X 0)
(define _SPHERE_CENTER_Y 1)
(define _SPHERE_CENTER_Z 2)
(define _SPHERE_RADIUS 3)

(define _PLANE_A 0)
(define _PLANE_B 1)
(define _PLANE_C 2)
(define _PLANE_D 3)
(define _PLANE_NORMAL 4)

(define _TRIANGLE_1X 0)
(define _TRIANGLE_1Y 1)
(define _TRIANGLE_1Z 2)
(define _TRIANGLE_2X 3)
(define _TRIANGLE_2Y 4)
(define _TRIANGLE_2Z 5)
(define _TRIANGLE_3X 6)
(define _TRIANGLE_3Y 7)
(define _TRIANGLE_3Z 8)
(define _TRIANGLE_PLANE 9)

(define _SMOOTH_TRIANGLE_1X 0)
(define _SMOOTH_TRIANGLE_1Y 1)
(define _SMOOTH_TRIANGLE_1Z 2)
(define _SMOOTH_TRIANGLE_2X 3)
(define _SMOOTH_TRIANGLE_2Y 4)
(define _SMOOTH_TRIANGLE_2Z 5)
(define _SMOOTH_TRIANGLE_3X 6)
(define _SMOOTH_TRIANGLE_3Y 7)
(define _SMOOTH_TRIANGLE_3Z 8)
(define _SMOOTH_TRIANGLE_NORMAL_1X 9)
(define _SMOOTH_TRIANGLE_NORMAL_1Y 10)
(define _SMOOTH_TRIANGLE_NORMAL_1Z 11)
(define _SMOOTH_TRIANGLE_NORMAL_2X 12)
(define _SMOOTH_TRIANGLE_NORMAL_2Y 13)
(define _SMOOTH_TRIANGLE_NORMAL_2Z 14)
(define _SMOOTH_TRIANGLE_NORMAL_3X 15)
(define _SMOOTH_TRIANGLE_NORMAL_3Y 16)
(define _SMOOTH_TRIANGLE_NORMAL_3Z 17)
(define _SMOOTH_TRIANGLE_PLANE 18)

(define _CYLINDER_TOPX 0)
(define _CYLINDER_TOPY 1)
(define _CYLINDER_TOPZ 2)
(define _CYLINDER_BOTTOMX 3)
(define _CYLINDER_BOTTOMY 4)
(define _CYLINDER_BOTTOMZ 5)
(define _CYLINDER_RADIUS 6)
(define _CYLINDER_AXIS 7)
(define _CYLINDER_TOP_PLANE 8)
(define _CYLINDER_BOTTOM_PLANE 9)
(define _CYLINDER_SURFIN 10)

;;; miscellaneous constants

; scene object types

(define ot_noobject 0)
(define ot_sphere 1)
(define ot_triangle 2)
(define ot_plane 3)
(define ot_cylinder 4)
(define ot_octree 5)
(define ot_smooth_triangle 6)

; cylinder parts

(define cyl_side 0) ; object surface
(define cyl_bot 1) ; bottom end-cap surface
(define cyl_top 2) ; top end-cap surface

(define pinhole_perspective 0)
(define equirectangular_perspective 2)
(define stereographic_perspective 3)

(define octree_nodes 8)
(define max_leaf_objects 12)
(define max_levels 4)

(define mmm 0)
(define mmp 1)
(define mpm 2)
(define mpp 3)
(define pmm 4)
(define pmp 5)
(define ppm 6)
(define ppp 7)
(define poo 8)
(define moo 9)
(define opo 10)
(define omo 11)
(define oop 12)
(define oom 13)
(define omm 14)
(define omp 15)
(define opm 16)
(define opp 17)
(define mom 18)
(define mop 19)
(define pom 20)
(define pop 21)
(define mmo 22)
(define mpo 23)
(define pmo 24)
(define ppo 25)