1.编译GLSL ES代码,创建和初始化着色器供WebGL使用。这些过程一般分为7个步骤:

创建着色器对象(gl.createBuffer());

向着色器对象中填充着色器程序的源代码(gl.shaderSource());

编译着色器(gl.compileShander());

创建程序对象(gl.createProgram());

为程序对象分配着色器(gl.attachShader());

连接程序对象(gl.linkProgram());

使用程序对象(gl.useProgram());

2.着色器对象和程序对象

着色器对象:着色器对象管理一个顶点着色器或一个片元着色器。每个着色器都有一个着色器对象。

程序对象:程序对象是管理着色器对象的容器。WebGl中,一个程序对象必须包含一个顶点着色器和一个片元着色器。

3.gl.createShader(type)创建着色器

创建由type指定的着色器对象。参数:

type:指定创建着色器对象的类型,gl.VERTEX_SHADER表示顶点着色器,gl.FRAGEMENT_SHADER表示片元着色器

4.gl.deleteShader(shader)

删除shader指定的着色器对象。参数:

shader:待删除的着色器对象

5.gl.shaderSource(shader, source)指定着色器对象的代码

将source指定的字符串形式代码传入shader指定的着色器。如果之前已经向shader传入过代码了,旧的代码会被替换掉。参数:

shader:指定需要传入代码的着色器对象

source:指定字符串形式的代码

6.gl.compileShader(shader)编译着色器

编译shader指定的着色器中的源代码。参数:

shader:待编译的着色器

7.gl.getShaderParameter(shader, pname)

获取shader指定的着色器中,pname指定的参数信息。参数:

shader:指定待获取参数的着色器

pname:自定待获取参数的类型,可以是gl.SHADER_TYPE、gl.DELETE_STATUS或者gl.COMPILE_STATUS

返回值:根据pname的不同,返回不同的值。type为gl.SHADER_TYPE,返回时顶点着色器(gl.VERTEX_SHADER)还是片元着色器(gl.FRAGEMENT_SHADER);type为gl.DELETE_STATUS返回着色器是否被删除成功;type为COMPILE_STATUS,返回是否编译成功。

8.gl.getShaderInfoLog(shader)

获取shader指定着色器的信息日志。参数:

shader:包含日志信息的字符串

9.gl.createProgram()

创建程序对象。如前所述,程序对象包含了顶点着色器和片元着色器

10.gl.deleteProgram(program)

删除program指定的程序对象,如果该程序对象正在被使用,则不立即删除。而是等它不在被使用后再删除。参数:

program:指定待删除的程序对象

11.gl.attachShader(program, shader)

将shader指定的着色器对象分配给program指定的程序对象。参数:

program:指定程序对象

shader:指定着色器对象

着色器在附给程序对象前,并不定义要为其指定代码或进行编译(也就是说,把空的着色器附给程序对象也是可以的)。

12.gl.detachShader(program, shader)

取消shader指定的着色器对象对program指定的程序对象的分配。参数:

program:指定程序对象

shader:指定着色器对象

13.gl.linkProgram(program)

连接program指定的程序对象中的着色器。参数:

program:指定程序对象

程序对象进行着色器连接操作,目的是保证:(1)顶点着色器和片元着色器的varying变量同名同类型,且一一对应;(2)顶点着色器对每个varying变量赋了值;(3)顶点着色器和片元着色器中的同名uniform变量也是同类型的;(4)着色器中的attribute变量、uniform变量和varying变量的个数没有超过着色器的上限,等等。

14.gl.getProgramParameter(program, pname)

获取program指定的程序对象中pname指定的参数信息。返回值随着pname的不同而不同。参数:

program:指定程序对象

pname:指定待获取参数的类型,可以是gl.DELETE_STATUS、gl.LINKE_STATUS、gl.VALIDATE_STATUS、gl.ATTACHED_SHDERS、gl.ACTIVE_ATTRIBUTES或gl.ACTIVE_UNIFORMS

返回值:根据pname的不同。返回不同的值。pname为gl.DELETE_STATUS,返回是否被删除(true或false);pname为gl.LINKE_STATUS,程序是否连接成功(true或false);pname为gl.VALIDATE_STATUS,程序是否已经通过验证(true或false);pname为ATTACHED_SHDERS,已被分配给程序的着色器数量;pname为gl.ACTIVE_ATTRIBUTES,顶点着色器中attribute变量的数量;pname为gl.ACTIVE_UNIFORMS,程序中uniform变量的数量。

