原文: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(),不适用于多重采样后台缓冲区

【转载】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. 洛谷 P4783 【模板】矩阵求逆

    题目分析 模板题. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e ...

  2. Linux调整系统时间

    1.yum search ntp(搜索可安装的ntpn) 2.yum install ntp.x86_64 3.service ntpd start 4.ps -ef | grep ntpd 5.da ...

  3. flume MemoryChannel 源代码解析

    1.先分析三个LinkedBlockingDeque<Event>类型的takeList,putList,queue putList:  存放的是来自source生产的数据,通过调用doP ...

  4. 「LGP4719【模板】动态dp」

    题目 尽管知道这个东西应该不会考了,但是还是学一学吧 哎要是去年noip之前学该多好 动态\(dp\)就是允许修改的一个\(dp\),比如这道题,我们都知道这是一个树上最大点权独立集 众所周知方程长这 ...

  5. 使用navigator.userAgent来进行浏览器嗅探

    /*--------------------------------------------------------------------------------* * 功能描述:使用navigat ...

  6. 如何利用java程序实现加密所需的公钥、密钥、数字证书

    本篇的主要目的在于实现pdf的数字签名问题,只是作为我学习知识的总结. 1.数字签名算法的概述 本部分主要参考于:https://blog.csdn.net/lovelichao12/article/ ...

  7. CSU 1598 最长公共前缀 (简单KMP或者暴力)

    Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 226     Solved: ...

  8. git删除本地保存的账号和密码

    使用git在本地拉过一次代码时候git会自动将用户名密码保存到本地. 导致想用别的用户名和密码拉代码时没有权限,这时需要删除或者修改git在本地保存的账户名和密码. 具体办法如下: 1.控制面板--& ...

  9. Js读取Excel

    1,使用此代码,一定将浏览器中跟ActiveX有关的功能都开启!同时将站点添加到可信任的站点中. function getCount(filePath) { var cn = new ActiveXO ...

  10. Android 把url生成二维码并贴到给定的底图上

    主要是用到了com.google.zxing jar包生成二维码的功能,这个jar包需要自己接下载 直接上代码 public static Bitmap CreateBinaryCodeImageBy ...