nuclear@3: #ifndef RT_H_ nuclear@3: #define RT_H_ nuclear@3: nuclear@22: #include "scene.h" nuclear@13: nuclear@47: enum { nuclear@47: ROPT_ITER, nuclear@47: ROPT_SHAD, nuclear@47: ROPT_REFL, nuclear@47: nuclear@47: NUM_RENDER_OPTIONS nuclear@47: }; nuclear@47: nuclear@54: struct RendInfo { nuclear@54: float ambient[4]; nuclear@54: int xsz, ysz; nuclear@54: int num_faces, num_lights; nuclear@54: int max_iter; nuclear@54: int cast_shadows; nuclear@54: }; nuclear@54: nuclear@54: struct Ray { nuclear@54: float origin[4], dir[4]; nuclear@54: }; nuclear@54: nuclear@54: nuclear@39: bool init_renderer(int xsz, int ysz, Scene *scn, unsigned int tex); nuclear@3: void destroy_renderer(); nuclear@3: bool render(); nuclear@12: void set_xform(float *matrix, float *invtrans); nuclear@12: nuclear@54: const RendInfo *get_render_info(); nuclear@54: nuclear@47: void set_render_option(int opt, bool val); nuclear@47: void set_render_option(int opt, int val); nuclear@47: void set_render_option(int opt, float val); nuclear@47: nuclear@47: bool get_render_option_bool(int opt); nuclear@47: int get_render_option_int(int opt); nuclear@47: float get_render_option_float(int opt); nuclear@47: nuclear@54: // raytrace in the CPU nuclear@54: bool init_dbg_renderer(int xsz, int ysz, Scene *scn, unsigned int texid); nuclear@54: void destroy_dbg_renderer(); nuclear@54: void dbg_set_primary_rays(const Ray *rays); nuclear@54: void dbg_render(const float *xform, const float *invtrans_xform, int num_threads = -1); nuclear@54: nuclear@54: // visualize the scene using OpenGL nuclear@27: void dbg_render_gl(Scene *scn, bool show_tree = false, bool show_obj = true); nuclear@3: nuclear@3: #endif /* RT_H_ */