• 在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法


    在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法:

    在构造函数中添加事件:graphics.PreparingDeviceSettings += Graphics_PreparingDeviceSettings;
    事件函数:
    private void Graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
    {
    e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;
    }

    之后再调用类似以下的代码时就不会造成黑屏:
    GraphicsDevice.SetRenderTarget(null);
    GraphicsDevice.Clear(Color.CornflowerBlue);

    GraphicsDevice.SetRenderTarget(canvas);
    GraphicsDevice.Clear(new Color(0, 0, 0, 0));

    GraphicsDevice.SetRenderTarget(null);
    spriteBatch.Begin();
    spriteBatch.Draw(canvas, new Vector2(0, 0), Color.White);
    spriteBatch.End();

    原理:其实MSDN上的XNA文档中有提到,在XBOX360上的所有渲染目标使用相同的内存缓冲区,所以在SetRenderTarget()前要调用 ResolveRenderTarget 或 ResolveBackBuffer
    只是在MonoGame中没有这两个函数,不过可以通过设置RenderTargetUsage实现相同的效果

    注: 这样修改后可能会影响跨平台?未验证

  • 相关阅读:
    生成函数
    LOJ6078 「2017 山东一轮集训 Day7」重排
    Gym101981C Cherry and Chocolate
    Gym102411C Cross-Stitch
    使用filter对请求设置编码
    java过滤器filter使用
    java操作数据库的事务支持
    jsp泛型支持
    jstl 使用
    jsp el的内置对象
  • 原文地址:https://www.cnblogs.com/gmcn/p/10274558.html
Copyright © 2020-2023  润新知