OpenGL和OpenGL Shading Language的关系?

 我来答
xiangjuan314
2016-04-14 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2925万
展开全部
打个比方,你的PC上运行着一个使用了 opengl 的客户端程序,这个客户端程序同时会访问一个服务器(显卡)提供的服务,那么 shader 就是你上传到服务器上进行运行的程序。

这个“服务器”(显卡)比较特殊,提供很特定的服务(把客户端提供的 3d 几何图形,根据摄像机位置等参数,经过一系列计算,转换成屏幕显示缓冲区 [framebuffer] 中的 RGB 数据)(这就是渲染流水线,原来由 opengl 在以软件形式提供主要部分,大部分由 CPU 负责,显卡负责一小部分例如只负责栅格化,随着显卡硬件技术发展,目前这个流水线,基本全部移至显卡硬件中了,从而解放了 CPU 的负担,让 CPU 可以关注更重要的游戏逻辑部分。)。shader 就是服务器上运行的服务中的一些组件(比如说,你可以理解为需要符合某个接口的 dll,相当于插件),所以你需要上传你的 shader 组件给“服务器”,然后“服务器”就会调用你提供的组件(shader program)。

因为这个任务比较特殊,所以使用的编程语言也比较特殊,最早是类似汇编,但是这样写 shader 毫无疑问也太困难了点。所以后来就发展出了类 C 的高级语言,这就是 shader language。

opengl 制定了这样的规范,程序员按照语言规则,写出 shader 源码,由 opengl - 显卡(这两者通常是难以区分的,因为硬件厂商也提供 opengl implement),像普通开发过程一样,编译,链接成“服务器”可执行组件,提交给“服务器”(显卡)。

因此,程序员实际上同时负责客户端程序(CPU)的全部和“服务器”程序(GPU)的一部分。shader 提供给程序员根据自己的需要定制渲染结果的灵活性。

shader 有多种,分别对应着渲染过程的不同环节。最基本的两个是 vertex shader 和 fragment shader。(后者在DirectX 中叫 )

vertex shader 设置几何图形的位置,并向 fragment shader 提供重要的数据。
fragment shader 主要在栅格化时为几何图形填充像素,换句话说,设置三角形内部点的 RGB。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式