- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenGL_shader入门教程
Chapter 7. OpenGL Shading 语言的 API ARB_shader_objects, ARB_vertex_shader,和 ARB_fragment_shader引入了新 的API和功能用来支持使用OpenGL Shading Language写shader。这个API集合在本书 中被称为OPENGL SHADING LANGUAGE API。为了检测一个OpenGL的实现是不是支持 OpenGL Shading语言,可以通过调用参数为GL_EXTENSIONS的函数glGetString来获 得一个字符串,检查在返回的字符串里是否含有GL_ARB_shader_objects, GL_ARB_vertex_shader,和GL_ARB_fragment_shader这三个子字符串来判断。这 种机制也可以用来确定是系统是支持的OpenGL Shading 语言的版本号。如果返回的 扩展字符串里含有GL_ARB_shading_language_100,那么OPENGL SHADING LANGUAGE API支持1.00版本的OpenGL Shading语言。 Appendix B. 在这章里,我们将学习新加入的OpenGL函数(entry points),它们用来创建、 加载、编译、和连接shader,这些函数还被用来给shader传递一般的顶点属性和 uniform变量。支持shader的OpenGL 入口函数详细列表见附录B。 在本章的最后,我们将介绍用来创建和使用第6章里的brick shader的程序代 码。如果你已经等不及了,那么请先去看7.11节,然后再回来学习这些API的细节。 下面是创建和使用OpenGL shader的简介: • 用glCreateShaderObjectARB创建一个或多个(空的)shader对象 • 调用glShaderSourceARB给shader提供源代码。 • 为每个shader调用glCompileShaderARB来编译它。 • 调用glCreateProgramObjectARB创建一个program对象. • 通过调用glAttachObjectARB把所有的shader对象和program对象关联起 来。 • 调用glLinkProgramARB把program对象连接起来。 • 调用glUseProgramObjectARB把可执行的program设置成作为OpenGL当前状态 的一部分。 • 如果shader使用了uniform变量。如果想要对这些uniform变量进行处理,需 要通过调用glLinkProgramARB和glGetUniformLocationARB查询得到该变量, 然后再通过glUniformARB来赋值。 • 如果vertex shader自定义了attribute变量,有两种方式指定该属性对应的 索引值,首先可以通过在链接shader前调用glBindAttribLocationARB来设 定,也可以由OpenGL自动指定,在连接后可以通过调用函数 glGetAttribLocationARB来查询得到使用的索引值。顶点的一般属性 (Generic vertex attributes)也有两种方式送入vertex shader,第一种 是通过调用glVertexAttribARB,第二种是一起调用 glVertexAttribPointerARB 和 glEnableVertexArrayPointer,通过这些指 令就可以绘制顶点数组了。 7.1 建立Shader 对象 OpenGL Shading 语言的API在设计的时候刻意的模仿了C/C++应用程序的开发。 第一步是创建源代码,接下来代码必须通过编译,再将不同的编译模块连接到一起。 最后,连接后得到的代码就可以在目标处理器上运行。 为了让OpenGL支持高级shading语言这个概念,必须提供某些结构能用来分别 保存源代码、编译后的代码和可执行代码。我们定义了两个由OpenGL来管理的数据 结构或者说是对象来解决这个问题。这些对象满足了存储的需求,我们为这些对象 定义了一些操作,让它们有能力进行源代码的指定、编译、连接以及执行。当一个 对象被创建的后,OpenGL返回这个对象的句柄(handl
文档评论(0)