【问题标题】:How to render XNA GraphicsDevice to Windows Forms Graphics object?如何将 XNA GraphicsDevice 渲染到 Windows 窗体图形对象?
【发布时间】: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()

每个想法都失败了。还有什么吗?

【问题讨论】:

    标签: c# winforms graphics xna


    【解决方案1】:

    其实, 渲染到纹理是可以的。记得打电话:

    GraphicsDevice.SetRenderTarget(null);
    

    在您从中访问数据之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多