Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Apply()

unsafe void Microsoft.Xna.Framework.Graphics.SamplerState.Apply ( GraphicsDevice device,
int samplerIndex )
inlinepackage

Definition at line 214 of file SamplerState.cs.

215 {
216 if (isDisposed)
217 {
218 throw new ObjectDisposedException(typeof(SamplerState).Name);
219 }
220 if (_parent != device)
221 {
222 _parent = device;
223 isBound = true;
224 uint num = *(uint*)((byte*)device.d3dCaps.t + 64);
225 switch (cachedFilter)
226 {
227 default:
228 minFilter = (_D3DTEXTUREFILTERTYPE)2;
229 magFilter = (_D3DTEXTUREFILTERTYPE)2;
230 mipFilter = (_D3DTEXTUREFILTERTYPE)2;
231 break;
232 case TextureFilter.Point:
233 minFilter = (_D3DTEXTUREFILTERTYPE)1;
234 magFilter = (_D3DTEXTUREFILTERTYPE)1;
235 mipFilter = (_D3DTEXTUREFILTERTYPE)1;
236 break;
237 case TextureFilter.Anisotropic:
238 {
239 _D3DTEXTUREFILTERTYPE d3DTEXTUREFILTERTYPE = (_D3DTEXTUREFILTERTYPE)(((num & 0x400) | 0x800) >> 10);
240 minFilter = d3DTEXTUREFILTERTYPE;
241 _D3DTEXTUREFILTERTYPE d3DTEXTUREFILTERTYPE2 = (_D3DTEXTUREFILTERTYPE)(((num & 0x4000000) | 0x8000000) >> 26);
242 magFilter = d3DTEXTUREFILTERTYPE2;
243 mipFilter = (_D3DTEXTUREFILTERTYPE)2;
244 break;
245 }
246 case TextureFilter.LinearMipPoint:
247 minFilter = (_D3DTEXTUREFILTERTYPE)2;
248 magFilter = (_D3DTEXTUREFILTERTYPE)2;
249 mipFilter = (_D3DTEXTUREFILTERTYPE)1;
250 break;
251 case TextureFilter.PointMipLinear:
252 minFilter = (_D3DTEXTUREFILTERTYPE)1;
253 magFilter = (_D3DTEXTUREFILTERTYPE)1;
254 mipFilter = (_D3DTEXTUREFILTERTYPE)2;
255 break;
256 case TextureFilter.MinLinearMagPointMipLinear:
257 minFilter = (_D3DTEXTUREFILTERTYPE)2;
258 magFilter = (_D3DTEXTUREFILTERTYPE)1;
259 mipFilter = (_D3DTEXTUREFILTERTYPE)2;
260 break;
261 case TextureFilter.MinLinearMagPointMipPoint:
262 minFilter = (_D3DTEXTUREFILTERTYPE)2;
263 magFilter = (_D3DTEXTUREFILTERTYPE)1;
264 mipFilter = (_D3DTEXTUREFILTERTYPE)1;
265 break;
266 case TextureFilter.MinPointMagLinearMipLinear:
267 minFilter = (_D3DTEXTUREFILTERTYPE)1;
268 magFilter = (_D3DTEXTUREFILTERTYPE)2;
269 mipFilter = (_D3DTEXTUREFILTERTYPE)2;
270 break;
271 case TextureFilter.MinPointMagLinearMipPoint:
272 minFilter = (_D3DTEXTUREFILTERTYPE)1;
273 magFilter = (_D3DTEXTUREFILTERTYPE)2;
274 mipFilter = (_D3DTEXTUREFILTERTYPE)1;
275 break;
276 }
277 d3dAddressU = _003CModule_003E.ConvertXnaAddressModeToDx(cachedAddressU);
278 d3dAddressV = _003CModule_003E.ConvertXnaAddressModeToDx(cachedAddressV);
279 d3dAddressW = _003CModule_003E.ConvertXnaAddressModeToDx(cachedAddressW);
280 int num2 = ((minFilter != (_D3DTEXTUREFILTERTYPE)1) ? 1 : 0);
281 filterMinFlag = (uint)num2;
282 int num3 = ((magFilter != (_D3DTEXTUREFILTERTYPE)1) ? 1 : 0);
283 filterMagFlag = (uint)num3;
284 int num4 = ((mipFilter != (_D3DTEXTUREFILTERTYPE)1) ? 1 : 0);
285 filterMipFlag = (uint)num4;
286 int num5 = ((d3dAddressU != (_D3DTEXTUREADDRESS)3) ? 1 : 0);
287 nonClampAddressUFlag = (uint)num5;
288 int num6 = ((d3dAddressV != (_D3DTEXTUREADDRESS)3) ? 1 : 0);
289 nonClampAddressVFlag = (uint)num6;
290 }
291 IntPtr pComPtr = (IntPtr)device.pComPtr;
292 Helpers.CheckDisposed(device, pComPtr);
293 int num7 = ((samplerIndex < 257) ? samplerIndex : (samplerIndex - 241));
294 EffectPass activePass = device.activePass;
295 if (activePass != null && ((uint)activePass._stateFlags & (uint)(8 << num7)) != 0)
296 {
297 activePass.EndPass();
298 device.activePass = null;
299 }
300 IDirect3DDevice9* pComPtr2 = device.pComPtr;
301 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)6, (uint)minFilter);
302 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)5, (uint)magFilter);
303 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)7, (uint)mipFilter);
304 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)1, (uint)d3dAddressU);
305 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)2, (uint)d3dAddressV);
306 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)3, (uint)d3dAddressW);
307 uint num8 = *(uint*)((byte*)device.d3dCaps.t + 108);
308 int num9 = cachedMaxAnisotropy;
309 uint num10 = (((uint)num9 >= num8) ? num8 : ((uint)num9));
310 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)10, num10);
311 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)9, (uint)cachedMaxMipLevel);
312 float num11 = cachedMipMapLevelOfDetailBias;
313 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, uint, _D3DSAMPLERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 276)))((nint)pComPtr2, (uint)samplerIndex, (_D3DSAMPLERSTATETYPE)8, *(uint*)(&num11));
314 StateTrackerDevice* pStateTracker = device.pStateTracker;
315 uint num12 = (uint)(~(1 << num7));
316 *(int*)((byte*)pStateTracker + 116) = (int)(filterMinFlag << num7) | (*(int*)((byte*)pStateTracker + 116) & (int)num12);
317 *(int*)((byte*)pStateTracker + 120) = (int)(filterMagFlag << num7) | ((int)num12 & *(int*)((byte*)pStateTracker + 120));
318 *(int*)((byte*)pStateTracker + 124) = (int)(filterMipFlag << num7) | (*(int*)((byte*)pStateTracker + 124) & (int)num12);
319 *(int*)((byte*)pStateTracker + 128) = (int)(nonClampAddressUFlag << num7) | (*(int*)((byte*)pStateTracker + 128) & (int)num12);
320 *(int*)((byte*)pStateTracker + 132) = (int)(nonClampAddressVFlag << num7) | (*(int*)((byte*)pStateTracker + 132) & (int)num12);
321 }

