monogame 中的假多显示器全屏:形式不够大

Fake multi-monitor fullscreen in monogame: form can't be big enough

我 运行 一个三显示器设置,我正在 MonoGame 中制作我决定的图形演示(为什么不呢?让它能够在所有显示器上最大化!)所以我使用了这个代码:

 graphics.IsFullScreen = false;
        graphics.ApplyChanges();
        //get dimensions of box that will cover all displays and set window to it.
        int xPos = System.Windows.Forms.Screen.AllScreens.OrderBy(x => x.Bounds.X).Select(x => x.Bounds.X).First();
        int yPos = System.Windows.Forms.Screen.AllScreens.OrderBy(y => y.Bounds.Y).Select(y => y.Bounds.Y).First();
        form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        form.Location = new System.Drawing.Point(xPos, yPos);
        int xWidth = System.Windows.Forms.Screen.AllScreens.OrderByDescending(x => x.Bounds.X).Select(x => x.Bounds.X + x.Bounds.Width).First() - xPos;
        int yHeight = System.Windows.Forms.Screen.AllScreens.OrderByDescending(y => y.Bounds.Y).Select(y => y.Bounds.Y + y.Bounds.Height).First() - yPos;
        form.MaximumSize = new System.Drawing.Size(0, 0);

        form.Width = xWidth;
        form.Height = yHeight;
      //  graphics.PreferredBackBufferWidth = xWidth;
     //   graphics.PreferredBackBufferHeight = yHeight;
        graphics.ApplyChanges();
        Properties.Settings.Default.FakeFullScreen = true;
    }

当然还有第二个撤消它的功能。

当我将其中一台显示器设置在其他显示器之上进行测试时,这工作正常,但是当我设置 windows 布局将它们并排放置(给出 5760x1080 的分辨率)时,我是在 graphics.ApplyChanges() 上抛出无效参数错误。所以我注释掉了图形代码并手动设置了表单宽度,发现显然我不允许表单宽度超过 4096 像素。

有办法解决这个问题吗?我愿意接受所有建议,包括有多个 window 并排绘制,但我需要一些代码来告诉我如何定位第二种形式。

拜托,谢谢。

这是 DirectX 9/Windows Phone 7 使用 "Reach Graphics Profile" 将纹理大小限制为 4096 x 4096。

最终显示的图像是所有spritebatches合成的单个纹理,大小不能超过最大纹理大小。

更正问题:

  1. 确保您的视频卡支持更大的纹理:运行 dxdiag.exe(大多数现代视频卡支持,只要有足够的内存)。
  2. 启用“hidef”配置文件以允许完整的 DX9、DX10 和 DX11 模式。

要启用 "Hidef",请修改您的 Game1.cs 构造函数,使用 this code:

public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            graphics.GraphicsProfile = GraphicsProfile.HiDef;
            graphics.ApplyChanges();
            // any additional code goes here
        }

另一种方法是使用 OpenGL,它会忽略图形配置文件并使用适合您的视频卡的最佳版本。