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); }
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); }
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(); }