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

◆ Apply()

unsafe void Microsoft.Xna.Framework.Graphics.BlendState.Apply ( GraphicsDevice device)
inlinepackage

Definition at line 294 of file BlendState.cs.

295 {
296 if (isDisposed)
297 {
298 throw new ObjectDisposedException(typeof(BlendState).Name);
299 }
300 if (_parent != device)
301 {
302 ProfileCapabilities profileCapabilities = device._profileCapabilities;
303 if (!profileCapabilities.SeparateAlphaBlend)
304 {
305 Blend alphaBlend = cachedAlphaSourceBlend;
306 Blend colorBlend = cachedColorSourceBlend;
307 if (GraphicsHelpers.IsSeparateBlend(colorBlend, alphaBlend))
308 {
309 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileNoSeparateAlphaBlend, "ColorSourceBlend", "AlphaSourceBlend");
310 }
311 Blend alphaBlend2 = cachedAlphaDestinationBlend;
312 Blend colorBlend2 = cachedColorDestinationBlend;
313 if (GraphicsHelpers.IsSeparateBlend(colorBlend2, alphaBlend2))
314 {
315 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileNoSeparateAlphaBlend, "ColorDestinationBlend", "AlphaDestinationBlend");
316 }
318 {
319 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileNoSeparateAlphaBlend, "ColorBlendFunction", "AlphaBlendFunction");
320 }
321 }
322 if (!profileCapabilities.DestBlendSrcAlphaSat)
323 {
324 if (cachedColorDestinationBlend == Blend.SourceAlphaSaturation)
325 {
326 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileFeatureNotSupported, "ColorDestinationBlend = Blend.SourceAlphaSaturation");
327 }
328 if (cachedAlphaDestinationBlend == Blend.SourceAlphaSaturation)
329 {
330 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileFeatureNotSupported, "AlphaDestinationBlend = Blend.SourceAlphaSaturation");
331 }
332 }
333 if (!profileCapabilities.MinMaxSrcDestBlend)
334 {
335 BlendFunction blendFunction = cachedColorBlendFunction;
336 if ((blendFunction == BlendFunction.Min || blendFunction == BlendFunction.Max) && (cachedColorSourceBlend != 0 || cachedColorDestinationBlend != 0))
337 {
338 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileNoMinMaxSrcDestBlend, "Color");
339 }
340 BlendFunction blendFunction2 = cachedAlphaBlendFunction;
341 if ((blendFunction2 == BlendFunction.Min || blendFunction2 == BlendFunction.Max) && (cachedAlphaSourceBlend != 0 || cachedAlphaDestinationBlend != 0))
342 {
343 profileCapabilities.ThrowNotSupportedException(FrameworkResources.ProfileNoMinMaxSrcDestBlend, "Alpha");
344 }
345 }
346 _parent = device;
347 isBound = true;
348 Blend blend = cachedColorSourceBlend;
349 int num = ((blend != 0 || cachedColorDestinationBlend != Blend.Zero || cachedColorBlendFunction != 0 || cachedAlphaSourceBlend != 0 || cachedAlphaDestinationBlend != Blend.Zero || cachedAlphaBlendFunction != 0) ? 1 : 0);
350 blendEnable = (byte)num != 0;
351 int num2 = ((GraphicsHelpers.IsSeparateBlend(blend, cachedAlphaSourceBlend) || GraphicsHelpers.IsSeparateBlend(cachedColorDestinationBlend, cachedAlphaDestinationBlend) || cachedColorBlendFunction != cachedAlphaBlendFunction) ? 1 : 0);
352 separateAlphaBlend = (byte)num2 != 0;
353 d3dColorSourceBlend = _003CModule_003E.ConvertXnaBlendToDx(cachedColorSourceBlend);
354 d3dColorDestinationBlend = _003CModule_003E.ConvertXnaBlendToDx(cachedColorDestinationBlend);
355 d3dColorBlendFunction = _003CModule_003E.ConvertXnaBlendOpToDx(cachedColorBlendFunction);
356 d3dAlphaSourceBlend = _003CModule_003E.ConvertXnaBlendToDx(GraphicsHelpers.AdjustAlphaBlend(cachedAlphaSourceBlend));
357 d3dAlphaDestinationBlend = _003CModule_003E.ConvertXnaBlendToDx(GraphicsHelpers.AdjustAlphaBlend(cachedAlphaDestinationBlend));
358 d3dAlphaBlendFunction = _003CModule_003E.ConvertXnaBlendOpToDx(cachedAlphaBlendFunction);
359 uint num3 = (uint)(cachedBlendFactor.A << 8);
360 uint num4 = (cachedBlendFactor.R | num3) << 8;
361 uint num5 = (cachedBlendFactor.G | num4) << 8;
362 d3dBlendFactor = cachedBlendFactor.B | num5;
364 if (blendEnable)
365 {
367 }
368 if (cachedColorWriteChannels != ColorWriteChannels.All)
369 {
370 stateTrackerFlags |= 2u;
371 }
372 if (cachedColorWriteChannels1 != ColorWriteChannels.All)
373 {
374 stateTrackerFlags |= 4u;
375 }
376 if (cachedColorWriteChannels2 != ColorWriteChannels.All)
377 {
378 stateTrackerFlags |= 8u;
379 }
380 if (cachedColorWriteChannels3 != ColorWriteChannels.All)
381 {
382 stateTrackerFlags |= 16u;
383 }
384 }
385 IntPtr pComPtr = (IntPtr)device.pComPtr;
386 Helpers.CheckDisposed(device, pComPtr);
387 IDirect3DDevice9* pComPtr2 = device.pComPtr;
388 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)27, blendEnable ? 1u : 0u);
389 if (blendEnable)
390 {
391 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)19, (uint)d3dColorSourceBlend);
392 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)20, (uint)d3dColorDestinationBlend);
393 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)171, (uint)d3dColorBlendFunction);
394 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)206, separateAlphaBlend ? 1u : 0u);
396 {
397 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)207, (uint)d3dAlphaSourceBlend);
398 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)208, (uint)d3dAlphaDestinationBlend);
399 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)209, (uint)d3dAlphaBlendFunction);
400 }
401 }
402 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)168, (uint)cachedColorWriteChannels);
403 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)190, (uint)cachedColorWriteChannels1);
404 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)191, (uint)cachedColorWriteChannels2);
405 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)192, (uint)cachedColorWriteChannels3);
406 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)193, d3dBlendFactor);
407 ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, _D3DRENDERSTATETYPE, uint, int>)(int)(*(uint*)(*(int*)pComPtr2 + 228)))((nint)pComPtr2, (_D3DRENDERSTATETYPE)162, (uint)cachedMultiSampleMask);
408 *(uint*)((byte*)device.pStateTracker + 112) = stateTrackerFlags;
409 }

