zoukankan      html  css  js  c++  java
  • DirectX API 记录几个重要的结构体

    这篇文章记录DirectX  10.0中几个重要的结构体。

    1. ID3D10Device:

        Direct3D 10.0的适配器,用来准备渲染, 创建Direct3D 资源,创建shader。

    2. D3D10_DRIVER_TYPE:

        Device的类型

    1 typedef enum D3D10_DRIVER_TYPE
    2 {
    3 D3D10_DRIVER_TYPE_HARDWARE = 0,//通过直接接口访问硬件
    4   D3D10_DRIVER_TYPE_REFERENCE = 1,//通过直接接口访问创建的软件仿真设备
    5   D3D10_DRIVER_TYPE_NULL = 2, //使用参考设备,但不能用于渲染
    6   D3D10_DRIVER_TYPE_SOFTWARE = 3,//留着以后用
    7  } D3D10_DRIVER_TYPE;

    3. ID3D10RenderTargetView:

        可以想象为一个画布,所有的东西都在其上面画。我们可以看下其继承关系:

    view

    4. ID3D10Resource:

        一个关于资源的接口。

        广义地讲,Direct3D中的资源就是两种: Buffer 和 textures.

    Buffer: 如 Vertex Buffer, Index buffer, Constant buffer

    Textures: 用来存储纹理的结构体。

    resource

    5. DXGI_SWAP_CHAIN_DESC:

        描述一个swap chain, 总是用来在创建Deviece和swap chain的时候当设置参数的东西用。

    补充:DXGI------DirectX Graphics Infrastructure(DirectX 图像基础设施)

        DXGI 是以后Dirext 的后续版本的公共基础, 它封装了一些基本底层的常量和操作, 可以使以后的不同API共享一部分资源。

    DXGI

    6. D3D10_INPUT_ELEMENT_DESC

        我们可以自己定义一个结构体来描述顶点,但是注意的是这些点是定义在系统内存中的。然后,当我们把这些点转化为GPU的Verter Buffer的时候, 我们只是提供一个一块线性的区域。GPU必须知道这些点是怎么分布的(提取争取的属性---如何从结构体中提取各自的信息)。D3D10_INPUT_ELEMENT_DESC就是为了这个功能准备的。

    ex:

    1 D3D10_INPUT_ELEMENT_DESC layout[] =
    2 {
    3 { L"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
    4 };
    5 UINT numElements = sizeof(layout)/sizeof(layout[0]);

    7. IDXGISwapChain

        实现一个或多个surface在输出之前的存储渲染。

    可以看下这个接口提供的的功能函数:

    IDXGISwapChain::GetBuffer

    取得后置缓存
    IDXGISwapChain::GetContainingOutput 取得输出量.
    IDXGISwapChain::GetDesc 取得swapchain的描述
    IDXGISwapChain::GetFrameStatistics 取得渲染状态
    IDXGISwapChain::GetFullscreenState 取得输出量(only for full-screen mode).
    IDXGISwapChain::GetLastPresentCount 得到上一帧调用Present的数量
    IDXGISwapChain::Present Presents the frame buffer to the output
    IDXGISwapChain::ResizeBuffers 改变后置缓存大小和格式
    IDXGISwapChain::ResizeTarget 改变输出量属性
    IDXGISwapChain::SetFullscreenState 改变输出量的窗口和全屏模式 (输出量IDXGIOutput 接口

    8. D3D10_BUFFER_DESC

        描述一个 Buffer 资源

    1 typedef struct D3D10_BUFFER_DESC {
    2 UINT ByteWidth; //buffer的大小
    3   D3D10_USAGE Usage; //指定CPU或GPU读取资源的方式
    4   UINT BindFlags; //指定buffer的绑定方式
    5   UINT CPUAccessFlags; //指定CPU访问权限
    6   UINT MiscFlags; //指定其他buffer选项,比如是否共享
    7 } D3D10_BUFFER_DESC;

    9. D3D10_SUBRESOURCE_DATA

    为subresource指定数据, 主要为CreateBuffer服务。

    1 typedef struct D3D10_SUBRESOURCE_DATA
    2 {
    3 const void *pSysMem; //要初始化的数据
    4 UINT SysMemPitch; //
    5 UINT SysMemSlicePitch; //
    6 } D3D10_SUBRESOURCE_DATA;

    10. D3D10_INPUT_ELEMENT_DESC

    D3D10一个明显的变化,全面取代固定流水线

    1 typedef struct D3D10_INPUT_ELEMENT_DESC {
    2 LPCSTR SemanticName; //shader输入部分关联的语义
    3 UINT SemanticIndex; //语义编号
    4 DXGI_FORMAT Format; //输入部分的格式
    5 UINT InputSlot; //IA stage的位置
    6 UINT AlignedByteOffset; //位置的偏移
    7 D3D10_INPUT_CLASSIFICATION InputSlotClass;//输入的单顶点还是复合数据实例
    8 UINT InstanceDataStepRate;//使用复合数据实例时的步进
    9 } D3D10_INPUT_ELEMENT_DESC;

    11. D3D10_SUBRESOURCE_DATA

     描述被复制到vertex buffer 的数据。通常的用法是:

    1 SimpleVertex vertices[] =
    2 {
    3 D3DXVECTOR3( 0.0f, 0.5f, 0.5f ),
    4 D3DXVECTOR3( 0.5f, -0.5f, 0.5f ),
    5 D3DXVECTOR3( -0.5f, -0.5f, 0.5f ),
    6 };
    7 ……
    8 D3D10_SUBRESOURCE_DATA InitData;
    9 InitData.pSysMem = vertices;


  • 相关阅读:
    如何让呼吸机用得更好:4款最好用的鼻枕面罩
    睡眠呼吸机的保养步骤
    干货!科学调整桌椅键盘高度和显示器距离,告别办公疲劳!
    羽绒服的选择标准
    为什么有些羽绒服穿一季就不暖和了?
    不想加班开发管理后台了,试试这个 Java 开源项目吧!
    HelloGitHub 月刊最受欢迎的开源项目 Top10(2020 年)
    SonarQube学习(四)- 使用Jenkins集成JaCoCo和SonarQube检查代码测试覆盖率
    解决 Jenkins 安装插件很慢的问题 ( Linux )
    Docker学习(二)- Docker 安装 Jenkins
  • 原文地址:https://www.cnblogs.com/sld666666/p/1833449.html
Copyright © 2011-2022 走看看