Webgl的一些常用基础语法

2020-07-12  本文已影响0人  jadefan

本文整理下常用的一些基础语法,在学习实践中用到的时候可以翻看回忆下
使用实例可以看本文集其他示例

获取上下文

var ctx = canvas.getContext(contextType);
var ctx = canvas.getContext(contextType, contextAttributes);

contextType(上下文类型)可选值为2dwebglwebgl2,对应二三维画布
contextAttributes(上下文属性),webgl对应的可选值有:

创建着色器(WebGLShader)

var shader  = gl.createShader(shaderType);

shaderType的可选值为 gl.VERTEX_SHADERgl.FRAGMENT_SHADER

挂接GLSL源代码

gl.shaderSource(vertexShader, vsSource);
gl.shaderSource(fragmentShader, fsSource);

shader为上一步通过gl.createShader()创建的着色器
sourceCode为对应的GLSL源代码,是字符串格式

编译着色器

gl.compileShader(vertexShader);
gl.compileShader(fragmentShader);

参数上一步通过gl.createShader()创建的着色器

创建程序(WebGLProgram)

var program = gl.createProgram()

连接程序和着色器

gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);

绘制图形

gl.drawElements(mode, count, type, offset);

mode:枚举类型 ,指定要渲染的图元类型。可以是以下类型:

count:整数型 ,指定要渲染的元素数量.
type:枚举类型 ,指定元素数组缓冲区中的值的类型。可能的值是:

offset: 字节单位, 指定元素数组缓冲区中的偏移量。必须是给定类型大小的有效倍数.

删除着色器

gl.deleteShader(shader);

删除程序

gl.deleteProgram(program);

获取程序参数

gl.getProgramParameter(program, pname);

pname为要获取的参数,可选值有:

获取着色器参数

gl.getShaderParameter(shader, pname);

pname为要获取的参数,可选值有:

参数获取

gl.getParameter(pname)

pname:一个指定要返回哪个参数值的 GLenum。主要是webgl定义的一些常量,
可选值太多了,挑几个:

获取指定着色器的对应参数的范围和精度

gl.getShaderPrecisionFormat(shaderType, precisionType);

shaderType:可选gl.FRAGMENT_SHADER片元着色器或者gl.VERTEX_SHADER顶点着色器
precisionType:要获取的类型,包括:gl.LOW_FLOAT, gl.MEDIUM_FLOAT, gl.HIGH_FLOAT, gl.LOW_INT, gl.MEDIUM_INT,或gl.HIGH_INT
返回示例:

var highpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
{
  rangeMin: 127
  rangeMax: 127
  precision: 23
}

获取上下文参数对象

var glAttr = gl.getContextAttributes();
{ 
  alpha: true, 
  antialias: true, 
  depth: true, 
  failIfMajorPerformanceCaveat: false, 
  premultipliedAlpha: true, 
  preserveDrawingBuffer: false, 
  stencil: false 
}

返回的结果对象其实就是在获取上下文时指定的参数及默认组成的对象

查询可用的扩展程序

var available_extensions = gl.getSupportedExtensions();

返回一个字符串数组,每个受支持的扩展都返回一个字符串。

启用扩展

var float_texture_ext = gl.getExtension('OES_texture_float');

返回值为null表示扩展不受支持,或者扩展对象不受支持。
返回值为具体扩展对象,即为启用成功,并可以使用此扩展对象提供的方法、属性或常量。

将通用顶点索引绑定到属性变量

gl.bindAttribLocation(program, index, name);

program:要绑定的WebGLProgram 对象。
index:GLuint 指定要绑定的通用顶点的索引。
name:DOMString指定要绑定到通用顶点索引的变量的名称。 名称将保留供WebGL使用。

获取着色器信息日志

gl.getShaderInfoLog(shader);

返回包含诊断消息、警告消息和有关上次编译操作的其他信息。

上一篇下一篇

猜你喜欢

热点阅读