原文: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. 1: typedef struct D3DPRESENT_PARAMETERS {
  1. 2:     UINT BackBufferWidth, BackBufferHeight;//后台缓冲区宽高
  1. 3:     D3DFORMAT BackBufferFormat;//后台缓冲区像素格式
  1. 4:     UINT BackBufferCount;//后台缓冲区的数量
  1. 5:     D3DMULTISAMPLE_TYPE MultiSampleType;//多重采样类型,用于反锯齿
  1. 6:     DWORD MultiSampleQuality;
  1. 7:     D3DSWAPEFFECT SwapEffect;//后台缓冲区复制到前台缓冲区的方式
  1. 8:     HWND hDeviceWindow;//图形绘制窗口
  1. 9:     BOOL Windowed;//窗口/全屏
  1. 10:     BOOL EnableAutoDepthStencil;
  1. 11:     D3DFORMAT AutoDepthStencilFormat;
  1. 12:     DWORD Flags;
  1. 13:     UINT FullScreen_RefreshRateInHz;//刷新速率,窗口时必须为0
  1. 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(),不适用于多重采样后台缓冲区

【转载】Direct3D基础知识的更多相关文章

  1. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

  2. (转载)Java基础知识总结

    写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技 ...

  3. [转载]Oracle基础知识

    一.oracle安装过程略 二.sys用户和system用户 (1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限 默认密码是change_onins ...

  4. <转载>AWS 基础知识

    什么是AWS? Amazon Web Services (AWS) , 其实就是 亚马逊提供的专业云计算服务.其提供服务包括:亚马逊弹性计算网云(Amazon EC2).亚马逊简单储存服务(Amazo ...

  5. 转载 Deep learning:一(基础知识_1)

    前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下m ...

  6. 转载:shell脚本之前的基础知识

    转载地址:http://www.92csz.com/study/linux/12.htm 第十二章 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果 ...

  7. RabbitMQ基础知识(转载)

    RabbitMQ基础知识(转载) 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需 ...

  8. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  9. 【转载】Python编程中常用的12种基础知识总结

    Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

随机推荐

  1. Java(Android)编程思想笔记03:在Android开发中使用MVP模式

    1. MVP模式简介: MVC模式相信大家肯定是比较熟悉的:M-Model-模型.V-View-视图.C-Controller-控制器. MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M- ...

  2. No.7 - 使用 animate.css 实现一个优雅的登录框

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  3. 404 Note Found队-现场编程

    目录 组员职责分工 github 的提交日志截图 程序运行截图 程序运行环境 GUI界面 基础功能实现 运行视频 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能一 背景 实现 附加功能二(迭 ...

  4. Linux环境下部署SpringBoot项目

    1.在pom文件中添加maven插件 <build> <plugins> <plugin> <groupid>org.springframework.b ...

  5. CSS网页布局:盒子模型

    一.盒子模型 标准盒子模型(W3C盒子) 不论是标准盒模型还是IE盒子模型,都有content.padding.border.margin四个部分组成,但从上图也可以看出W3C盒子和IE盒子主要区别在 ...

  6. [iOS]UIFont的lineHeight与pointSize

    写这篇文章的初衷是由于我有一次想获取一个font的字体大小时使用了UIFont的lineHeight属性,结果是比字体的大小要大了一部分,然后经过查阅各种资料,发现了原因. 首先我们来看一看UIFon ...

  7. iOS 第三方库、插件、知名博客总结

    iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...

  8. K3CLOUD开发-动态表单树形单据体实现银行交易对账

    背景:系统手机开单生成销售单据,通过银行pos机收款,系统收款流水与银行流水可能存在差异,所以通过获取银行接口,获取消费信息自动插入到生产系统数据库,开发对账报表,实现差异汇总! 展示效果如下: 开发 ...

  9. Eclipse中按CTRL键点击类不能进入

    是因为Eclipse或项目没有关联jdk,首先看window->preferences->java->Installed JREs,看是不是关联的你所安装的jdk,有的是关联的JRE ...

  10. Ubuntu下apt方式安装与更新Git

    本人使用的系统 Ubuntu 18.04.1 ,使用apt安装Git: sudo apt insatll git 安装后发现不是最新的版本,更新方法: sudo add-apt-repository ...