zoukankan      html  css  js  c++  java
  • 在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实现相同的效果

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

  • 相关阅读:
    查看SQL语句执行时间、IO开销
    创建性能监视器(logman)
    IIS连接数
    SQL Server重建索引计划
    删除不存在的网卡
    授予普通域用户远程桌面连接DC/客户端权限
    AD新建用户、组、OU
    常用短语
    Android之APP模块编译
    Web&网络协议
  • 原文地址:https://www.cnblogs.com/gmcn/p/10274558.html
Copyright © 2011-2022 走看看