Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __SP_BLOOM_EFFECT_H__
00009 #define __SP_BLOOM_EFFECT_H__
00010
00011
00012 #include "Base/spStandard.hpp"
00013
00014 #if defined(SP_COMPILE_WITH_POSTPROCESSING)
00015
00016
00017 #include "Base/spDimensionSize2D.hpp"
00018 #include "RenderSystem/PostProcessing/spPostProcessingEffect.hpp"
00019
00020
00021 namespace sp
00022 {
00023 namespace video
00024 {
00025
00026
00027
00028
00029 class ShaderClass;
00030
00032 class SP_EXPORT BloomEffect : public PostProcessingEffect
00033 {
00034
00035 public:
00036
00037
00038
00040 enum ERenderTargets
00041 {
00042 RENDERTARGET_INPUT_COLOR,
00043 RENDERTARGET_INPUT_GLOSS,
00044 RENDERTARGET_GLOSS_1ST_PASS,
00045 RENDERTARGET_GLOSS_2ND_PASS,
00046
00047 RENDERTARGET_COUNT
00048 };
00049
00050
00051
00052 BloomEffect();
00053 ~BloomEffect();
00054
00055
00056
00057 bool createResources(const dim::size2di &Resolution);
00058 void deleteResources();
00059
00080 void bindRenderTargets();
00081
00082 void drawEffect(Texture* RenderTarget = 0);
00083
00090 void setFactor(f32 GaussianMultiplier);
00091
00092
00093
00095 inline dim::size2di getResolution() const
00096 {
00097 return Resolution_;
00098 }
00099
00105 inline Texture* getTexture(const ERenderTargets Type)
00106 {
00107 return Type < RENDERTARGET_COUNT ? RenderTargets_[Type] : 0;
00108 }
00109
00111 inline f32 getFactor() const
00112 {
00113 return GaussianMultiplier_;
00114 }
00115
00117 inline bool active() const
00118 {
00119 return getFactor() > 0.0f;
00120 }
00121
00122 private:
00123
00124
00125
00126 static const s32 FILTER_SIZE = 9;
00127
00128
00129
00130 bool createRenderTargets();
00131 bool compileShaders();
00132
00133 void drawFullscreenImage(const ERenderTargets Type);
00134 void drawFullscreenImageStreched(const ERenderTargets Type);
00135
00136 void computeWeights();
00137 void computeOffsets();
00138
00139
00140
00141 dim::size2di Resolution_;
00142
00143 Texture* RenderTargets_[RENDERTARGET_COUNT];
00144
00145 ShaderClass* BloomShaderHRP_;
00146 ShaderClass* BloomShaderVRP_;
00147
00148 f32 BlurOffsets_[FILTER_SIZE*2];
00149 f32 BlurWeights_[FILTER_SIZE];
00150
00151 f32 GaussianMultiplier_;
00152
00153 };
00154
00155
00156 }
00157
00158 }
00159
00160
00161 #endif
00162
00163 #endif
00164
00165
00166
00167