TA的每日心情 | 开心 2019-11-11 10:36 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
GLSL教程
译:FreeSouth
创建应用
下图描述了如何创建一个shader的应用:
第一步是创建一个对象,可以看作是应用的容器,返回容器的句柄。
在OpenGL2.0中的语法为:
________________________________________
GLuint glCreateProgram(void);
________________________________________
在ARB扩展中的语法为:
________________________________________
GLhandleARB glCreateProgramObjectARB(void);
________________________________________
你可以创建很多programs,一旦你开始渲染,你可以在那些program中来回切换,甚至可以回过头来在一帧的时间里修改某一个programs。比如你可以渲染一个带反射和折射的茶壶,而后再利用OpenGL的固有功能画一个什么正方体的盒子当背景。
下一步是绑定shader到应用程序当中,此时不需要再编译shader了,甚至不需要它有源码,只需要shader的容器就可以了。
绑定一个shader到程序当中,OpenGL2.0的语法为:
________________________________________
void glAttachShader(GLuint program, GLuint shader);
参数:
program - the handler to the program.
shader - the handler to the shader you want to attach.
________________________________________
使用ARB扩展为:
________________________________________
void glAttachObjectARB(GLhandleARB program, GLhandleARB shader);
参数:
program - the handler to the program.
shader - the handler to the shader you want to attach.
________________________________________
如果同时有顶点和片元着色器都需要绑定到程序,像C语言多个模块每个模都只有一个实现一样,每个着色器也只能有一个主函数。
你可以绑定该着色器到很多应用程序,这个没有限制。
最后一步是链接应用程序,最了成功链接,shader必须像前一节所说的那样编译成功。
链接语法在OpenGL2.0中为:
________________________________________
void glLinkProgram(GLuint program);
参数:
program - the handler to the program.
________________________________________
在ARB扩展中为:
________________________________________
void glLinkProgramARB(GLhandleARB program);
Parameters:
program - the handler to the program.
________________________________________
在链接程序以后,shader源码再做修改或者重新编译都不会影响应用程序了。
就像上面图中所说的,有一个函数加载并执行了program,在OpenGL2.0为glUseProgram,在ARB扩展中是glUseProgramObjectARB。你可以有很多的program创建,链接等待加载和执行。
OpenGL2.0的语法:
________________________________________
void glUseProgram(GLuint prog);
参数:
prog - the handler to the program you want to use, or zero to return to fixed functionality
________________________________________
使用ARB扩展:
________________________________________
void glUseProgramObjectARB(GLhandleARB prog);
参数:
prog - the handler to the program you want to use, or zero to return to fixed functionality
________________________________________
如果一个program一旦加载使用,如果被重链接,它就会自动的重加载执行。所有在这种情况下,你不需要手动再调用这个函数了。如果参数为0,则OpenGL固定管线功能被启动了。
原文地址:http://www.lighthouse3d.com/opengl/glsl/index.php?oglprogram
OpenGL-创建一个Shader.pdf
(104.38 KB, 下载次数: 666)
|
|