查看: 4372|回复: 0

GLSL教程(6) 创建一个应用

[复制链接]
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-6-2 23:00:37 | 显示全部楼层 |阅读模式
    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)
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表