windows 图形基础架构简介

背景

本文尝试对Windows系统中的一些Graphic相关的概念进行介绍和厘清。

windows图形基础架构简介

Windows 为图形提供了多个 API,下图显示了这些 API。
在这里插入图片描述

上图出自微软官方https://learn.microsoft.com/en-us/windows/win32/learnwin32/overview-of-the-windows-graphics-architecture

  • 图形设备接口 (GDI) 是 Windows 的原始图形接口。 GDI 首先针对 16 位 Windows 编写,然后针对 32 位和 64 位 Windows 进行了更新。
  • GDI+ 作为 GDI 的后续版本在 Windows XP 中引入。 GDI+ 库是通过包装平面 C 函数的一组 C++ 类访问的。 .NET Framework还在 System.Drawing 命名空间中提供 GDI+ 的托管版本。
  • Direct3D 支持三维图形。
  • Direct2D 是适用于二维图形的新式 API,是 GDI 和 GDI+ 的继任者。
  • DirectWrite是文本布局和光栅化引擎。 可以使用 GDI 或 Direct2D 绘制光栅化文本。
  • DirectX 图形基础结构 (DXGI) 执行低级别任务,例如为输出演示帧。 大多数应用程序不直接使用 DXGI。 相反,它充当图形驱动程序和 Direct3D 之间的中间层。

自 Windows 诞生之初,图形编程的主要 API 就是图形设备接口 (GDI)。 此 API 设计用于处理众多 2D 输出设备,是 Windows 用户界面体验的基础。
在这里插入图片描述

该图出自微软官方https://learn.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista

新的驱动程序模型——Windows 显示驱动程序模型 (WDDM) 将 GPU 和 Direct3D 带到了最前沿,允许创建一种全新的体验 - 3D 桌面,从而将 GDI 的 2D 世界与现代可编程 GPU 的强大功能完美融合。 借助 WDDM,视频硬件完全由 Direct3D 驱动,所有其他图形接口都通过新的以 Direct3D 为中心的驱动程序模型与视频硬件通信。
在这里插入图片描述

该图出自微软官方https://learn.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista

有关 WDDM 的详细信息,请参阅 Windows Vista 显示驱动程序模型 (WDDM) 设计指南。

GDI

图形设备接口 (GDI) 是 Windows 的原始图形接口。 GDI 首先针对 16 位 Windows 编写,然后针对 32 位和 64 位 Windows 进行了更新。
GDI+ 作为 GDI 的后续版本在 Windows XP 中引入。

DXGI

Microsoft DirectX 图形基础结构 (DXGI) 的主要目标是管理可以独立于 DirectX 图形运行时的低级别任务。 DXGI 为将来的图形组件提供通用框架;利用 DXGI 的第一个组件是 Microsoft Direct3D 10。

在早期版本的 Direct3D 中,Direct3D 运行时中包含低级别任务,例如硬件设备的枚举、向输出呈现的帧、控制 gamma 以及管理全屏切换。 这些任务现在在 DXGI 中实现。

DXGI 的目的是与内核模式驱动程序和系统硬件通信,如下图所示。
应用程序、dxgi、驱动程序和硬件之间的通信示意图

该图出自微软官方https://learn.microsoft.com/en-us/windows/win32/direct3ddxgi/d3d10-graphics-programming-guide-dxgi

应用程序可以直接访问 DXGI,也可以在 D3D11_1.h、D3D11.h、D3D10_1.h 或 D3D10.h 中调用 Direct3D API,以处理与 DXGI 的通信。 如果应用程序需要枚举设备或控制如何将数据呈现给输出,则可能需要直接使用 DXGI。

DirectX/Direct3D

Direct3D 9

Direct3D 9 是 Windows Vista 的主要图形接口

Direct3D 9Ex

Direct3D 9Ex 接口提供了对标准 Direct3D 9 应用程序接口的轻微扩展。 此 API 仅适用于 Windows Vista,并且需要使用 WDDM 驱动程序。 创建新的 Direct3D 9Ex API 的主要原因是,在保持现有 Direct3D 应用程序兼容性的同时,允许完全访问 WDDM 的新功能。

