【转载】Direct3D基础知识

原文:Direct3D基础知识

 

重新从头开始学习DX,以前太急于求成了,很多基础知识都没掌握就开始写程序了,结果出了问题很难解决.
1.       D3D体系结构
D3D与GDI处与同一层次,区别在于,D3D可以使用HAL(Hardware Abstraction Layer)通过DDI来访问图形硬件,充分发挥硬件性能.
2.       D3D设备对象
2.1 D3D设备类型
HAL,支持硬件加速光栅化和硬件或软件处理
Software Device,硬件模拟层
REF,reference device,SDK专用.不过nVidia的PerfHUD就是用的这种设备类型
2.2   D3DPRESENT_PARAMETERS
1: typedef struct D3DPRESENT_PARAMETERS {
 2:     UINT BackBufferWidth, BackBufferHeight;//后台缓冲区宽高
 3:     D3DFORMAT BackBufferFormat;//后台缓冲区像素格式
 4:     UINT BackBufferCount;//后台缓冲区的数量
 5:     D3DMULTISAMPLE_TYPE MultiSampleType;//多重采样类型,用于反锯齿
 6:     DWORD MultiSampleQuality;
 7:     D3DSWAPEFFECT SwapEffect;//后台缓冲区复制到前台缓冲区的方式
 8:     HWND hDeviceWindow;//图形绘制窗口
 9:     BOOL Windowed;//窗口/全屏
10:     BOOL EnableAutoDepthStencil;
11:     D3DFORMAT AutoDepthStencilFormat;
12:     DWORD Flags;
13:     UINT FullScreen_RefreshRateInHz;//刷新速率,窗口时必须为0
14:     UINT PresentationInterval;
15: } D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
BackBufferWidth与BackBufferHeight为0时系统自动使用当前窗口客户区宽高
BackBufferCount取0和1时都表示一个后台缓冲区
hDeviceWindow为NULL时默认为当前被激活的窗口
BackBufferFormat取D3DFMT_UNKNOWN时,像素格式取当前显卡的像素格式
2.3   CreateDevice中的BehaviorFlag
D3DCREATE_HARDWARE_VERTEXPROCESSING,硬件顶点运算
D3DCREATE_MIXED_VERTEXPROCESSING,软硬件共同进行顶点运算
D3DCREATE_MULTITHREADED,多线程绘制,会降低性能
D3DCREATE_SOFTWARE_VERTEXPROCESSING,软件顶点运算
              通常某些集成显卡不支持硬件顶点运算,如intel 的GMA900/950
2.4   D3D绘制
Clear(),可以清空颜色缓冲区,深度缓冲区,模板缓冲区.可以选择清除区域
BeginScene()和EndScene()不允许嵌套
Present(),可以指定更新区域(脏矩形技术?),不过要求用D3DSWAPEFFECT_COPY
3.       D3D设备对象
全屏模式:
枚举显示适配器(多显示器适用)
IDirect3D9::EnumAdpterModes()枚举支持的显示模式
IDirect3D9::CheckDeviceType()检测显示模式是否支持硬件加速
IDirect3D9::GetDeviceCaps()检查渲染设备是否支持所需要的功能(显卡兼容性检测)
IDirect3D9::CheckDeviceFormat()检测其它表面格式是否支持
IDirect3D9::CheckDepthStencilMatch()检测深度/模板缓冲区是否和渲染目标兼容
IDirect3D9::CheckDeviceMultiSampleType()检查设备是否支持多重采样(反锯齿用)
窗口模式:
直接用D3DADAPTER_DEFAULT就可以忽略前两步了,剩下的都一样
设备丢失:
图形显示丢失焦点,必须重新创建相关资源
任何显存资源在设备丢失时必须销毁,包括CreateAdditionalSwapChain()创建的交换链和D3DPOOL_DEFAULT格式的内存资源
4.       D3D表面
表面格式:通常有两个属性,表面大小与颜色位数
表面翻转:将后台缓冲区移动到前台缓冲区的过程
交换链:按顺序逐个提交到前台显示的多个后台缓冲区的集合
多个视图的应用程序用多个交换链
访问表面内存:IDirect3DSurface9::LockRect(),不适用于多重采样后台缓冲区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Xcode隐藏打印的logs的方法

https://www.cnblogs.com/jukaiit/p/5881062.html 第一步: 第二步: 第三步: 添加参数: Name :OS_ACTIVITY_MODE Value : disable

指针函数与函数指针的区别

