OpenGL/DX与GDI的实现有啥具体区别呢其中哪些后缀名的文件起啥作用呢

从问问题的方式来看感觉你计算机相关的基础知识还是比较薄弱,这里也很难用短短几百个字解释清楚。总的来说你还是需要多学习相关的知识,然后就明白了。
因此这里比较简单地直接回答你标题里的两个问题:
GDI是一套绘图接口,设计目的是用来绘制GUI(应用程序图形界面)。其不依赖显卡,也应该根本不用显卡(最新的情况我没跟踪,不知道现在是否有显卡扩展),是一套使用CPU进行绘图的函数接口。OpenGL/DX也是绘图接口,但是是为多媒体应用/游戏设计的,高度依赖显卡。你可以把它们理解称为显卡驱动的二次封装,目的是为开发人员提供比显卡驱动友好的编程界面(当然其实也是为了抽象不同厂家驱动的差异,为显卡厂商编写驱动提供统一的技术要求,隐藏显卡实际的工作原理细节,保护显卡厂家的知识产权)你所说的一大堆奇怪后缀的文件不知道具体指什么。一般来说并不存在GDI/OpenGL/DX专用的后缀,也不存在驱动专用的后缀(当然,有几个例外,比如.fx, .sys)。.h/.lib/.dll是Windows平台下的C/C++头文件、静态库文件和动态库文件,不仅GDI/OpenGL/DX是以这种方式提供其接口,所有的C/C++库都是这样。这本身与GDI/OpenGL/DX以及显卡驱动没有任何必然的联系。
■网友
那么OpenGL也是调用函数,它有自己的头文件.h、库文件.lib、配置文件.dll,那么它还是要通过驱动程序实现吗?是的,nVidia和AMD还有intel都要为自己的gpu在相应的操作系统上实现OpenGL,这里的“实现”就是响应用到OpenGL的图形程序调用的所有Khronos制定的标准函数,不仅仅是OpenGL core feature,有的厂商还会有自己的extension,也都会在驱动程序里面一并实现。
它有自己的头文件.h、库文件.lib、配置文件.dll这里在msdn上截了一张图,对于题主比较疑惑的各种动态和静态库,头文件之类的作用,第二列应该写的比较清楚了。
OpenGL/DX与GDI的实现有啥具体区别呢其中哪些后缀名的文件起啥作用呢


DirectX又是如何通过COM组件实现多媒体驱动呢?参考另外一个答案,这里跟COM没啥关系。DirectX的解释同OpenGL基本一样。我顺便查了一些WDDM(windows display driver model,windows显示驱动模型,题主你应该是对这个感兴趣)的资料(所有图片均来自msdn),和题主交流一下吧:
OpenGL/DX与GDI的实现有啥具体区别呢其中哪些后缀名的文件起啥作用呢

这张图顺便还带着GDI(没怎么接触过,略去),gpu厂商必须实现用户态的显示驱动和和核心态的Display miniport 驱动,一个用到DirectX3D的应用程序需要相应版本的DirectX运行时(可以联系下过去下破解版游戏出现过的各种找不到d3d11_43.dll之类的错误),DirectX运行时会动态的调用gpu厂商编写的用户态显示驱动。深一层核心态的display miniport驱动和DirectX子系统进行交互,DirectX子系统和DirectX运行时交互(这些看图就能看出来,另外OpenGL比DirectX还多了一层)。
我们继续深入,看看DirectX3D运行的大概:
Windows Display Driver Model (WDDM) Operation Flow
OpenGL/DX与GDI的实现有啥具体区别呢其中哪些后缀名的文件起啥作用呢

到这里应该非常清楚了,显卡驱动被分成了两个部分,分别运行在用户态与核心态,并且各自与DirectX3D的两部分进行交互,两部分驱动并不直接沟通,而是通过d3d运行时和dx图形子系统来进行。
首先,
图中①②③是创建device的流程:游戏或者3d应用程序在(使用D3D11CreateDevice?)发出创建device申请后,核心态的驱动miniport会收到该申请(显然是通过d3d),并在DMA内存区域内填充device的相关信息以供使用(内核态驱动实现)。如果刚刚内核态的操作成功,那么d3d运行时会调用CreateDevice这个函数(用户态驱动实现),成功后用户态驱动再调用d3d运行时的函数(d3d自己来实现)来初始化context(大概跟d3d11中的device context有关),到这一步device基本就创建完成了。(未完待续)


推荐阅读