00001 #pragma once
00002
00003 #include "shader_Postprocess.h"
00004
00005 class Shader_HDR : public Shader_Postprocess
00006 {
00007 private:
00008 ID3D10ShaderResourceView *sceneTexture;
00009
00010 ID3D10EffectTechnique *sourceToLumTechnique;
00011 ID3D10EffectTechnique *downscaleLumTechnique;
00012 ID3D10EffectTechnique *brightPassTechnique;
00013 ID3D10EffectTechnique *blurTechnique;
00014 ID3D10EffectTechnique *finalTechnique;
00015 ID3D10EffectTechnique *adaptiveLumTechnique;
00016
00017 Vec2_int renderTargetSize;
00018
00019
00020 static const int NUM_TONEMAP_TEXTURES = 5;
00021 static const int TONEMAP_RESIZE = 3;
00022 static const int NUM_BLOOM_TEXTURES = 2;
00023 static const int NUM_ADAPTIVE_LUM_TEXTURES = 2;
00024 static const int BLOOM_SCALE = 4;
00025 ID3D10ShaderResourceView* toneMapSRV[NUM_TONEMAP_TEXTURES];
00026 ID3D10RenderTargetView* toneMapRTV[NUM_TONEMAP_TEXTURES];
00027 ID3D10ShaderResourceView* bloomSRV[NUM_BLOOM_TEXTURES];
00028 ID3D10RenderTargetView* bloomRTV[NUM_BLOOM_TEXTURES];
00029 ID3D10ShaderResourceView* adaptiveLumSRV[NUM_ADAPTIVE_LUM_TEXTURES];
00030 ID3D10RenderTargetView* adaptiveLumRTV[NUM_ADAPTIVE_LUM_TEXTURES];
00031 ID3D10ShaderResourceView* brightSRV;
00032 ID3D10RenderTargetView* brightRTV;
00033
00034 struct
00035 {
00036 ID3D10EffectShaderResourceVariable *luminanceTexture;
00037 ID3D10EffectShaderResourceVariable *bloomTexture;
00038 } variables;
00039
00040 public:
00041 Shader_HDR(ID3D10Device *device);
00042
00043 bool compile(const D3D10_SHADER_MACRO *macros, DWORD shaderFlags);
00044 bool createRenderTargetViews(ID3D10RenderTargetView *backbuffer, const DXGI_SWAP_CHAIN_DESC &swapChainDesc, int multiSampleCount);
00045 void releaseRenderTargetViews();
00046 void apply();
00047 void setInputTexture(ID3D10ShaderResourceView *texture);
00048 };