Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSPLUGINCOMMON_RENDERMANAGER_HDREXPOSURE_H__
00020 #define __CS_CSPLUGINCOMMON_RENDERMANAGER_HDREXPOSURE_H__
00021
00022 #include "csgfx/textureformatstrings.h"
00023 #include "csplugincommon/rendermanager/hdrexposure_luminance.h"
00024 #include "csplugincommon/rendermanager/hdrhelper.h"
00025 #include "csplugincommon/rendermanager/posteffects.h"
00026 #include "csutil/ref.h"
00027
00032 class csShaderVariable;
00033 struct iDataBuffer;
00034 struct iObjectRegistry;
00035
00036 namespace CS
00037 {
00038 namespace RenderManager
00039 {
00040 namespace HDR
00041 {
00042 namespace Exposure
00043 {
00050 class CS_CRYSTALSPACE_EXPORT Linear
00051 {
00052 csRef<csShaderVariable> svHDRScale;
00053 HDRHelper* hdr;
00054
00055 csTicks lastTime;
00056
00057 float targetAvgLum;
00058 float targetAvgLumTolerance;
00059 float minExposure, maxExposure;
00060 float exposureChangeRate;
00061
00062 Luminance::Average luminance;
00063 public:
00064 Linear () : hdr (0),
00065 lastTime (0), targetAvgLum (0.8f), targetAvgLumTolerance (0.1f),
00066 minExposure (0.1f), maxExposure (10.0f), exposureChangeRate (0.5f)
00067 {}
00068
00070 void Initialize (iObjectRegistry* objReg,
00071 HDRHelper& hdr);
00072
00074 void ApplyExposure (RenderTreeBase& renderTree, iView* view);
00075
00077 void SetTargetAverageLuminance (float f) { targetAvgLum = f; }
00079 float GetTargetAverageLuminance () const { return targetAvgLum; }
00080
00082 void SetTargetAverageLuminanceTolerance (float f)
00083 { targetAvgLumTolerance = f; }
00085 float GetTargetAverageLuminanceTolerance () const
00086 { return targetAvgLumTolerance; }
00087
00089 void SetMinMaxExposure (float min, float max)
00090 { minExposure = min; maxExposure = max; }
00092 void GetMinMaxExposure (float& min, float& max) const
00093 { min = minExposure; max = maxExposure; }
00094
00096 void SetExposureChangeRate (float f) { exposureChangeRate = f; }
00098 float GetExposureChangeRate () const { return exposureChangeRate; }
00099 };
00100
00101 class CS_CRYSTALSPACE_EXPORT Reinhard_Simple
00102 {
00103 csRef<csShaderVariable> svHDRScale;
00104 csRef<csShaderVariable> svMappingParams;
00105 HDRHelper* hdr;
00106
00107 csTicks lastTime;
00108
00109 Luminance::LogAverage luminance;
00110 public:
00111 Reinhard_Simple() : lastTime (0) {}
00112
00114 void Initialize (iObjectRegistry* objReg,
00115 HDRHelper& hdr);
00116
00118 void ApplyExposure (RenderTreeBase& renderTree, iView* view);
00119 };
00120
00125 class CS_CRYSTALSPACE_EXPORT Configurable
00126 {
00127 protected:
00128 struct AbstractExposure : public CS::Memory::CustomAllocated
00129 {
00130 virtual ~AbstractExposure() {}
00131
00132 virtual void Initialize (iObjectRegistry* objReg,
00133 HDRHelper& hdr) = 0;
00134 virtual void ApplyExposure (RenderTreeBase& renderTree, iView* view) = 0;
00135 };
00136
00137 template<typename T>
00138 struct WrapperExposure : public AbstractExposure
00139 {
00140 T exposure;
00141
00142 virtual void Initialize (iObjectRegistry* objReg,
00143 HDRHelper& hdr)
00144 {
00145 exposure.Initialize (objReg, hdr);
00146 }
00147
00148 virtual void ApplyExposure (RenderTreeBase& renderTree, iView* view)
00149 {
00150 exposure.ApplyExposure (renderTree, view);
00151 }
00152 };
00153
00154 virtual AbstractExposure* CreateExposure (const char* name);
00155
00156 AbstractExposure* exposure;
00157 public:
00158 Configurable() : exposure (0) {}
00159 virtual ~Configurable();
00160
00161 void Initialize (iObjectRegistry* objReg,
00162 HDRHelper& hdr, const HDRSettings& settings);
00163 void ApplyExposure (RenderTreeBase& renderTree, iView* view);
00164 };
00165
00166 }
00167 }
00168 }
00169 }
00170
00171 #endif // __CS_CSPLUGINCOMMON_RENDERMANAGER_HDREXPOSURE_H__