Direct3D 10

WDDM 消除了现有图形系统中对性能的一些限制,而 Direct3D 10 则更进一步,消除了现有 Direct3D API 中的设计瓶颈,并大大简化了 GPU 的编程任务。
为了在 Direct3D 10 中提供这种级别的创新,旧硬件不能作为新接口的部分实现。 显卡要么能支持所有新功能,要么就不是支持 Direct3D 10 的显卡。 因此,Direct3D 9 可以驱动 DirectX7 时代的硬件,但存在许多功能缺失和使用限制,而 Direct3D 10 只能在新一代显卡上运行。 应用程序要支持旧版视频硬件,还必须支持 Direct3D 9 接口。 Direct3D 的未来版本将以第 10 版为基础,将其扩展到新版本的应用程序接口,同时确保 Direct3D 10 功能的严格超集。

Direct3D 10.1

Windows Vista Service Pack 1 通过 Direct3D 10.1 扩展了 Direct3D 10 API,增加了可选接口和额外的着色器模型,以支持适用于 Direct3D 10.1 的显卡的新硬件功能。 所有能够支持 Direct3D 10.1 的硬件也完全支持 Direct3D 10 的所有功能,游戏开发人员可以在 Direct3D 10.1 提供额外功能时加以利用。

Direct3D 11

Windows 7 支持基于 Direct3D 10.1 API 设计而构建的新版 Direct3D,即 Direct3D 11。 API 的新功能包括多线程呈现和资源创建、计算着色器、支持 10level9 功能级别和 WARP10 软件呈现设备,以及新的 Direct3D 11 类硬件功能,如使用外壳 & 域着色器的分割、BC6H 和 BC7 纹理压缩格式、着色器模型 5.0 和动态着色器链接。 新的 API 可以使用现有的 Direct3D 10 和 10.1 级显卡、某些支持有限功能的 10level9 功能级别的 Direct3D 9 显卡以及最新一代的 Direct3D 11 级显卡。

Direct3D 11.1

Windows 8 通过 Direct3D 11.1 扩展了 Direct3D 11 API。 Direct3D 11.1 支持功能级别 11、10_x 和 9_x 的所有现有硬件,以及新的 11_1 功能级别。

Direct3D 12

Direct3D 12 比以前的任何版本都更快更高效,Direct3D 12 提供的硬件抽象级别比以前的版本低。 Direct3D 12 提供更丰富的场景、更多的对象、更复杂的效果,并且能全面利用现代 GPU 硬件。

兼容性

现有图形接口(如 GDI、GDI+ 和旧版 Direct3D)可在 Windows Vista 和 Windows 7 上继续运行,但会尽可能进行内部重映射。Windows Vista、Windows 7 和 Windows 8 继续支持与 Windows XP 相同的 Direct3D 和 DirectDraw 接口,可追溯到 DirectX 第 3 版(Direct3D 的保留模式除外,该模式已被移除)。 与 Windows XP Professional x64 Edition 一样,较新版本 Windows 上的 64 位本地应用程序只能使用 Direct3D9、 或更新的接口。 高性能应用程序应使用 Direct3D 9 或更高版本,以确保与硬件能力最接近。

OpenGL

Windows Vista、Windows 7 和 Windows 8 提供与 Windows XP 相同的 OpenGL 支持,允许显卡制造商为 OpenGL 提供可安装的客户端驱动程序 (ICD),以提供硬件加速支持。 请注意,此类 ICD 需要更新版本才能完全支持 Windows Vista、Windows 7 或 Windows 8。 如果没有安装 ICD,系统在大多数情况下会退回到 OpenGL v1.1 软件层。
OpenGL演进历史:https://neil3d.github.io/3dengine/gl-brief-history.html

DirectX、Direct3D、Direct2D、DXGI的关系

