00001
00002
00003 #ifndef __RAY_TRACING_ARCHITECTURE_H
00004 #define __RAY_TRACING_ARCHITECTURE_H
00005
00006 #include <gra/arch/Architecture.h>
00007 #include <gra/render/Render.h>
00008 #include <gra/render/RTRender.h>
00009 #include <gra/shader/Shader.h>
00010 #include <gra/shader/RTShader.h>
00011 #include <esg/Intersector.h>
00012
00013 using namespace esg;
00014
00015 namespace gra {
00016
00021 class GRA_EXPORT RayTrArch : public Architecture {
00022 public:
00023 struct Params : public Architecture::Params {
00024 Intersector * intersector;
00025 Color3f background;
00026 RTRender::PixelRend pixelRendering;
00027 unsigned raysPerPixel;
00028 RTRender::FBWriteMode fbWriteMode;
00029 unsigned fbWriteElements;
00030 unsigned cacheDepth;
00031 unsigned shadowRays;
00032 unsigned maxRecDepth;
00033 float minRecWeight;
00034
00035 Params()
00036 : intersector(NULL),
00037 background(0.0, 0.0, 0.0),
00038 pixelRendering(RTRender::CENTROID),
00039 raysPerPixel(1),
00040 fbWriteMode(RTRender::PER_LINE),
00041 fbWriteElements(1),
00042 cacheDepth(1),
00043 shadowRays(1),
00044 maxRecDepth(3),
00045 minRecWeight(0.001f) {}
00046 };
00047
00048 protected:
00049 Intersector * _pIntersector;
00050 RayTracing * _pRTReflection;
00051 Color3f _background;
00052 RTRender::PixelRend _pixelRendering;
00053 unsigned _raysPerPixel;
00054 RTRender::FBWriteMode _fbWriteMode;
00055 unsigned _fbWriteElements;
00056
00057 public:
00063 RayTrArch (RayTrArch::Params& params);
00064
00068 virtual ~RayTrArch ();
00069
00073 virtual Render* createRender (void);
00074
00078 virtual Shader* createShader (void);
00079 };
00080
00081 }
00082
00083 #endif // __RAY_TRACING_ARCHITECTURE