Пример #1
0
        public void Open(VqaReader video)
        {
            this.video = video;

            stopped = true;
            paused  = true;
            Game.Sound.StopVideo();
            onComplete = () => { };

            invLength = video.Framerate * 1f / video.Frames;

            var size        = Math.Max(video.Width, video.Height);
            var textureSize = Exts.NextPowerOf2(size);
            var videoSheet  = new Sheet(SheetType.BGRA, new Size(textureSize, textureSize));

            videoSheet.AssignOrGetOrSetDataGLTexture().ScaleFilter = TextureScaleFilter.Linear;
            videoSheet.AssignOrGetOrSetDataGLTexture().SetData(video.FrameData);

            videoSprite = new Sprite(videoSheet,
                                     new Rectangle(
                                         0,
                                         0,
                                         video.Width,
                                         video.Height),
                                     TextureChannel.RGBA);

            var scale = Math.Min((float)RenderBounds.Width / video.Width, (float)RenderBounds.Height / video.Height * AspectRatio);

            videoOrigin = new float2(
                RenderBounds.X + (RenderBounds.Width - scale * video.Width) / 2,
                RenderBounds.Y + (RenderBounds.Height - scale * video.Height * AspectRatio) / 2);

            // Round size to integer pixels. Round up to be consistent with the scale calculation.
            videoSize = new float2((int)Math.Ceiling(video.Width * scale), (int)Math.Ceiling(video.Height * AspectRatio * scale));

            if (!DrawOverlay)
            {
                return;
            }

            var scaledHeight = (int)videoSize.Y;

            overlay = new uint[Exts.NextPowerOf2(scaledHeight), 1];
            var black = 255U << 24;

            for (var y = 0; y < scaledHeight; y += 2)
            {
                overlay[y, 0] = black;
            }

            var overlaySheet = new Sheet(SheetType.BGRA, new Size(1, Exts.NextPowerOf2(scaledHeight)));

            overlaySheet.AssignOrGetOrSetDataGLTexture().SetData(overlay);
            overlaySprite = new Sprite(overlaySheet, new Rectangle(0, 0, 1, scaledHeight), TextureChannel.RGBA);
        }
Пример #2
0
        public override void Initialize(WidgetArgs args)
        {
            base.Initialize(args);

            var hueSheet = new Sheet(SheetType.BGRA, new Size(256, 1));

            hueSprite = new Sprite(hueSheet, new Rectangle(0, 0, 256, 1), TextureChannel.RGBA);

            var hueData = new uint[1, 256];

            for (var x = 0; x < 256; x++)
            {
                hueData[0, x] = (uint)Color.FromAhsv(x / 255f, 1, 1).ToArgb();
            }

            hueSheet.AssignOrGetOrSetDataGLTexture().SetData(hueData);
        }
Пример #3
0
        public override void Initialize(WidgetArgs args)
        {
            base.Initialize(args);

            sRange[0] += STrim;
            sRange[1] -= STrim;
            vRange[0] += VTrim;
            vRange[1] -= VTrim;

            // Bitmap data is generated in a background thread and then flipped
            front = new byte[4 * 256 * 256];
            back  = new byte[4 * 256 * 256];

            var rect       = new Rectangle((int)(255 * sRange[0]), (int)(255 * (1 - vRange[1])), (int)(255 * (sRange[1] - sRange[0])) + 1, (int)(255 * (vRange[1] - vRange[0])) + 1);
            var mixerSheet = new Sheet(SheetType.BGRA, new Size(256, 256));

            mixerSheet.AssignOrGetOrSetDataGLTexture().SetData(front, 256, 256);
            mixerSprite = new Sprite(mixerSheet, rect, TextureChannel.RGBA);
            GenerateBitmap();
        }