title author date CreateTime categories
SharpDx 进入全屏模式
lindexi
2019-5-31 9:5:36 +0800
2019-5-30 20:1:26 +0800
DirectX SharpDX 渲染

本文告诉大家两个不同的方法进入全屏模式

本文属于 SharpDx 系列 博客,建议从头开始读

本文的上一篇是 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 本文的代码将会在上一篇的代码上修改

在 SharpDx 里面可以通过两个方法进入全屏模式,一个是窗口进入全屏,另一个是交换链进入全屏

窗口模式

和普通的 WPF 窗口差不多,可以在 RenderForm 创建的时候设置进入全屏模式,全屏就是最大化的窗口同时去掉标题栏,隐藏任务栏

在 Windows 只要整个屏幕的所有像素被填充,那么任务栏将会自动隐藏

在 RenderForm 有一个属性是 IsFullscreen 如果单修改这个属性是没有用的,需要同时设置 AllowUserResizing 属性

            _renderForm = new RenderForm();

            _renderForm.WindowState = FormWindowState.Maximized;
_renderForm.IsFullscreen = true;
_renderForm.AllowUserResizing = false;

这样就可以进入全屏,没有标题栏和任务栏

设置透明窗口

在窗口里面可以通过 TransparencyKey 设置某个颜色作为透明颜色,然后通过 AllowTransparency 设置支持透明

            _renderForm.TransparencyKey = Color.Transparent;
_renderForm.AllowTransparency = true;

这时画出的透明的颜色就是让窗口透明,透明的部分会命中到后面的元素

和 WPF 的全屏不相同的是,在 SharpDx 里面不会占用屏幕透明的内存,也就是透明部分不需要使用程序进程的内存

交换链全屏

如果开启交换链的全屏,那么窗口透明将无法使用,使用交换链透明,在 Windows 的 DWM 将会整个屏幕的绘制交给程序,此时的程序绘制速度能更快

其他的应用有关渲染部分都不会执行,特别是其他的 dx 程序,这样程序可以用到很多的计算。用交换链的全屏可以做到更高的性能,但是在进入的时候都会因为屏幕显示切换出现黑色,现在很少有游戏使用交换链全屏

在上一篇说到的 InitializeDeviceResources 方法里面通过 CreateWithSwapChain 方法创建交换链的下方,可以设置全屏

        private void InitializeDeviceResources()
{
var backBufferDesc =
new ModeDescription(Width, Height, new Rational(60, 1), Format.R8G8B8A8_UNorm); var swapChainDesc = new SwapChainDescription
{
ModeDescription = backBufferDesc,
SampleDescription = new SampleDescription(1, 0),
Usage = Usage.RenderTargetOutput,
BufferCount = 1,
OutputHandle = _renderForm.Handle,
IsWindowed = true
}; Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, swapChainDesc,
out _d3DDevice, out _swapChain); // 全屏
_swapChain.SetFullscreenState(new RawBool(true), null); // 忽略代码
}

通过 SetFullscreenState 可以将交换链的渲染信息输出到屏幕,在Windows Vista或更高版本中其实 独占 模式不会让整个程序用到所有的 GPU 资源,因为 GPU 是共享的,但是可以让程序用到更多的资源。清真的程序在其他程序进去全屏的时候,渲染策略会和这个程序最小化一样,不会做实际渲染

SharpDx 系列

SharpDX.DXGI.SwapChain.SetFullscreenState(SharpDX.Mathematics.Interop.RawBool, SharpDX.DXGI.Output) Example

DirectX Graphics Infrastructure (DXGI) Best Practices - Windows applications

DXGI API SharpDX

最新文章

  1. Entity Framework Code First关系映射约定
  2. js字符串和正则表达式中的match、replace、exec等函数详解
  3. 记一次 IDEA mybatis.generator 自定义扩展插件
  4. windows server 无人值守安装
  5. python异常处理(基础)
  6. js数组常用操作方法小结(增加,删除,合并,分割等)
  7. Keep Alive
  8. require.js学习笔记(内容属于转载总结)
  9. JavaScript如何获得昨天明天等日期
  10. POJ 3259 Wormholes(SPFA判负环)
  11. 从初识Maven到使用Maven进行依赖管理和项目构建
  12. Spark运行架构
  13. 深度学习之卷积神经网络(CNN)详解与代码实现(一)
  14. C#HTTP请求之POST请求和GET请求
  15. windows10系统关闭自动更新服务
  16. Array数组内函数
  17. C# 反编译防范
  18. 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中运行
  19. Java IO中转换流的作用
  20. js 判断图片是否加载完成(使用 onload 事件)

热门文章

  1. Leetcode788.Rotated Digits旋转数字
  2. PHPCMS快速建站系列之 pc标签where中如何使用变量
  3. PLAY2.6-SCALA(二) Actions, Controllers ,Results,routes
  4. thinkphp常用的一些函数
  5. 通过JS操作CSS
  6. 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
  7. sql —— having
  8. hihocoder 1586 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛-题目9 : Minimum【线段树】
  9. HZOJ 斐波那契(fibonacci)
  10. 网站的域名带www的和不带www的有什么区别呀