-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathEffects.h
102 lines (84 loc) · 3.59 KB
/
Effects.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//***************************************************************************************
// Effects.h by Frank Luna (C) 2011 All Rights Reserved.
//
// Defines lightweight effect wrappers to group an effect and its variables.
// Also defines a static Effects class from which we can access all of our effects.
//***************************************************************************************
#ifndef EFFECTS_H
#define EFFECTS_H
#include "d3dUtil.h"
#pragma region Effect
class Effect
{
public:
Effect(ID3D11Device* device, const std::wstring& filename);
virtual ~Effect();
private:
Effect(const Effect& rhs);
Effect& operator=(const Effect& rhs);
protected:
ID3DX11Effect* mFX;
};
#pragma endregion
#pragma region BasicEffect
class BasicEffect : public Effect
{
public:
BasicEffect(ID3D11Device* device, const std::wstring& filename);
~BasicEffect();
void SetWorldViewProj(CXMMATRIX M) { WorldViewProj->SetMatrix(reinterpret_cast<const float*>(&M)); }
void SetWorld(CXMMATRIX M) { World->SetMatrix(reinterpret_cast<const float*>(&M)); }
void SetWorldInvTranspose(CXMMATRIX M) { WorldInvTranspose->SetMatrix(reinterpret_cast<const float*>(&M)); }
void SetTexTransform(CXMMATRIX M) { TexTransform->SetMatrix(reinterpret_cast<const float*>(&M)); }
void SetEyePosW(const XMFLOAT3& v) { EyePosW->SetRawValue(&v, 0, sizeof(XMFLOAT3)); }
void SetFogColor(const FXMVECTOR v) { FogColor->SetFloatVector(reinterpret_cast<const float*>(&v)); }
void SetFogStart(float f) { FogStart->SetFloat(f); }
void SetFogRange(float f) { FogRange->SetFloat(f); }
void SetDirLights(const DirectionalLight* lights) { DirLights->SetRawValue(lights, 0, 3*sizeof(DirectionalLight)); }
void SetMaterial(const Material& mat) { Mat->SetRawValue(&mat, 0, sizeof(Material)); }
void SetDiffuseMap(ID3D11ShaderResourceView* tex) { DiffuseMap->SetResource(tex); }
ID3DX11EffectTechnique* Light1Tech;
ID3DX11EffectTechnique* Light2Tech;
ID3DX11EffectTechnique* Light3Tech;
ID3DX11EffectTechnique* Light0TexTech;
ID3DX11EffectTechnique* Light1TexTech;
ID3DX11EffectTechnique* Light2TexTech;
ID3DX11EffectTechnique* Light3TexTech;
ID3DX11EffectTechnique* Light0TexAlphaClipTech;
ID3DX11EffectTechnique* Light1TexAlphaClipTech;
ID3DX11EffectTechnique* Light2TexAlphaClipTech;
ID3DX11EffectTechnique* Light3TexAlphaClipTech;
ID3DX11EffectTechnique* Light1FogTech;
ID3DX11EffectTechnique* Light2FogTech;
ID3DX11EffectTechnique* Light3FogTech;
ID3DX11EffectTechnique* Light0TexFogTech;
ID3DX11EffectTechnique* Light1TexFogTech;
ID3DX11EffectTechnique* Light2TexFogTech;
ID3DX11EffectTechnique* Light3TexFogTech;
ID3DX11EffectTechnique* Light0TexAlphaClipFogTech;
ID3DX11EffectTechnique* Light1TexAlphaClipFogTech;
ID3DX11EffectTechnique* Light2TexAlphaClipFogTech;
ID3DX11EffectTechnique* Light3TexAlphaClipFogTech;
ID3DX11EffectMatrixVariable* WorldViewProj;
ID3DX11EffectMatrixVariable* World;
ID3DX11EffectMatrixVariable* WorldInvTranspose;
ID3DX11EffectMatrixVariable* TexTransform;
ID3DX11EffectVectorVariable* EyePosW;
ID3DX11EffectVectorVariable* FogColor;
ID3DX11EffectScalarVariable* FogStart;
ID3DX11EffectScalarVariable* FogRange;
ID3DX11EffectVariable* DirLights;
ID3DX11EffectVariable* Mat;
ID3DX11EffectShaderResourceVariable* DiffuseMap;
};
#pragma endregion
#pragma region Effects
class Effects
{
public:
static void InitAll(ID3D11Device* device);
static void DestroyAll();
static BasicEffect* BasicFX;
};
#pragma endregion
#endif // EFFECTS_H