Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
AlphaTestEffect.cs
Go to the documentation of this file.
2
4{
6
8
10
12
14
16
18
19 private bool fogEnabled;
20
21 private bool vertexColorEnabled;
22
24
26
28
30
32
33 private float alpha = 1f;
34
35 private float fogStart;
36
37 private float fogEnd = 1f;
38
40
41 private int referenceAlpha;
42
43 private bool isEqNe;
44
46
48 {
49 get
50 {
51 return world;
52 }
53 set
54 {
55 world = value;
56 dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;
57 }
58 }
59
60 public Matrix View
61 {
62 get
63 {
64 return view;
65 }
66 set
67 {
68 view = value;
69 dirtyFlags |= EffectDirtyFlags.WorldViewProj | EffectDirtyFlags.Fog;
70 }
71 }
72
74 {
75 get
76 {
77 return projection;
78 }
79 set
80 {
81 projection = value;
82 dirtyFlags |= EffectDirtyFlags.WorldViewProj;
83 }
84 }
85
87 {
88 get
89 {
90 return diffuseColor;
91 }
92 set
93 {
94 diffuseColor = value;
95 dirtyFlags |= EffectDirtyFlags.MaterialColor;
96 }
97 }
98
99 public float Alpha
100 {
101 get
102 {
103 return alpha;
104 }
105 set
106 {
107 alpha = value;
108 dirtyFlags |= EffectDirtyFlags.MaterialColor;
109 }
110 }
111
112 public bool FogEnabled
113 {
114 get
115 {
116 return fogEnabled;
117 }
118 set
119 {
120 if (fogEnabled != value)
121 {
122 fogEnabled = value;
123 dirtyFlags |= EffectDirtyFlags.FogEnable | EffectDirtyFlags.ShaderIndex;
124 }
125 }
126 }
127
128 public float FogStart
129 {
130 get
131 {
132 return fogStart;
133 }
134 set
135 {
136 fogStart = value;
138 }
139 }
140
141 public float FogEnd
142 {
143 get
144 {
145 return fogEnd;
146 }
147 set
148 {
149 fogEnd = value;
151 }
152 }
153
155 {
156 get
157 {
159 }
160 set
161 {
162 fogColorParam.SetValue(value);
163 }
164 }
165
167 {
168 get
169 {
171 }
172 set
173 {
174 textureParam.SetValue(value);
175 }
176 }
177
179 {
180 get
181 {
182 return vertexColorEnabled;
183 }
184 set
185 {
186 if (vertexColorEnabled != value)
187 {
188 vertexColorEnabled = value;
189 dirtyFlags |= EffectDirtyFlags.ShaderIndex;
190 }
191 }
192 }
193
195 {
196 get
197 {
198 return alphaFunction;
199 }
200 set
201 {
202 alphaFunction = value;
203 dirtyFlags |= EffectDirtyFlags.AlphaTest;
204 }
205 }
206
207 public int ReferenceAlpha
208 {
209 get
210 {
211 return referenceAlpha;
212 }
213 set
214 {
215 referenceAlpha = value;
216 dirtyFlags |= EffectDirtyFlags.AlphaTest;
217 }
218 }
219
221 : base(device, AlphaTestEffectCode.Code)
222 {
224 }
225
226 protected AlphaTestEffect(AlphaTestEffect cloneSource)
227 : base(cloneSource)
228 {
230 fogEnabled = cloneSource.fogEnabled;
232 world = cloneSource.world;
233 view = cloneSource.view;
234 projection = cloneSource.projection;
235 diffuseColor = cloneSource.diffuseColor;
236 alpha = cloneSource.alpha;
237 fogStart = cloneSource.fogStart;
238 fogEnd = cloneSource.fogEnd;
239 alphaFunction = cloneSource.alphaFunction;
240 referenceAlpha = cloneSource.referenceAlpha;
241 }
242
243 public override Effect Clone()
244 {
245 return new AlphaTestEffect(this);
246 }
247
249 {
250 textureParam = base.Parameters["Texture"];
251 diffuseColorParam = base.Parameters["DiffuseColor"];
252 alphaTestParam = base.Parameters["AlphaTest"];
253 fogColorParam = base.Parameters["FogColor"];
254 fogVectorParam = base.Parameters["FogVector"];
255 worldViewProjParam = base.Parameters["WorldViewProj"];
256 shaderIndexParam = base.Parameters["ShaderIndex"];
257 }
258
259 internal override bool WantParameter(EffectParameter parameter)
260 {
261 if (parameter.Name != "VSIndices")
262 {
263 return parameter.Name != "PSIndices";
264 }
265 return false;
266 }
267
268 protected internal override void OnApply()
269 {
271 if ((dirtyFlags & EffectDirtyFlags.MaterialColor) != 0)
272 {
274 dirtyFlags &= ~EffectDirtyFlags.MaterialColor;
275 }
276 if ((dirtyFlags & EffectDirtyFlags.AlphaTest) != 0)
277 {
278 Vector4 value = default(Vector4);
279 bool flag = false;
280 float num = (float)referenceAlpha / 255f;
281 switch (alphaFunction)
282 {
283 case CompareFunction.Less:
284 value.X = num - 0.0019607844f;
285 value.Z = 1f;
286 value.W = -1f;
287 break;
288 case CompareFunction.LessEqual:
289 value.X = num + 0.0019607844f;
290 value.Z = 1f;
291 value.W = -1f;
292 break;
293 case CompareFunction.GreaterEqual:
294 value.X = num - 0.0019607844f;
295 value.Z = -1f;
296 value.W = 1f;
297 break;
298 case CompareFunction.Greater:
299 value.X = num + 0.0019607844f;
300 value.Z = -1f;
301 value.W = 1f;
302 break;
303 case CompareFunction.Equal:
304 value.X = num;
305 value.Y = 0.0019607844f;
306 value.Z = 1f;
307 value.W = -1f;
308 flag = true;
309 break;
310 case CompareFunction.NotEqual:
311 value.X = num;
312 value.Y = 0.0019607844f;
313 value.Z = -1f;
314 value.W = 1f;
315 flag = true;
316 break;
317 case CompareFunction.Never:
318 value.Z = -1f;
319 value.W = -1f;
320 break;
321 default:
322 value.Z = 1f;
323 value.W = 1f;
324 break;
325 }
327 dirtyFlags &= ~EffectDirtyFlags.AlphaTest;
328 if (isEqNe != flag)
329 {
330 isEqNe = flag;
331 dirtyFlags |= EffectDirtyFlags.ShaderIndex;
332 }
333 }
334 if ((dirtyFlags & EffectDirtyFlags.ShaderIndex) != 0)
335 {
336 int num2 = 0;
337 if (!fogEnabled)
338 {
339 num2++;
340 }
342 {
343 num2 += 2;
344 }
345 if (isEqNe)
346 {
347 num2 += 4;
348 }
350 dirtyFlags &= ~EffectDirtyFlags.ShaderIndex;
351 }
352 }
353}
override bool WantParameter(EffectParameter parameter)
static EffectDirtyFlags SetWorldViewProjAndFog(EffectDirtyFlags dirtyFlags, ref Matrix world, ref Matrix view, ref Matrix projection, ref Matrix worldView, bool fogEnabled, float fogStart, float fogEnd, EffectParameter worldViewProjParam, EffectParameter fogVectorParam)