首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。 类型标识符 *函数名(参数表)int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用…

C++走向远洋——63(项目二2、两个成员的类模板)

*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhello * 完成日期:2016年6月4日 * 版本号:V1.0 * 问题描述&…

iOS 抓包工具 charles工具

在Charles官网下载最新的 安装包 在电脑上安装完成之后,以 注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 进行注册即可完成 在手机上面设置代理:输入电脑的网络IP以及端口号 以下为查找的步骤: 在手机上手…

写一个Android输入法01——最简步骤

本文演示用Android Studio写一个最简单的输入法。界面和交互都很简陋,只为剔肉留骨,彰显写一个Android输入法的要点。 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity:我给该输入法命名为…

谈谈自己对于Auth2.0的见解

Auth的原理网上有很多,我这里就不在赘述了。 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这个流程,模拟了下部分代码,当然是…

iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改变,将此事件一直传递下去程序运行过程中屏幕方向改变会调用- (void)viewWillTransitionToSize:…

C++ Vector 汇总

C vector erase函数最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项。 在Cprimer中对c.erase(p) 这样解释的:c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。起因 在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime…

C++中模板使用详解

转自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值&#xf…

腾讯2016春招安全岗笔试题解析

腾讯2016春招安全岗笔试题解析 昨天(4月2日)晚上7:00到9:00做了腾讯春招安全岗的笔试题。下面解析一下: 题目解析 1 在生成随机数前用当前时间设置随机数种子应该是安全的。如果程序用固定的数产生随机数,其结果也是固定的。如果用…

VS项目属性的一些配置项的总结(持续增加。。。)

首先,解决方案和项目文件夹包含关系(c项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系:假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层…

子元素增加margin-top会增加给父元素的问题

假设我们有如下代码 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Zend Studio使用教程之升级Zend Studio(1/3)

2019独角兽企业重金招聘Python工程师标准>>> Zend Studio是新一代的专业级智能PHP IDE&#xff0c;它旨在帮助开发人员提高工作效率&#xff0c;创造出高品质的PHP应用程序&#xff01;它包含了PHP开发所必须的部件&#xff0c;通过一整套的编辑、调试、分析、优化和…

java中可重入锁的学习总结

2019独角兽企业重金招聘Python工程师标准>>> 经常看到网上的人说&#xff0c;可重入锁一词&#xff0c;但是总是没怎么了解&#xff0c;到底什么是可重入锁&#xff0c;一直是一个模糊的概念&#xff0c;下面来大致总结一下。 可重入锁&#xff1a;指的是同一个线程…

基于用户投票的排名算法(一):Delicious和Hacker News

互联网的出现&#xff0c;意味着"信息大爆炸"。 用户担心的&#xff0c;不再是信息太少&#xff0c;而是信息太多。如何从大量信息之中&#xff0c;快速有效地找出最重要的内容&#xff0c;成了互联网的一大核心问题。 各种各样的排名算法&#xff0c;是目前过滤信息…

Windows 下 Python 环境搭建

简述Python 是跨平台的&#xff0c;可以运行在 Windows、Mac OS X 和各种 Linux/Unix 系统上。在学习 Python 之前&#xff0c;首先要搭建 Python 环境。完成后&#xff0c;会得到 Python 解释器&#xff08;负责运行 Python 程序的&#xff09;&#xff0c;一个命令行交互环境…

面试中关于Java你所需知道的的一切

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结&#xff0c;帮助我们在面试中更加得心应手&#xff0c;不参加面试的同学也能够借此机会梳理一下自己的知识体系&#xff0c;进行查漏补缺。 1. Java中的原始数据类型都有哪些&#xff0c;它们的大小及对应的封装类是什…

利用BBRSACryptor实现iOS端的RSA加解密

背景 RSA这种非对称加密被广泛的运用于网络数据的传输&#xff0c;但其在iOS上很难直接实现&#xff0c;BBRSACryptor框架通过移植openssl实现了iOS端的RSA&#xff0c;本文将介绍如何使用BBRSACryptor生成证书&#xff0c;加载公钥&#xff0c;以及后端如何用php读取证书&…

Linux(Fedora21)安装google chrome浏览器

2019独角兽企业重金招聘Python工程师标准>>> Linux(Fedora21)安装Google Chrome浏览器 qianghaoaho(孤狼) 1.添加google chrome的源&#xff1a; cd /etc/yum.repos.d/ vim chrome.repo添加如下内容&#xff1a; [google64] …