References Microsoft.Xna.Framework.Graphics.GraphicsResource._parent, Microsoft.Xna.Framework.Graphics.GraphicsDevice._profileCapabilities, Microsoft.Xna.Framework.Color.A, Microsoft.Xna.Framework.Graphics.GraphicsHelpers.AdjustAlphaBlend(), Microsoft.Xna.Framework.Graphics.BlendState.blendEnable, Microsoft.Xna.Framework.Graphics.BlendState.cachedAlphaBlendFunction, Microsoft.Xna.Framework.Graphics.BlendState.cachedAlphaDestinationBlend, Microsoft.Xna.Framework.Graphics.BlendState.cachedAlphaSourceBlend, Microsoft.Xna.Framework.Graphics.BlendState.cachedBlendFactor, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorBlendFunction, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorDestinationBlend, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorSourceBlend, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorWriteChannels, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorWriteChannels1, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorWriteChannels2, Microsoft.Xna.Framework.Graphics.BlendState.cachedColorWriteChannels3, Microsoft.Xna.Framework.Graphics.BlendState.cachedMultiSampleMask, Microsoft.Xna.Framework.Helpers.CheckDisposed(), Microsoft.Xna.Framework.Graphics.BlendState.d3dAlphaBlendFunction, Microsoft.Xna.Framework.Graphics.BlendState.d3dAlphaDestinationBlend, Microsoft.Xna.Framework.Graphics.BlendState.d3dAlphaSourceBlend, Microsoft.Xna.Framework.Graphics.BlendState.d3dBlendFactor, Microsoft.Xna.Framework.Graphics.BlendState.d3dColorBlendFunction, Microsoft.Xna.Framework.Graphics.BlendState.d3dColorDestinationBlend, Microsoft.Xna.Framework.Graphics.BlendState.d3dColorSourceBlend, Microsoft.Xna.Framework.Graphics.ProfileCapabilities.DestBlendSrcAlphaSat, Microsoft.Xna.Framework.Graphics.BlendState.isBound, Microsoft.Xna.Framework.Graphics.GraphicsResource.isDisposed, Microsoft.Xna.Framework.Graphics.GraphicsHelpers.IsSeparateBlend(), Microsoft.Xna.Framework.Graphics.ProfileCapabilities.MinMaxSrcDestBlend, Microsoft.Xna.Framework.Graphics.GraphicsResource.Name, Microsoft.Xna.Framework.Graphics.GraphicsDevice.pComPtr, Microsoft.Xna.Framework.FrameworkResources.ProfileFeatureNotSupported, Microsoft.Xna.Framework.FrameworkResources.ProfileNoMinMaxSrcDestBlend, Microsoft.Xna.Framework.FrameworkResources.ProfileNoSeparateAlphaBlend, Microsoft.Xna.Framework.Graphics.BlendState.separateAlphaBlend, Microsoft.Xna.Framework.Graphics.ProfileCapabilities.SeparateAlphaBlend, Microsoft.Xna.Framework.Graphics.BlendState.stateTrackerFlags, and Microsoft.Xna.Framework.Graphics.ProfileCapabilities.ThrowNotSupportedException().