erebus

annotate liberebus/src/erebus_impl.h @ 31:53a98c148bf8

- introduced SurfaceGeometry to carry all the geometric information input to BRDF sampling and evaluation functions. - made Reflectance keep an (optional) pointer to its material - simplified PhongRefl::sample_dir, with the help of SurfaceGeometry - worked around microsoft's broken std::thread implementation's deadlock on join
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 07 Jun 2014 09:14:17 +0300
parents c8a6fb04fefa
children 9d6368850fe1
rev   line source
nuclear@2 1 #ifndef EREBUS_IMPL_H_
nuclear@2 2 #define EREBUS_IMPL_H_
nuclear@2 3
nuclear@17 4 #include <vector>
nuclear@17 5 #include <vmath/vmath.h>
nuclear@17 6 #include "erebus.h"
nuclear@17 7 #include "image.h"
nuclear@17 8 #include "scene.h"
nuclear@24 9 #include "threadpool.h"
nuclear@17 10
nuclear@17 11 struct Option {
nuclear@17 12 enum Type { INT, FLOAT, VEC } type;
nuclear@17 13 int ival;
nuclear@17 14 float fval;
nuclear@17 15 Vector4 vval;
nuclear@17 16 };
nuclear@17 17
nuclear@26 18 struct Block {
nuclear@17 19 int x, y, width, height;
nuclear@26 20 int sample;
nuclear@26 21 int frame;
nuclear@17 22 };
nuclear@17 23
nuclear@17 24 struct erebus {
nuclear@17 25 Scene *scn;
nuclear@17 26
nuclear@17 27 Image<float> fbimg;
nuclear@17 28 Image<float> accum; // sample accumulator per pixel
nuclear@17 29 Option options[ERB_NUM_OPTIONS];
nuclear@17 30
nuclear@31 31 ThreadPool *tpool;
nuclear@24 32
nuclear@17 33 // render state
nuclear@17 34 float inv_gamma;
nuclear@17 35 long cur_time;
nuclear@17 36 int cur_sample;
nuclear@26 37 int cur_frame;
nuclear@17 38
nuclear@17 39 // interactive input
nuclear@17 40 std::vector<bool> keystate;
nuclear@17 41 std::vector<bool> bnstate;
nuclear@17 42 int mouse_pos[2];
nuclear@17 43
nuclear@17 44 // debugging stuff
nuclear@17 45 int dbg_nodesel;
nuclear@17 46 };
nuclear@17 47
nuclear@2 48 float randf(float low = 0.0f, float high = 1.0f);
nuclear@2 49
nuclear@2 50 #endif // EREBUS_IMPL_H_