OpenGL(八)使用 subroutine 切换可编程管线


Subroutine 功能是在OpenGL 4.0 版本里才增加的,因此对于各种Android手机,这个功能基本跪了。如果你发现你的程序报错:ARB_shader_subroutine,那就说明当前显卡不支持。不过大体思路可以了解一下,因为思路类似的功能有其他的实现方式。

原理

在shader中声明一个函数变量,然后定义它的指针,并将其作为一个uniform变量公开出去。最后定义很多复写函数即可。

实现

由于版本限制,使用 subroutine 要注意在shader中加入版本的编译宏:

在shader中编写:

在shader中,每一个函数中的代码段代表一种处理函数。另一方面在GL指令中,绑定这个函数指针,并为其指定实现函数的索引值,即可实现效果的控制。

总结

本文介绍了OpenGL中的 subroutine 机制,通过它可以切换shader的内容。在Unity3d中使用Shader.maximumLOD技术可以达到类似的效果,相关内容可以参考官方文档

本文出自 松阳论道 转载必须注明出处

http://blog.songyang.net/397.html

说点什么吧...

电子邮件地址不会被公开。 必填项已用*标注