以下是SlimDX版本:
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();
});这是非常缓慢的高分辨率,也没有那么快,在较低的。我不太明白为什么,正如我想的,它会更快,因为它使用GPU。
这是绘图版本:
newImage = Image.FromStream(ms);
gmp.DrawImage(newImage, 0, 0);只是在循环内部(SlimDX在消息泵中有自己的循环)。
你能告诉我为什么画画更快吗?据我所知,使用面板之类的绘图很慢,因为它是为了完全兼容而设计的,并且没有为硬件加速进行优化。
这应该是不断地重绘,因为一个新的图像将始终到达(ms是从一个memorystream,然后放入一个内存流,当收到)。
我基本上要求对代码进行分析。
发布于 2015-11-06 13:11:51
您似乎在计时这段代码:
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);此代码正在加载一个纹理,而不是渲染场景。因此,要修复:
sprite.Draw(tx, Color.Transparent);代替。https://codereview.stackexchange.com/questions/29919
复制相似问题