Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ GetValueSingleArray()

unsafe float[] Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueSingleArray ( int count)
inline

Definition at line 1768 of file EffectParameter.cs.

1769 {
1770 //Discarded unreachable code: IL_023f
1771 if (count <= 0)
1772 {
1773 throw new ArgumentOutOfRangeException();
1774 }
1775 float[] array = new float[count];
1776 if (_paramClass == EffectParameterClass.Matrix)
1777 {
1778 int columns = _columns;
1779 int val = _rows * columns;
1780 int count2 = pElementCollection.Count;
1781 if (count2 == 0)
1782 {
1783 Matrix valueMatrix = GetValueMatrix();
1784 int num = Math.Min(count, val);
1785 fixed (float* ptr = &System.Runtime.CompilerServices.Unsafe.AsRef<float>(&valueMatrix.M11))
1786 {
1787 try
1788 {
1789 int num2 = 0;
1790 int num3 = 0;
1791 int rows = _rows;
1792 if (0 < rows)
1793 {
1794 while (num2 < num)
1795 {
1796 int num4 = 0;
1797 int columns2 = _columns;
1798 if (0 < columns2)
1799 {
1800 while (num2 < num)
1801 {
1802 array[num2] = *(float*)((ref *(_003F*)((num3 * 4 + num4) * 4)) + (ref *(_003F*)ptr));
1803 num2++;
1804 num4++;
1805 columns2 = _columns;
1806 if (num4 >= columns2)
1807 {
1808 break;
1809 }
1810 }
1811 }
1812 num3++;
1813 rows = _rows;
1814 if (num3 >= rows)
1815 {
1816 break;
1817 }
1818 }
1819 }
1820 }
1821 catch
1822 {
1823 //try-fault
1824 ptr = null;
1825 throw;
1826 }
1827 }
1828 }
1829 else
1830 {
1831 Matrix[] valueMatrixArray = GetValueMatrixArray(count2);
1832 int num5 = Math.Min(count, count2 * 16);
1833 fixed (float* ptr2 = &valueMatrixArray[0].M11)
1834 {
1835 try
1836 {
1837 int num6 = 0;
1838 int num7 = 0;
1839 if (0 < count2)
1840 {
1841 while (num6 < num5)
1842 {
1843 int num8 = 0;
1844 int rows2 = _rows;
1845 if (0 < rows2)
1846 {
1847 while (num6 < num5)
1848 {
1849 int num9 = 0;
1850 int columns3 = _columns;
1851 if (0 < columns3)
1852 {
1853 while (num6 < num5)
1854 {
1855 array[num6] = *(float*)((ref *(_003F*)(((num7 * 4 + num8) * 4 + num9) * 4)) + (ref *(_003F*)ptr2));
1856 num6++;
1857 num9++;
1858 columns3 = _columns;
1859 if (num9 >= columns3)
1860 {
1861 break;
1862 }
1863 }
1864 }
1865 num8++;
1866 rows2 = _rows;
1867 if (num8 >= rows2)
1868 {
1869 break;
1870 }
1871 }
1872 }
1873 num7++;
1874 if (num7 >= count2)
1875 {
1876 break;
1877 }
1878 }
1879 }
1880 }
1881 catch
1882 {
1883 //try-fault
1884 ptr2 = null;
1885 throw;
1886 }
1887 }
1888 }
1889 }
1890 else
1891 {
1892 ID3DXBaseEffect* ptr3 = pEffect;
1893 System.Runtime.CompilerServices.Unsafe.SkipInit(out _D3DXPARAMETER_DESC d3DXPARAMETER_DESC);
1894 int num10 = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, _D3DXPARAMETER_DESC*, int>)(int)(*(uint*)(*(int*)ptr3 + 16)))((nint)ptr3, _handle, &d3DXPARAMETER_DESC);
1895 if (num10 < 0)
1896 {
1897 throw GraphicsHelpers.GetExceptionFromResult((uint)num10);
1898 }
1899 int num11 = System.Runtime.CompilerServices.Unsafe.As<_D3DXPARAMETER_DESC, int>(ref System.Runtime.CompilerServices.Unsafe.AddByteOffset(ref d3DXPARAMETER_DESC, 40)) >>> 2;
1900 fixed (void* ptr4 = &System.Runtime.CompilerServices.Unsafe.As<float, void>(ref (new float[num11])[0]))
1901 {
1902 try
1903 {
1904 int num12 = ((count >= num11) ? num11 : count);
1905 int num13 = *(int*)pEffect + 132;
1906 int num14 = ((delegate* unmanaged[Stdcall, Stdcall]<IntPtr, sbyte*, float*, uint, int>)(int)(*(uint*)num13))((nint)pEffect, _handle, (float*)ptr4, (uint)num12);
1907 if (num14 < 0)
1908 {
1909 throw GraphicsHelpers.GetExceptionFromResult((uint)num14);
1910 }
1911 IntPtr source = new IntPtr(ptr4);
1912 Marshal.Copy(source, array, 0, num12);
1913 }
1914 catch
1915 {
1916 //try-fault
1917 ptr4 = null;
1918 throw;
1919 }
1920 }
1921 }
1922 return array;
1923 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static void Copy(int[] source, int startIndex, IntPtr destination, int length)
Definition Marshal.cs:800

References Microsoft.Xna.Framework.Graphics.EffectParameter._columns, Microsoft.Xna.Framework.Graphics.EffectParameter._handle, Microsoft.Xna.Framework.Graphics.EffectParameter._paramClass, Microsoft.Xna.Framework.Graphics.EffectParameter._rows, System.array, System.Runtime.InteropServices.Marshal.Copy(), Microsoft.Xna.Framework.Graphics.EffectParameterCollection.Count, System.count, Microsoft.Xna.Framework.Graphics.GraphicsHelpers.GetExceptionFromResult(), Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueMatrix(), Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueMatrixArray(), Microsoft.Xna.Framework.Matrix.M11, System.Math.Min(), Microsoft.Xna.Framework.Graphics.EffectParameter.pEffect, Microsoft.Xna.Framework.Graphics.EffectParameter.pElementCollection, and System.source.

Referenced by Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueQuaternionArray(), Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueVector2Array(), Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueVector3Array(), Microsoft.Xna.Framework.Graphics.EffectParameter.GetValueVector4Array(), and Microsoft.Xna.Framework.Graphics.EffectParameter.SaveDataForRecreation().