rev |
line source |
nuclear@3
|
1 #ifndef RT_H_
|
nuclear@3
|
2 #define RT_H_
|
nuclear@3
|
3
|
nuclear@55
|
4 #include <stdio.h>
|
nuclear@22
|
5 #include "scene.h"
|
nuclear@13
|
6
|
nuclear@47
|
7 enum {
|
nuclear@47
|
8 ROPT_ITER,
|
nuclear@47
|
9 ROPT_SHAD,
|
nuclear@47
|
10 ROPT_REFL,
|
nuclear@47
|
11
|
nuclear@47
|
12 NUM_RENDER_OPTIONS
|
nuclear@47
|
13 };
|
nuclear@47
|
14
|
nuclear@54
|
15 struct RendInfo {
|
nuclear@54
|
16 float ambient[4];
|
nuclear@54
|
17 int xsz, ysz;
|
nuclear@54
|
18 int num_faces, num_lights;
|
nuclear@54
|
19 int max_iter;
|
nuclear@54
|
20 int cast_shadows;
|
nuclear@54
|
21 };
|
nuclear@54
|
22
|
nuclear@54
|
23 struct Ray {
|
nuclear@54
|
24 float origin[4], dir[4];
|
nuclear@54
|
25 };
|
nuclear@54
|
26
|
nuclear@55
|
27 struct RenderStats {
|
nuclear@55
|
28 unsigned long render_time, tex_update_time;
|
nuclear@55
|
29
|
nuclear@55
|
30 int aabb_tests, triangle_tests;
|
nuclear@55
|
31 int min_aabb_tests, max_aabb_tests;
|
nuclear@55
|
32 float avg_aabb_tests;
|
nuclear@55
|
33 int min_triangle_tests, max_triangle_tests;
|
nuclear@55
|
34 float avg_triangle_tests;
|
nuclear@55
|
35
|
nuclear@55
|
36 int rays_cast, rays_per_sec;
|
nuclear@55
|
37 int prim_rays, refl_rays, shadow_rays;
|
nuclear@55
|
38 int brdf_evals;
|
nuclear@55
|
39 };
|
nuclear@55
|
40
|
nuclear@54
|
41
|
nuclear@39
|
42 bool init_renderer(int xsz, int ysz, Scene *scn, unsigned int tex);
|
nuclear@3
|
43 void destroy_renderer();
|
nuclear@3
|
44 bool render();
|
nuclear@12
|
45 void set_xform(float *matrix, float *invtrans);
|
nuclear@12
|
46
|
nuclear@54
|
47 const RendInfo *get_render_info();
|
nuclear@55
|
48 const RenderStats *get_render_stats();
|
nuclear@55
|
49 void print_render_stats(FILE *out = stdout);
|
nuclear@54
|
50
|
nuclear@47
|
51 void set_render_option(int opt, bool val);
|
nuclear@47
|
52 void set_render_option(int opt, int val);
|
nuclear@47
|
53 void set_render_option(int opt, float val);
|
nuclear@47
|
54
|
nuclear@47
|
55 bool get_render_option_bool(int opt);
|
nuclear@47
|
56 int get_render_option_int(int opt);
|
nuclear@47
|
57 float get_render_option_float(int opt);
|
nuclear@47
|
58
|
nuclear@55
|
59 // regular C++ raytracing using the KD-tree (single-threaded, keeps extensive debug stats)
|
nuclear@54
|
60 bool init_dbg_renderer(int xsz, int ysz, Scene *scn, unsigned int texid);
|
nuclear@54
|
61 void destroy_dbg_renderer();
|
nuclear@54
|
62 void dbg_set_primary_rays(const Ray *rays);
|
nuclear@54
|
63 void dbg_render(const float *xform, const float *invtrans_xform, int num_threads = -1);
|
nuclear@54
|
64
|
nuclear@55
|
65
|
nuclear@54
|
66 // visualize the scene using OpenGL
|
nuclear@27
|
67 void dbg_render_gl(Scene *scn, bool show_tree = false, bool show_obj = true);
|
nuclear@3
|
68
|
nuclear@3
|
69 #endif /* RT_H_ */
|