|
|
GLSL 7.1
Creating Shader Objects
使用GLSL的API类似编写C\C++程序:编写源代码,编译,链接,最后运行。
那么,在传统的GL中我们如何实现这个过程呢?首先必须要能储存源代码,编译代码与可执行的代码呀。我们定义了二种新的GL对象,并提供了相关的操纵方法,实现类似编写C\C++程序的过程。当生成这样的一个对象时,GL就返回一个它的句柄以供我们操作。
生成shader是驱动可编程图形引擎的第一步。这将成一个存有源代码的结构。创建一shader对象的函数是:
GLhandleARB?glCreateShaderObjectARB(GLenum?shaderType
生成了一个空shader对象,返回它的句柄。shaderType有二种,GL_VERTEX_SHADER_ARB与GL_FRAGMENT_SHADER_ARB。GL_VERTEX_SHADER_ARB用来代替传统的顶点处理管线,类似,GL_FRAGMENT_SHADER_ARB用来代替传统的象素处理管线。
生成这样的对象后,该提供我们辛苦编写的代码了。代码其实是就一字符数组,可以是在程序里自定的字符数组,也可以是外部文本文件。函数如下。
void?glShaderSourceARB(GLhandleARB?shader,?
???????????????????????GLuint?nstrings,?
???????????????????????const?GLcharARB?**strings,?
???????????????????????GLint?*lengths)
先解释一下各个参数。GLhandleARB,即前面生成的那个对象。nstrings,指定了被传递进来的字符数目,当然应当等于strings的大小。strings,指定代码来源。*lengths,如果是null或小于0,GL认为字符串以null结束,若传递了一个有效指针,则其中的数字限制着字符串中的长度。一般都是NULL。现在,我们仅仅只是拷贝字符到shader对象里去,函数返回后,可以立刻自由的操作源字符数组,修改,释放内存。
这个接口提供了一些有趣的特性,仿照了C程序的特征,如#define宏操作,#include包含等等。
____________________________________________________
如果大家觉得小生文笔还可以我就继续了 |
|