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实现相同的效果

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

  • 相关阅读:
    JavaScript二(第一个js程序)
    JavaScript简述一
    选择合适的Linux版本
    jQuery(一)引入
    Java从零开始学零(Java简介)
    正则表达式
    通过Servlet生成验证码图片(转)
    监听器(web基础学习笔记二十二)
    利用Session完成用户的登录和注销
    Spring Security OAuth 2.0
  • 原文地址:https://www.cnblogs.com/gmcn/p/10274558.html
Copyright © 2011-2022 走看看