zoukankan      html  css  js  c++  java
  • IDXGIOutput接口

    Output对应是输出设备,显示器、投影仪神马的。

    IDXGIOutput接口提供的功能包括:

    1. 获得显示设备的显示能力:支持哪些图像数据格式,分辨率神马的;

       GetDisplayModeList(), GetDesc(), FindClosestMatchingMode()

    2. 获得和设备的surface数据

       GetDisplaySurfaceData(),SetDisplaySurface()

    3. 获得和释放控制权

       TakeOwnerShip(),ReleaseOwnership() 

    4. Gamma校准相关的

       GetGammaControl(),SetGammaControl(),GetGammaControlCapabilities()

    5. 和垂直扫描相关的

       WaitForVBlank(),GetFrameStatistics() 

    比较关心的是2和3.

    GetDisplaySurfaceData([in] IDXGISurface* )

    获得当前display的surface的拷贝。 

    IDXGISurface继承于IDXGISDeviceSubObject。

    DeviceSubObject只是Device和Surface的中间的逻辑层,没啥过多可关注的。

    Surface持有真正的图像数据。

    IDXGISurface::Map()可得到数据块指针。Unmap()释放。

    在Map和Unmap()之间,GPU不能访问该数据块。

    GetDisplaySurfaceData只能在全屏模式下使用,而且目标surface是CPU可写的D3D10_CPU_ACCESS_WRITE

    SetDisplaySurface([in] IDXGISurface*)

    这个函数功能被描述为 change the display mode.?? =_=

    传入的surface只能是back buffer,即DXGI_USAGE_BACKBUFFER。

    直接调用该函数会有一些意外情况。

    交换链在交换缓冲时会默默调用它。同志们注意最好不要用它来替代交换链的工作。不应该。

    再有这个函数只能在IDXGIOutput::TakeOwnerShip和 IDXGIOutput::ReleaseOwnership对之间使用。

    TakeOwnerShip([in] IUnkown *pDevice, [in] BOOL exclusive)

    和上面的set surface一样,该函数也是“不应该”被应用程序直接调用的。

    而只是提供给交换链默默使用的。 

    ReleaseOwnership()

    同上。略。 

    后仨都是供交换链使用,不难想像SetDispaySurface为啥只能接受back buffer的surface了。

    因为swap chain的sufface就只有back buffer嘛。 

  • 相关阅读:
    mac下的docker的Docker.raw占用空间很大?
    python模块uuid产生唯一id
    缓存溢出Buffer Overflow
    (原创)攻击方式学习之(3)
    JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);
    Java框架安全
    Java Web:主动和被动方式检测安全的框架
    一.配置简单的嵌入式tomcat和jetty
    使用embeded tomcat进行嵌入式javaee开发-启动tomcat
    安全隐患,你对X-XSS-Protection头部字段理解可能有误
  • 原文地址:https://www.cnblogs.com/mumuliang/p/2549286.html
Copyright © 2011-2022 走看看