Here is the SlimDX version:
var form = new SlimDX.Windows.RenderForm("Test"); form.Width = 1280; form.Height = 1024; SlimDX.Direct3D9.PresentParameters presentParams = new SlimDX.Direct3D9.PresentParameters { BackBufferWidth = form.Width, BackBufferHeight = form.Height, DeviceWindowHandle = form.Handle, PresentFlags = SlimDX.Direct3D9.PresentFlags.None, Multisample = SlimDX.Direct3D9.MultisampleType.None, BackBufferCount = 0, PresentationInterval = SlimDX.Direct3D9.PresentInterval.Immediate, SwapEffect = SlimDX.Direct3D9.SwapEffect.Flip, BackBufferFormat = SlimDX.Direct3D9.Format.X8R8G8B8, Windowed = true, }; var device = new SlimDX.Direct3D9.Device(new SlimDX.Direct3D9.Direct3D(), 0, SlimDX.Direct3D9.DeviceType.Hardware, form.Handle, SlimDX.Direct3D9.CreateFlags.HardwareVertexProcessing, presentParams); device.Viewport = new SlimDX.Direct3D9.Viewport(0, 0, form.Width, form.Height); SlimDX.Direct3D9.Sprite sprite; sprite = new SlimDX.Direct3D9.Sprite(device); SlimDX.Windows.MessagePump.Run(form, () => { sprite.Begin(SlimDX.Direct3D9.SpriteFlags.None); device.BeginScene(); Stoptimer = Stopwatch.StartNew(); Stoptimer.Start(); var tx = SlimDX.Direct3D9.Texture.FromStream(device, ms, 0, 0, 0, SlimDX.Direct3D9.Usage.None, SlimDX.Direct3D9.Format.X8R8G8B8, SlimDX.Direct3D9.Pool.Managed, SlimDX.Direct3D9.Filter.None, SlimDX.Direct3D9.Filter.None, 0); Stoptimer.Stop(); System.Console.WriteLine(Stoptimer.ElapsedMilliseconds.ToString()); sprite.Draw(tx, Color.Transparent); sprite.End(); tx.Dispose(); device.EndScene(); device.Present(); }); This is very slow at higher resolutions and also not that fast at lower ones. I don't quite understand why, as I thought, it would be faster since it uses the GPU.
And here is the drawing version:
newImage = Image.FromStream(ms); gmp.DrawImage(newImage, 0, 0); It's just that inside a loop (SlimDX has its own loop inside the message pump).
Can you tell me why drawing is faster? From my understanding, drawing with Panels and such is slow, as it's made for complete compatibility and isn't optimized for hardware acceleration.
And this is supposed to redraw constantly as a new image will arrive all the time (ms is from a TCP Stream then put in a memorystream when received).
I basically ask for an analysis of the code.