Пример #1
0
    // Token: 0x06000AA0 RID: 2720 RVA: 0x0002DA0C File Offset: 0x0002BE0C
    private static void ThreadedScale(Texture2D tex, int newWidth, int newHeight, bool useBilinear)
    {
        TextureUtility.texColors = tex.GetPixels();
        TextureUtility.newColors = new Color[newWidth * newHeight];
        if (useBilinear)
        {
            TextureUtility.ratioX = 1f / ((float)newWidth / (float)(tex.width - 1));
            TextureUtility.ratioY = 1f / ((float)newHeight / (float)(tex.height - 1));
        }
        else
        {
            TextureUtility.ratioX = (float)tex.width / (float)newWidth;
            TextureUtility.ratioY = (float)tex.height / (float)newHeight;
        }
        TextureUtility.w  = tex.width;
        TextureUtility.w2 = newWidth;
        int num  = Mathf.Min(SystemInfo.processorCount, newHeight);
        int num2 = newHeight / num;

        TextureUtility.finishCount = 0;
        if (TextureUtility.mutex == null)
        {
            TextureUtility.mutex = new Mutex(false);
        }
        if (num > 1)
        {
            int i;
            TextureUtility.ThreadData threadData;
            for (i = 0; i < num - 1; i++)
            {
                threadData = new TextureUtility.ThreadData(num2 * i, num2 * (i + 1));
                ParameterizedThreadStart start = (!useBilinear) ? new ParameterizedThreadStart(TextureUtility.PointScale) : new ParameterizedThreadStart(TextureUtility.BilinearScale);
                Thread thread = new Thread(start);
                thread.Start(threadData);
            }
            threadData = new TextureUtility.ThreadData(num2 * i, newHeight);
            if (useBilinear)
            {
                TextureUtility.BilinearScale(threadData);
            }
            else
            {
                TextureUtility.PointScale(threadData);
            }
            while (TextureUtility.finishCount < num)
            {
                Thread.Sleep(1);
            }
        }
        else
        {
            TextureUtility.ThreadData obj = new TextureUtility.ThreadData(0, newHeight);
            if (useBilinear)
            {
                TextureUtility.BilinearScale(obj);
            }
            else
            {
                TextureUtility.PointScale(obj);
            }
        }
        tex.Resize(newWidth, newHeight);
        tex.SetPixels(TextureUtility.newColors);
        tex.Apply();
    }