允许在MonoGame(XNA)DirectX11中使用多个GraphicsDeviceManagers

时间:2015-07-16 07:00:33

标签: c# wpf xna directx monogame

使用MonoGame(基本上是XNA)我有一些代码允许你在System.Windows.Controls.Image内托管一个DirectX11窗口,其目的是让你将窗口显示为标准的WPF控件。

我通过查看一些演示类似功能的在线代码示例来创建此代码(因为我是游戏开发人员的完全新手)。在我利用的一些代码中,有一种特别感兴趣的方法,如下所示:

private static void InitializeGraphicsDevice(D3D11Host game, int width, int height)
{
    lock (GraphicsDeviceLock)
    {
        _ReferenceCount++;
        if (_ReferenceCount == 1)
        {
            // Create Direct3D 11 device.
            _GraphicsDeviceManager = new WpfGraphicsDeviceManager(game, width, height);
            _GraphicsDeviceManager.CreateDevice();
        }
    }
}

在创建托管对象(即System.Windows.Controls.Image)时调用此代码,显然其目的是限制多个GraphicsDeviceManagers的创建。但是我最终遇到了这个代码阻止我根据需要创建多个游戏窗口的情况。

我已将此代码从静态更改为实例并删除了计数器,并且 似乎 的所有内容都工作正常但是我担心有一些基本的东西我不会#39了解哪些可能会在以后出现。

那么,为什么上面的代码会阻止创建多个DeviceManagers?在XNA(MonoGame)中创建多个图形设备管理器对我来说是否合法?我必须假设它一定有原因吗?

1 个答案:

答案 0 :(得分:1)

我认为这是因为xna背后的基本设计思想。你有一个游戏循环,一个窗口用于图形输出,依此类推。

如果我没记错的话,在不同的手柄上创建多个图形设备应该没问题(在你的情况下是不同的窗口)。