2019-5-31-SharpDx-进入全屏模式
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 是共享的,但是可以让程序用到更多的资源。清真的程序在其他程序进去全屏的时候,渲染策略会和这个程序最小化一样,不会做实际渲染
DirectX Graphics Infrastructure (DXGI) Best Practices - Windows applications
最新文章
- Entity Framework Code First关系映射约定
- js字符串和正则表达式中的match、replace、exec等函数详解
- 记一次 IDEA mybatis.generator 自定义扩展插件
- windows server 无人值守安装
- python异常处理(基础)
- js数组常用操作方法小结(增加,删除,合并,分割等)
- Keep Alive
- require.js学习笔记(内容属于转载总结)
- JavaScript如何获得昨天明天等日期
- POJ 3259 Wormholes(SPFA判负环)
- 从初识Maven到使用Maven进行依赖管理和项目构建
- Spark运行架构
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
- C#HTTP请求之POST请求和GET请求
- windows10系统关闭自动更新服务
- Array数组内函数
- C# 反编译防范
- 菜鸟教程之工具使用(六)——让Maven项目直接在eclipse内部的Tomcat中运行
- Java IO中转换流的作用
- js 判断图片是否加载完成(使用 onload 事件)
热门文章
- Leetcode788.Rotated Digits旋转数字
- PHPCMS快速建站系列之 pc标签where中如何使用变量
- PLAY2.6-SCALA(二) Actions, Controllers ,Results,routes
- thinkphp常用的一些函数
- 通过JS操作CSS
- 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
- sql —— having
- hihocoder 1586 ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛-题目9 : Minimum【线段树】
- HZOJ 斐波那契(fibonacci)
- 网站的域名带www的和不带www的有什么区别呀