【发布时间】:2014-05-08 18:24:50
【问题描述】:
我在 Windows 窗体中使用 XNA。
根据微软教程,使用 XNA 的控件在OnPaint() 中应该有这样的内容:
GraphicsDevice.Present(srcRectangle, null, this.Handle);
但我想用 Windows 窗体图形对象绘制其他东西。我可以在GraphicsDevice.Present() 之后放置绘图代码,但我得到可怕的闪烁。这就是我想以这种方式设置双缓冲的原因:
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
但不幸的是,它只会绘制用 Graphics 对象(或内部控件)绘制的东西。这就是为什么我想将我的 XNA 场景渲染到 Graphics 对象。有什么办法吗?
我试过了:
- 内置 WinForms 双缓冲,但不仅每一秒帧都是黑色的,而且那些正常帧也会闪烁。
- 在
Present()之后保存窗口内容,然后用Graphics对象显示。 - 渲染到 RenderTarget2D,然后创建位图以显示在带有
Image.FromStream(Stream)的 Graphics 对象上,其中流来自RenderTarget.SaveAsPng()。
每个想法都失败了。还有什么吗?
【问题讨论】: