什么是OpenGL/DirectX 什么是HLSL﹑GLSL﹑Cg 什么是Draw Call

什么是OpenGL/DirectX

如果要开发者直接访问GPU是一件非常麻烦的事情,我们可能需要和各种寄存器﹑显存打交道。而图像编程接口在这些硬件的基础实现了一层抽象。

OpenGL和DirectX就是这些图像应用编程接口,这些接口用于渲染二维或三维图形。这些接口架起了上层应用程序和底层GPU的沟通桥梁。一个应用程序向这些接口发送渲染命令,而这些接口会依次向显卡驱动(Graphics Driver)发送渲染命令,这些显卡驱动是真正知道如何和GPU通信的角色,正是它们把OpenGL或者DirectX的函数调用翻译成了GPU能够听懂的语言,同时它们负责把纹理等数据转换成GPU所支持的格式。

我们的应用程序运行在CPU上。应用程序可以通过调用OpenGL或DirectX的图形接口将渲染所需的数据,如顶点数据﹑纹理数据﹑材质参数等数据存储在显存中的特定区域。随后,开发者可以通过图像编程接口发出渲染命令,这些渲染命令也被称为Draw Call,它们将会被显卡驱动翻译成GPU能够理解的代码,进行真正的绘制。

因为显卡驱动的存在,几乎所有的GPU都既可以和OpenGL合作,也可以和DirectX一起工作。从显卡的角度出发,实际上它只需要和显卡驱动打交道就可以了。而显卡驱动就好像一个中介者,负责和两方(图像编程接口和GPU)打交道。因此,一个显卡制作商为了让它们的显卡可以以同时和OpenGL﹑DirectX合作,就必须提供支持OpenGL﹑DirectX接口的显卡驱动。

什么是HLSL﹑GLSL﹑Cg 

着色语言是专门用于编写着色器的,常见的着色语言有DirectX的HLSL(High Level Shading Language)﹑OpenGL的GLSL(OpenGL Shading Language)以及NVIDIA的Cg(C for Graphic)。这些语言会被编译成与机器无关的汇编语言,也被称为中间语言。

GLSL的优点在于跨平台性,它可以在Window﹑Linux﹑Mac甚至移动平台等多种平台上工作,但这种跨平台是由于OpenGL没有提供着色器编译器,而是由显卡驱动来完成着色器的编译工作。换句话说,GLSL是依赖硬件,而非操作系统层级的。但这也意味着GLSL的编译结果将取决于硬件供应商。

而对于HLSL,是由微软控制着色器的编译,就算使用了不同的硬件,同一个着色器的编译结果也是一样的(前提是版本相同)。但也因此支持HLSL的平台相对比较有限,几乎完全是微软自己的产品。其他平台没有可以编译HLSL的编译器。

Cg则是真正意义上的跨平台。它会根据平台的不同,编译成相应的中间语言。Cg语言的跨平台性很大原因取决于与微软的 合作,这也导致Cg语言的语法和HLSL非常相像,Cg语言可以无缝移植成HLSL代码。但缺点是可能无法完全发挥出OpenGL的最新特性。

什么是Draw Call

就是CPU调用图像编程接口,如OpenGL中的glDrawElements命令或者DirectX中的DrawIndexedPrimitive命令,以命令GPU进行渲染的操作。

参考我买的 Unity Shader入门精要

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值