コード例 #1
0
ファイル: UserGuiControl.cs プロジェクト: BAndysc/UserGuiLib
            protected override void ProcessPixelFragment(int startX, int startY, int endX, int endY, Vector2 step, Vector2 start, Func <uint, uint, float, float, int> pixelShader)
            {
                int heightInPixels = endY - startY;
                int widthInPixels  = endX - startX;

                // rendering in half resolution
                Parallel.For(0, heightInPixels - 1, y =>
                {
                    if (y % 2 == 1)
                    {
                        return;
                    }

                    float _y = y * step.y + start.y;
                    float _x = start.x;
                    for (int x = 0; x < widthInPixels; x += 2)
                    {
                        int res = pixelShader((uint)(x + startX), (uint)(y + startY), _x, _y);
                        var c   = ColorBgra.FromInt32(res);
                        if (c.A == 255)
                        {
                            surface.Surface.SetPointFast(x + startX, y + startY, c);
                            surface.Surface.SetPointFast(x + startX + 1, y + startY, c);
                        }
                        _x += step.x * 2;
                    }
                    PaintDotNet.SystemLayer.Memory.Copy(surface.Surface.Scan0.Pointer + (y + 1 + startY) * surface.Surface.Stride + startX * 4,
                                                        surface.Surface.Scan0.Pointer + (y + startY) * surface.Surface.Stride + startX * 4,
                                                        (uint)(widthInPixels * 4));
                });
            }