source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/DeferredRenderer.h @ 3128

Revision 3128, 3.5 KB checked in by mattausch, 16 years ago (diff)
RevLine 
[2952]1#ifndef _DEFERREDRENDERER_H__
2#define _DEFERREDRENDERER_H__
[2858]3
4#include "common.h"
[3085]5#include "Matrix4x4.h"
6#include "Vector3.h"
[2896]7
[2858]8namespace CHCDemoEngine
9{
10
11class FrameBufferObject;
[2860]12class Vector3;
[3062]13class PerspectiveCamera;
[2861]14class Matrix4x4;
[2896]15class ShadowMap;
[2952]16class DirectionalLight;
[2858]17
[2896]18
[3019]19
20
[2859]21/** This class implements a deferred shading algorithm that takes
22        a frame buffer object as input and outputs an image in the given size
[2858]23*/
[2896]24class DeferredRenderer
[2858]25{
26public:
[2874]27        /** Constructor for a deferred shader taking the requested output image size,
[3068]28                the current camera;
[2858]29        */
[3068]30        DeferredRenderer(int w, int h, PerspectiveCamera *cam);
[2874]31        /** The algorithm renders the scene given an fbo consists of 1 color buffer,
[2861]32                1 position buffer, and 1 normal buffer.
33                We also need the  projection view matrix of the last frame for reprojection, and
34                a smoothing factor for temporal coherence
[2858]35        */
[3021]36
37        ~DeferredRenderer();
38
[2900]39        void Render(FrameBufferObject *fbo,
[2901]40                                float tempCohFactor,
[2952]41                                DirectionalLight *light,
[2991]42                                bool useToneMapping,
43                                ShadowMap *shadowMap = NULL
44                                );
[2859]45
[3021]46       
[2875]47        void SetUseTemporalCoherence(bool temporal);
[2874]48
[2930]49        enum SAMPLING_METHOD {SAMPLING_POISSON, SAMPLING_QUADRATIC, SAMPLING_DEFAULT};
[2896]50        enum SHADING_METHOD {DEFAULT, SSAO, GI};
[3068]51        /** Set the samplig method for the indirect illumination
52        */
[2896]53        void SetSamplingMethod(SAMPLING_METHOD s);
[3068]54        /** Set the shading method (SSAO, SSAO + color bleeding
55        */
[2897]56        void SetShadingMethod(SHADING_METHOD s);
[3021]57
[3068]58        // hack: store the color buffer idx for the currently used flip flop-MRT here
[3038]59        // TODO matt: make this less hacky
[2976]60        static int colorBufferIdx;
[2887]61
[3111]62        Matrix4x4 invTrafo;
[3038]63
[2859]64protected:
65
[3085]66        void ComputeSsao(FrameBufferObject *fbo, float tempCohFactor);
[2859]67
[3085]68        void ComputeGlobIllum(FrameBufferObject *fbo, float tempCohFactor);
[2873]69
[2952]70        void FirstPass(FrameBufferObject *fbo, DirectionalLight *light);
[2868]71
[2952]72        void FirstPassShadow(FrameBufferObject *fbo, DirectionalLight *light, ShadowMap *shadowMap);
[2896]73
[3038]74        void ComputeToneParameters(FrameBufferObject *fbo,
75                                                           DirectionalLight *light,
76                                                           float &imageKey,
77                                                           float &whiteLum,
78                                                           float &middleGrey);
[2972]79
[3007]80        void ToneMap(FrameBufferObject *fbo, float imageKey, float whiteLum, float middleGrey);
[2972]81
[2973]82
[2880]83        void CombineSsao(FrameBufferObject *fbo);
84        void CombineIllum(FrameBufferObject *fbo);
[3128]85        void SmoothSsao(FrameBufferObject *fbo);
[2880]86
[2970]87        void AntiAliasing(FrameBufferObject *fbo, DirectionalLight *light);
[3006]88        /** Downsample buffer of fbo to buffer of downSampleFbo. The downSampleFbo must have half the
89                resolution of fbo.
90        */
91        void DownSample(FrameBufferObject *fbo, int bufferIdx,
92                                        FrameBufferObject *downSampleFbo, int downSampleBufferIdx);
[2972]93
[3026]94        void DrawQuad(ShaderProgram *p);
[2972]95
[3038]96        /** Initialises the deferred shader and loads the required shaders:
97                This function has to be called only once.
98        */
99        void InitCg();
[3085]100        /** Is called once per render call and sets the most important parameters.
101        */
102        void InitFrame();
[3026]103
104
[2859]105        ////////////
106
107        int mWidth;
108        int mHeight;
109
[3062]110        PerspectiveCamera *mCamera;
[2860]111
[2875]112        bool mUseTemporalCoherence;
[2887]113
[2896]114        int mSamplingMethod;
115
116        int mShadingMethod;
117
118        bool mRegenerateSamples;
[2976]119
[3019]120        int mIllumFboIndex;
121        // the fbo for indirect illumination (ssao + color bleeding)
122        FrameBufferObject *mIllumFbo;
[2994]123
124        FrameBufferObject *mDownSampleFbo;
[3019]125
126        FBOContainer mFBOs;
127
128        static ShaderContainer sShaders;
[3085]129
130        Matrix4x4 mProjViewMatrix;
131        Matrix4x4 mOldProjViewMatrix;
132
133        Vector3 mCornersView[4];
134        Vector3 mOldCornersView[4];
135
136        Vector3 mEyePos;
137        Vector3 mOldEyePos;
[2858]138};
139
[3038]140
[2858]141} // namespace
[2886]142
[2859]143#endif // _SsaoShader_H__
Note: See TracBrowser for help on using the repository browser.