早期有很多3D CAD软件用的是固定渲染管线,以及OpenGL立即模式(就是那一堆glBegin开始的API调用)
而DirectX从Direct3D 8开始就使用可编程渲染管线了,两种编程模型相差还是很多的,没有办法逐步迁移。
直白的说,这些软件只需要一个3D版本的canvas,而不想关心怎么用VBO管理显存里的对象,让CPU管理顶点也不是不行,显卡当一个硬件光栅化器使用。
由于Direct3D 9在Windows Visita之前是微软专为游戏开发的(2D渲染走GDI驱动),因此这些CAD软件普遍继续使用OpenGL。
自从OpenGL 3.x开始,就有Core Profile和Compatibility Profile。Core Profile只支持可编程渲染管线(新API),而Compatibility Profile可以使用一些较老的API。
仔细查看这些3D软件的要求,OpenGL的版本要求都非常低,根本无法对应新的DirectX功能,这是因为这些CAD软件都在使用Compatibility Profile。
通常显卡的功能可以在不同的API之间影射,比如OpenGL 2.x对应DX9,OpenGL 3.x对应DX10,OpenGL 4.x对应DX11x。
而大部分CAD都只要求OpenGL 3.x,对应的DX10都是2006年的老文物了,显然这些软件根本用不到高版本API的功能,比如OpenGL 4.x必需的曲面细分。
像Nvidia的创作驱动,一部分就是为这些Compatibility Profile的OpenGL程序提供支持,GPU驱动可以在CPU上把旧的API调用翻译为适应现代API的代码。
也是由于Compatibility Profile的原因,这些软件也无法使用Angle这些转译OpenGL ES到Direct3D的转译层。