Direct3D11学习:(二)基本绘图概念和基本类型
DXGI_FORMAT_R32G32B32_FLOAT :每个元素包含3个32位浮点分量。
DXGI_FORMAT_R16G16B16A16_UNORM :每个元素包含4个16位分量,分量的取值范围在[0,1]区间内。
DXGI_FORMAT_R32G32_UINT :每个元素包含两个32位无符号整数分量。
DXGI_FORMAT_R8G8B8A8_UNORM :每个元素包含4个8位无符号分量,分量的取值范围在[0,1]区间内。
DXGI_FORMAT_R8G8B8A8_SNORM :每个元素包含4个8位有符号分量,分量的取值范围在[-11,1] 区间内。
DXGI_FORMAT_R8G8B8A8_SINT :每个元素包含4个8位有符号整数分量,分量的取值范围在[?128, 127] 区间内。
DXGI_FORMAT_R8G8B8A8_UINT :每个元素包含4个8位无符号整数分量,分量的取值范围在[0, 255]区间内。
注意,字母R、G、B、A分别表示red(红)、green(绿)、blue(蓝)和alpha(透明度)。每种颜色都是由红、绿、蓝三种基本颜色组成的(例如,黄色是由红色和绿色组成的)。alpha通道(或alpha分量)用于控制透明度。不过,正如我们之前所述,纹理存储的不一定是颜色信息;例如,格式DXGI_FORMAT_R32G32B32_FLOAT包含3个浮点分量,可以存储一个使用浮点坐标的3D向量。另外,还有一种弱类型(typeless)格式,可以预先分配内存空间,然后在纹理绑定到管线时再指定如何重新解释数据内容(这一过程与C++中的数据类型转换颇为相似);例如,下面的弱类型格式为每个元素预留4个8位分量,且不指定数据类型(例如:整数、浮点数、无符号整数):
DXGI_FORMAT_R8G8B8A8_TYPELESS
2.4 交换链和页面翻转
DXGI_FORMAT_D32_FLOAT_S8X24_UINT:32位浮点深度缓冲区。为模板缓冲区预留8位(无符号整数),每个模板值的取值范围为[0,255]。其余24位闲置。
DXGI_FORMAT_D32_FLOAT :32位浮点深度缓冲区。
DXGI_FORMAT_D24_UNORM_S8_UINT :无符号24位深度缓冲区,每个深度值的取值范围为[0,1]。为模板缓冲区预留8位(无符号整数),每个模板值的取值范围为[0,255]。
DXGI_FORMAT_D16_UNORM :无符号16位深度缓冲区,每个深度值的取值范围为[0,1]。
注意:模板缓冲区对应用程序来说不是必须的,但是如果用到了模板缓冲区,那么模板缓冲区必定是与深度缓冲区存储在一起的。例如,32位格式DXGI_FORMAT_D24_UNORM_S8_UINT使用24位用于深度缓冲区,8位用于模板缓冲区。 所以,将深度缓冲区称为“深度/模板缓冲区”更为合适。模板缓冲区是一个比较高级的主题,我们会在以后学习模板缓冲区的用法。
D3D11_BIND_RENDER_TARGET | D3D10_BIND_SHADER_RESOURCE
指定纹理所要绑定的两个管线阶段。其实,资源不能被直接绑定到一个管线阶段;我们只能把与资源关联的资源视图绑定到不同的管线阶段。无论以哪种方式使用纹理,Direct3D始终要求我们在初始化时为纹理创建相关的资源视图(resource view)。这样有助于提高运行效率,正如SDK文档指出的那样:“运行时环境与驱动程序可以在视图创建执行相应的验证和映射,减少绑定时的类型检查”。所以,当把纹理作为一个渲染目标和着色器资源时,我们要为它创建两种视图:渲染目标视图(ID3D11RenderTargetView)和着色器资源视图(ID3D11ShaderResourceView)。资源视图主要有两个功能:(1)告诉Direct3D如何使用资源(即,指定资源所要绑定的管线阶段);(2)如果在创建资源时指定的是弱类型(typeless)格式,那么在为它创建资源视图时就必须指定明确的资源类型。对于弱类型格式,纹理元素可能会在一个管线阶段中视为浮点数,而在另一个管线阶段中视为整数。为了给资源创建一个特定视图,我们必须在创建资源时使用特定的绑定标志值。例如,如果在创建资源没有使用D3D11_BIND_DEPTH_STENCIL绑定标志值(该标志值表示纹理将作为一个深度/模板缓冲区绑定到管线上),那我们就无法为该资源创建ID3D11DepthStencilView视图。只要你试一下就会发现Direct3D会给出如下调试错误:
ERROR: ID3D11Device::CreateDepthStencilView:
A DepthStencilView cannot be created of a Resource that did not specify D3D10_BIND_DEPTH_STENCIL.
我们会在之后看到用来创建渲染目标视图和深度/模板视图的代码。在第8章中看到用于创建着色器资源视图的代码。本书随后的许多例子都有会把纹理用作渲染目标和着色器资源。
typedef struct DXGI_SAMPLE_DESC
{ UINT Count; UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;
Count成员用于指定每个像素的采样数量,Quality成员用于指定希望得到的质量级别(不同硬件的质量级别表示的含义不一定相同)。质量级别越高,占用的系统资源就越多,所以我们必须在质量和速度之间权衡利弊。质量级别的取值范围由纹理格式和单个像素的采样数量决定。我们可以使用如下方法,通过指定纹理格式和采样数量来查询相应的质量级别:
HRESULT ID3D11Device::CheckMultisampleQualityLevels( DXGI_FORMAT Format, UINT SampleCount, UINT *pNumQualityLevels);
如果纹理格式和采样数量的组合不被设备支持,则该方法返回0。反之,通过pNumQualityLevels参数返回符合给定的质量等级数值。有效的质量级别范围为0到pNumQualityLevels−1。
#define D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT(32)
采样数量通常使用4或8,可以兼顾性能和内存消耗。如果你不使用多重采样,可以将采样数量设为1,将质量级别设为0。所有符合Direct3D 11功能特性的设备都支持用于所有渲染目标格式的4X多重采样。
typedef enum D3D_FEATURE_LEVEL
{D3D_FEATURE_LEVEL_9_1 = 0x9100,D3D_FEATURE_LEVEL_9_2 = 0x9200,D3D_FEATURE_LEVEL_9_3 = 0x9300,D3D_FEATURE_LEVEL_10_0 = 0xa000,D3D_FEATURE_LEVEL_10_1 = 0xa100,D3D_FEATURE_LEVEL_11_0 = 0xb000
} D3D_FEATURE_LEVEL;
特征等级定义了一系列支持不同d3d功能的相应的等级(每个特征等级支持的功能可参见SDK文档),用意即如果一个用户的硬件不支持某一特征等级,程序可以选择较低的等级。例如,为了支持更多的用户,应用程序可能需要支持Direct3D 11,10.1,9.3硬件。程序会从最新的硬件一直检查到最旧的,即首先检查是否支持Direct3D 11,第二检查Direct3D 10.1,然后是Direct3D 10,最后是Direct3D 9。要设置测试的顺序,可以使用下面的特征等级数组(数组内元素的顺序即特征等级测试的顺序):
D3D_FEATURE_LEVEL featureLevels [4] ={D3D_FEATURE_LEVEL_11_0, // First check D3D 11 supportD3D_FEATURE_LEVEL_10_1, // Second check D3D 10.1 supportD3D_FEATURE_LEVEL_10_0, // Next,check D3D 10 supportD3D_FEATURE_LEVEL_9_3 // Finally,check D3D 9.3 support
} ;
这个数组可以放置在Direct3D初始化方法中,方法会输出数组中第一个可被支持的特征等级。例如,如果Direct3D报告数组中第一个可被支持的特征等级是D3D_FEATURE_LEVEL_10_0,程序就会禁用Direct3D 11和Direct3D 10.1的特征,而使用Direct3D 10的绘制路径。本书中我们要求必须能支持D3D_FEATURE_LEVEL_11_0。
转载于:https://www.cnblogs.com/Ray1024/p/6065598.html
Direct3D11学习:(二)基本绘图概念和基本类型相关推荐
- JavaScript高级程序设计学习(二)之基本概念
任何语言的核心都必然会描述这门语言基本的工作原理.而描述的内容通常都要涉及这门语 言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念.如前所述, ECMA-262通过叫做 ECMAS ...
- ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例
一.两个核心概念:bucket和metric 1.1 bucket 有如下数据 city name 北京 张三 北京 李四 天津 王五 天津 赵六 天津 王麻子 划分出来两个bucket,一个是北 ...
- JavaScript基础学习(二)—JavaScript基本概念
一.语法 1.区分大小写 JavaScript是一种弱类型的脚本语言.它区分大小写,变量名test与Test表示两个完全不同的变量. 2.标识符 所谓标识符就是变量.函数.属性的名字,它有以下规则. ...
- CUPS学习二:CUPS概念介绍。
距离上一篇博客已经过去差不多半年的时间,虽然这半年一直有其他各种莫名其妙的事打断,但是工作内容始终还是围绕着linux打印系统在开展.虽然进度很慢,里边到现在还是有细节没有太弄懂,但是源码和介绍已经差 ...
- 无人机仿真XTDrone学习二:常用的mavros消息类型
mavros用于无人机通信,可以将飞控与主控的信息进行交换.本次记录常用的mavros消息类型. 官方Wiki最正确,如有疑问首先查阅Wiki. mavros wiki CSDN参考 常用话题 数传 ...
- 迁移学习全面指南:概念、项目实战、优势、挑战
https://www.toutiao.com/a6685571761766924803/ 2019-04-30 14:32:56 前言 希望大家从头到尾的去看,而不是看完前面一点点感觉有用然后收藏, ...
- PyTorch框架学习二十——模型微调(Finetune)
PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...
- 浅说深度学习(1):核心概念
浅说深度学习(1):核心概念 原文来自Nvidia开发者社区:Deep Learning in a Nutshell: Core Concepts 作者:Tim Dettmers, Author at ...
- 区块链教程(二):基础概念介绍
注:本教程为技术教程,不谈论且不涉及炒作任何数字货币 本系列重点在于以太坊基础知识.以太坊客户端以及以太坊solidity编程,因此博客重点在于以太坊核心知识点的掌握,区块链部分的基础知识可以作为补充 ...
最新文章
- MySQL之 从复制延迟问题排查
- python在路径里添加变量_想学Python?那就先从头开始吧!
- beoplay耳机序列号查询_BO Beoplay E8评测:真正无线耳机,可自定义EQ设置和透明模式!...
- CCNP 640-892知识点中文精简解释
- Bzoj1176:MokiaCogs1752:[BOI2007]摩基亚Mokia
- 汇编语言程序设计-钱晓捷(第五版)学习笔记目录
- python安装pandas失败_详解pandas安装若干异常及解决方案总结
- 服务器运维需要学什么,运维工程师要学什么?运维工程师是做什么的?
- 西奥电梯服务器故障维修,干货│西奥电梯故障分析和技术文件
- 服务器日志修改保存时间,日志服务保留时间
- POJ1436Horizontally Visible Segments线段树+lazy
- 移动应用实战(移动OA)之四_会议室管理之一
- PHP+Wampserver(其中的MariaDB数据库)制作留言板
- 正则表达式JS-1212
- 【原创】【理论+题型】二次型化标准型 +合同
- Addition Chains
- 【Hadoop】01_从官网下载Hadoop
- JavaScript递归函数求阶乘
- 【嵌入式软件开发岗位 ---- 面试总结01】
- Android 交流分享汇总
热门文章
- 多核技术对计算机技术的影响,计算机新技术——多核技术.doc
- 信号与系统sa函数求积分_胡昉祖《导数的概念》和《定积分》
- mysql 插入前查重_插入新数据是直接查重,如果有重复则不插入数据
- 【PAT乙】1038 统计同成绩学生 (20分) 裸桶排序
- 【NOIP2010】【codevs1069】关押罪犯(并查集补集,拆点)
- 【poj3263】Tallest Cow(差分数组)
- c语言判断字符串的编码,C语言中判断一个char*是不是utf8编码
- sql for循环_【赵强老师】什么是PL/SQL?
- JavaScript变量、属性、函数、方法的区别(1)
- winform的picturebox如何设置背景颜色为无背景颜色