15.gl.getProgramInfoLog(program)

获取program指定的程序对象的信息日志。参数:

program:指定待获取信息日志的程序对象

16.gl.useProgram(program)

告知WebGl系统绘制时使用prgoram指定的程序对象。参数:

program:指定待使用的程序对象

WebGL 创建和初始化着色器过程的更多相关文章

  1. [WebGL入门]十一,着色器编译器和连接器

    注意:文章翻译http://wgld.org/,原作者杉本雅広(doxas).文章中假设有我的额外说明.我会加上[lufy:].另外.鄙人webgl研究还不够深入.一些专业词语,假设翻译有误.欢迎大家 ...

  2. Initialize the shader 初始化着色器

    目录 Loads the shader files and makes it usable to DirectX and the GPU 加载着色器文件并使其可用于DirectX和GPU Compil ...

  3. WebGL中的OpenGL着色器语言

    在webgl中,调用了OpenGL-ES-2.0的API,而在OpenGL-ES专为嵌入式设备设计,其和其它设备一样,都是使用GLSL(GL Shading Language)来编写片段程序并执行于G ...

  4. webgl巧妙方式写着色器代码

    var VSHADER_SOURCE = function(){ /* void main(){ gl_Position = vec4(0.0,0.0,0.0,1.0); gl_PointSize = ...

  5. WebGL编程指南案例解析之多数据存储于一个缓冲区以及着色器通信

    //顶点着色器往片元着色器传值 //多个参数值存于一个缓冲对象中 var vShader = ` attribute vec4 a_Position; attribute float a_PointS ...

  6. WebGL简易教程(二):向着色器传输数据

    目录 1. 概述 2. 示例:绘制一个点(改进版) 1) attribute变量 2) uniform变量 3) varying变量 3. 结果 4. 参考 1. 概述 在上一篇教程<WebGL ...

  7. OpenGl中使用着色器的基本步骤及GLSL渲染简单示例

    OpenGL着色语言(OpenGL Shading Language,GLSL)是用来在OpenGL中着色编程的语言,是一种具有C/C++风格的高级过程语言,同样也以main函数开始,只不过执行过程是 ...

  8. OpenGL ES着色器语言之静态使用(static use)和预处理

    OpenGL ES着色器语言之静态使用(static use) 在OpenGL ES中有一个术语叫静态使用(static use),什么叫静态使用呢? 在写代码中,对于一个变量可能具有以下三种情况: ...

  9. 【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

    最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...

随机推荐

  1. Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC

    What's In This Chapter? Features of ASP.NET MVC 6 Routing Creating Controllers Creating Views Valida ...

  2. 【CNMP系列】CentOS7.0下安装MySql5.6服务

    接上一回的话,CentOS7.0下安装好了Nginx服务,对于我们的CNMP,我们可以开始我们的M啦,就是传统意义上的MySql服务 MySql简介 MySQL是一个关系型数据库管理系统,由瑞典MyS ...

  3. Asp.net mvc 知多少(九)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  4. PDO预处理语句规避SQL注入攻击

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存 ...

  5. Sublime Text 3 (Build 3126) 最新注册码

    Sublime Text 作为程序员开发神器,听说最新版更新了 并且增加了不少新特性.马上到官网下载了最新版 Sublime Text 3 3126 使用了下,反应速度比以前的确更快了.随手找了几个S ...

  6. ERP管理员培训报道

    金秋十月,丹桂飘香,为期三天的“201610管理员培训”活动于2016年10月19日在苏州总部成功举行.参与本次培训活动的有浙江卡迪夫电缆有限公司.上海华源瓷业股份有限公司.江苏牛牌纺织机械有限公司. ...

  7. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

  8. Codeblocks快捷键

    Codeblocks快捷键: Ctrl+Shift+Enter:复制控制台exe内容 Ctrl+Z:撤销 Ctrl+F:查找  Ctrl+R:查找替换功能 Ctrl+Shift+C:加注释     C ...

  9. 【JS】JavaScript中的参数传递

    ECMAScript中所有函数的参数都是按值传递的,简单讲就是函数外部的值 复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样.切记访问变量有按值访问和按引用访问,而参数只能按值传递. 在向 ...

  10. SQL-ROW_NUMBER() OVER函数的基本用法(源码案例)

    SELECT SUM(t.AdjustedBalance) AS Allqmye FROM ( SELECT * FROM ( SELECT ROW_NUMBER() OVER ( PARTITION ...