DirectX(Direct eXtension,缩写:DX)是由微软公司创建的一系列专为多媒体以及游戏开发的应用程序接口。
DirectX组成的组件有:

  • Direct3D:主要用于绘制3D图形。
  • Direct2D:主要提供2D动画的硬件加速,为DirectDraw的替代者。
  • DirectWrite:主要字体显示API,提供使用GPU令字体显示更为平滑,类似ClearType(只支持于Windows Vista/7/8/8.1以上)。
  • DirectInput:用于结合键盘、鼠标、摇杆,或其它的游戏控制器。
  • XInput:主要用于Xbox360的控制器。
  • XAudio2:主要用于低延迟游戏音频播放。
  • DirectCompute:GPU通用计算API。
  • DirectXMath:针对游戏优化的高速数学运算API,特别支持单精度浮点运算及矩阵运算,使用SSE2指令集。
  • DirectSetup:用于DirectX组件的安装,以及检查DirectX的版本。
  • DirectX Media:包含DirectAnimation可用于2D的网页动画,DirectShow可支持多媒体录音以及资料流媒体,DirectX在网页上的转换,还有Direct3D可保留3D图像更清晰的解析。DirectShow亦包含有DirectX插件用于音频信号处理以及DirectX视频加速加速影音播放。
  • DirectX媒体对象化:支持资料流对象,像是编码、解码和效果。

由此可见,DirctX是许多API的一个集合,它里面包含Direct3D和Direct2D。

关于Direct2D、Direct3D和DXGI的关系,直接参考这张图:
在这里插入图片描述
即DXGI提供了更底层的接口。

参考

浅谈window桌面GUI技术及图像渲染性能测试实践
浅谈DWM原理
Overview of the Windows Graphics Architecture
Graphics APIs in Windows
DXGI overview

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

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

相关文章

QML使用Popup实现弹出Message

