Maxim Gershkovich
Maxim Gershkovich

Reputation: 47199

Are multiple GraphicsDeviceManagers in MonoGame (XNA) DirectX11 allowed

Using MonoGame (Basically XNA) I have some code which allows you to host a DirectX11 window inside of a System.Windows.Controls.Image, the purpose of which is to allow you to display the window as a standard WPF control.

I created this code by looking at a number of online code examples which demonstrated similar functionality (as I am a complete newbie to game dev). Among some of the code that I have leveraged there is a method of specific interest to me which looks like this:

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();
        }
    }
}

This code is called on the creation of the hosting object (i.e. System.Windows.Controls.Image) and clearly it appears the intent is to limit the creation of multiple GraphicsDeviceManagers. However I have ended up in the situation where this code prevents me from creating multiple game windows, as needed.

I have changed this code from static to instance and removed the counter and everything seems to be working fine BUT I am concerned that there is something fundamental I don't understand which might come up later.

So, why does the above code prevent creating multiple DeviceManagers? Is it legal for me to create multiple graphics device managers in XNA (MonoGame)? I have to assume there must have been a reason for it?

Upvotes: 0

Views: 694

Answers (1)

darkfirewave
darkfirewave

Reputation: 82

I think it's because of the fundamental design thought behind xna. You have one game loop, one window for graphic output and so on.

If I remember correctly it should be no problem to create multiple graphic devices on different handles (in your case different windows).

Upvotes: 1

Related Questions