References Microsoft.Xna.Framework.Graphics.GraphicsResource._parent, Microsoft.Xna.Framework.Graphics.GraphicsDevice.activePass, Microsoft.Xna.Framework.Graphics.SamplerState.cachedAddressU, Microsoft.Xna.Framework.Graphics.SamplerState.cachedAddressV, Microsoft.Xna.Framework.Graphics.SamplerState.cachedAddressW, Microsoft.Xna.Framework.Graphics.SamplerState.cachedFilter, Microsoft.Xna.Framework.Graphics.SamplerState.cachedMaxAnisotropy, Microsoft.Xna.Framework.Graphics.SamplerState.cachedMaxMipLevel, Microsoft.Xna.Framework.Graphics.SamplerState.cachedMipMapLevelOfDetailBias, Microsoft.Xna.Framework.Helpers.CheckDisposed(), Microsoft.Xna.Framework.Graphics.SamplerState.d3dAddressU, Microsoft.Xna.Framework.Graphics.SamplerState.d3dAddressV, Microsoft.Xna.Framework.Graphics.SamplerState.d3dAddressW, Microsoft.Xna.Framework.Graphics.EffectPass.EndPass(), Microsoft.Xna.Framework.Graphics.SamplerState.filterMagFlag, Microsoft.Xna.Framework.Graphics.SamplerState.filterMinFlag, Microsoft.Xna.Framework.Graphics.SamplerState.filterMipFlag, Microsoft.Xna.Framework.Graphics.SamplerState.isBound, Microsoft.Xna.Framework.Graphics.GraphicsResource.isDisposed, Microsoft.Xna.Framework.Graphics.SamplerState.magFilter, Microsoft.Xna.Framework.Graphics.SamplerState.minFilter, Microsoft.Xna.Framework.Graphics.SamplerState.mipFilter, Microsoft.Xna.Framework.Graphics.GraphicsResource.Name, Microsoft.Xna.Framework.Graphics.SamplerState.nonClampAddressUFlag, Microsoft.Xna.Framework.Graphics.SamplerState.nonClampAddressVFlag, Microsoft.Xna.Framework.Graphics.GraphicsDevice.pComPtr, and Microsoft.Xna.Framework.Graphics.GraphicsDevice.pStateTracker.

Referenced by Microsoft.Xna.Framework.Graphics.SamplerStateCollection.InitializeDeviceState().