无法理解在monogame中渲染目标和后台缓冲区

时间:2016-07-31 16:06:43

标签: c# xna monogame

我的图形设备设置如下:

GraphicsDeviceManager = new GraphicsDeviceManager(GameBase.GameRef);
GraphicsDeviceManager.PreferredBackBufferWidth = 640;
GraphicsDeviceManager.PreferredBackBufferHeight = 480;
GraphicsDeviceManager.ApplyChanges();

我无法在谷歌的任何地方找到确切地说明首选后缓冲区宽度的含义。

我设置了一个这样的渲染目标:

RenderTarget = new RenderTarget2D(
    GraphicsDeviceManager.GraphicsDevice,
    640,
    480,
    false,
    GraphicsDeviceManager.GraphicsDevice.PresentationParameters.BackBufferFormat,
    DepthFormat.Depth24);

关于如何绘制渲染目标,我在谷歌上找不到640和480实际意味着什么。

我遇到的问题是,如果我调整窗口大小,一切都会延伸。我试图理解monogame正在做的事情,然后最终找到解决方案。

开始时我的窗口是640x480,PreferredBackBufferWidth和高度是640/480,渲染目标是640/480

如果我将窗口大小调整为1920x1080,那么一切都会延伸,所以不知何故monogame不再将640x480纹理渲染到屏幕的640x480部分,但我没有更改任何值或为此完成任何代码。

如果我调整屏幕大小,是否应该以新的窗口大小销毁渲染目标并重新创建渲染目标,或者应该更改后缓冲区的宽度和高度,还是两者都改变​​?或者

我很困惑,并且没有任何在线技术文档可以详细回答。一旦我明白了,我应该能够编写一些代码,这样当你调整屏幕大小时没有任何反应,一切都保持相同的大小,并且右/下边缘周围有一个黑色区域,因为窗口比我大渲染到。

1 个答案:

答案 0 :(得分:0)

后台缓冲区是一个特殊的渲染目标,显示在屏幕上。它被拉伸以填充窗口,如果窗口大小不匹配,则会导致缩放。

您可以在窗口大小更改时调整后台缓冲区的大小。发生这种情况时会触发Game.Window.ClientSizeChanged事件(请注意,如果用户通过拖动调整窗口大小,可能会多次触发)。然后调整后台缓冲区的大小就是

GraphicsDeviceManager.PreferredBackBufferWidth = Window.ClientBounds.Width;
GraphicsDeviceManager.PreferredBackBufferHeight = Window.ClientBounds.Height;
GraphicsDeviceManager.ApplyChanges();

是否应该重新创建RenderTarget取决于您使用它的目的。