方案一:popup import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15ApplicationWindow {visible: truewidth: 640height: 480title: qsTr("Top Message Popup Example")ColumnLayout {anchors.centerIn: parentspacing: 10Butt…

Ⅱ.INTRODUCTION TO CUDA C

前言 上一节环境配置好了,我们开始吧! 一、A First Program 1. Hello, World! 我们先写一个C语言的 Hello, World! 作为对比 int main(void){printf("Hello, World!\n");return 0; }大家应该知道这个代码运行在CPU上吧,我们CP…

如何轻松关闭 iPhone 上的 HEIC [HEIC 图像技巧]

您是否正在为关闭 iPhone 上的 HEIC 而烦恼?你不是一个人; Apple 的首选图像文件格式仍可能存在一些兼容性问题。当您与某人共享照片或尝试在Windows计算机上打开图像时,就会出现此问题。幸运的是,Apple 使关闭 HEIC iPhone 变得更加容易。 …

Postgresql 命令还原数据库

因为PgAdmin打不开,但是数据库已经安装成功了,这里借助Pg命令来还原数据库 C:\Program Files\PostgreSQL\15\bin\psql.exe #链接数据库 psql -U postgres -p 5432#创建数据库 CREATE DATABASE "数据库名称"WITHOWNER postgresENCODING UTF8…

docker中使用Volume完成数据共享

情景概述 在一个docker中,部署两个MySQL容器,假如它们的数据都存储在自己容器内部的data目录中。这样的存储方式会有以下问题: 1.无法保证两个MySQL容器中的数据同步。 2.容器删除后,数据就会丢失。 基于以上问题,容…

vue——滑块验证

1. 介绍 1.1 简介 基于滑动式的验证码,免于字母验证码的繁琐输入 用于网页注册或者登录 1.2 来源说明 vue使用滑块验证功能,是基于vue-monoplasty-slide-verify这样的一个开源项目,进行实现的,这是这个开源项目的网址传送阵&#…

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能,选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其,在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换,特别方便。VS文件另…

Unity3D仿星露谷物语开发16之角色拾取道具

1、目标 当角色经过道具时会拾取道具放到库存列表中,此时道具消失并打印库存信息。 2、创建新的Enum 在Assets -> Scripts -> Enums -> Enum.cs中添加库存位置相关的信息。 public enum InventoryLocation {player, // 在角色手中chest, // 在箱子里co…

UE4_用户控件_3_用户控件输入数据的方法

祝愿大美兰陵越来越好! 一、效果展示: 二、先制作一个角色 1、新建个父类为pawn的蓝图类。更名为BP_Image_Character。 2、这个角色只是用于观察场景,并与场景中的物体相碰撞用的,所以不需要骨骼网格体, 3、但是我们…

文献阅读 | B. S. Carmo 2010

目录 一、文献名称二、原文地址三、ABSTRACT主要发现详细观察分岔分析雷诺数依赖性比较见解意义结论 四、IINTRODUCTION历史研究回顾计算研究近期研究进展研究空白与目的论文结构 一、文献名称 二、原文地址 研究目的:研究串列排列双圆柱体周围流场中的次级不稳定性…

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

如何安装适配pytorch版本的torchvision

一、对照版本 版本对照pytorch/vision: Datasets, Transforms and Models specific to Computer Vision 二、下载对应版本的torchvision 下载连接1download.pytorch.org/whl/torch_stable.html 下载连接2download.pytorch.org/whl/cu110/torch_stable.html 笔者认为1会比2更…

Leetcode打卡:我的日程安排表III

执行结果&#xff1a;通过 题目 732 我的日程安排表 III 当 k 个日程存在一些非空交集时&#xff08;即, k 个日程包含了一些相同时间&#xff09;&#xff0c;就会产生 k 次预订。 给你一些日程安排 [startTime, endTime) &#xff0c;请你在每个日程安排添加后&#xff0c;…

TI毫米波雷达原始数据解析之Lane数据交换

TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输&#xff0c;使用mmWave Studio 配置过程中有一个选项是LVDS L…

redis7基础篇3 redis的集群模式3

一 集群模式 1.1 redis的集群模式 Redis集群模式&#xff0c;实现数据集在多个节点进行共享&#xff0c;支持多个master节点。 Redis集群支持多个master&#xff0c;每个master节点又可以挂载多个slave&#xff1b;由于cluster自带sentinel的故障转移机制&#xff0c;内置高…

【嵌入式硬件】直流电机驱动相关

项目场景&#xff1a; 驱动履带车&#xff08;双直流电机&#xff09;前进、后退、转弯 问题描述 电机驱动MOS管烧毁 电机驱动采用IR2104STRH1R403NL的H桥方案&#xff08;这是修改之后的图&#xff09; 原因分析&#xff1a; 1.主要原因是4路PWM没有限幅&#xff0c;修改…

部署项目添加工程名的步骤

1.首先要在router下进行工程名添加 2.其次在vue.config.js中添加publicpath 3.在nginx配置文件中 location /my-app/ {try_files $uri $uri/ /my-app/index.html; }

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水&#xff0c;题型太多太杂&#xff0c;已经准备摆烂了。就刷刷往年试卷&#xff0c;挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项&#xff1f; 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…

【竞技宝】CS2:HLTV 2024 TOP11-w0nderful

北京时间2025年1月4日&#xff0c;HLTV年度选手排名正在持续公布中&#xff0c;今日凌晨正式公布了今年的TOP11为NAVI战队的w0nderful。 选手简介 w0nderful是一名来自于乌克兰的CS选手&#xff0c;现年20岁&#xff0c;目前在比赛中司职狙击手。w0nderful于2020年开启了自己的…

基层医联体医院患者历史检验检查数据的快速Python编程分析

​​​​​​​ 一、引言 1.1 研究背景与意义 在当今数字化医疗时代,医疗数据呈爆炸式增长,涵盖患者的基本信息、病史、检验检查结果、治疗方案等各个维度。这些海量且复杂的数据蕴含着巨大价值,为精准医疗决策提供了关键依据。通过对患者历史检验检查数据的深入对比分析…