【WebGL】WebGL编程API
Texture
gl.creatTexture()
创建 Texture 对象
输入值:无
返回值:返回创建出来的 Texture 对象,为空则创建失败
gl.deleteTexture(texture)
删除 Texture 对象,如果已经被删除则无效果
输入值:
- texture:待删除的 Texture 对象
返回值:无
gl.pixelStorei(pname, param)
使用 pname 和 param 处理加载的得到的图像
输入值:
pname:以下二选一
gl.UNPACK_FLIP_Y_WEBGL:加载图像后,翻转图像Y轴
gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL:把RGB分别乘以A
param: 指定非0(true)或0(false),必须是整数
gl.activeTexture(texUnit)
激活纹理单元
输入值:
- texUnit:准备激活的纹理单元(gl.TEXTURE0 - gl.TEXTURE7),不同设备可能会更多
返回值:无
gl.bindTexture(target, texture)
指定纹理对象使用的纹理类型,如果已经有开启了的纹理单元,则绑在对应纹理单元上
输入值:
- target: gl.TEXTURE_2D 或 gl.TEXTURE&_CUBE_MAP
- texture: 待绑定的纹理
返回值:无
gl.texParameteri(target, pname, param)
设置纹理参数
输入值
target: gl.TEXTURE_2D 或 gl.TEXTURE&_CUBE_MAP
pname: 纹理参数
pname description default value gl.TEXTURE_MAG_FLITER 贴图放大采样方法 gl.LINEAR gl.TEXTURE_MIN_FLITER 贴图缩小采样方法 gl.NEAREST_MIPMAP_LINEAR gl.TEXTURE_WRAP_S 纵向 warp 模式 gl.REPEAT gl.TEXTURE_WRAP_TA 横向 warp 模式 gl.REPEAT param: 纹理参数的值
对于贴图采样方法:
gl.LINEAR, gl.NEAREST
gl.NEAREST_MIPMAP_NEAREST, gl.LINEAR_MIPMAP_NEAREST, gl.NEAREST_MIPMAP_LINEAR, gl,LINEAR_MIPMAP_LINEAR
对于 Wrap 模式:gl.REPEAT, gl.MIRRORED_REPEAT, gl.CLAMP_TO_EDGE
gl.texImage2D(target, level, internalformat, format, type, image)
将 image 指定的图像分配给绑定到目标上的纹理对象
输入值:
target:gl.TEXTURE_2D 或 gl.TEXTURE&_CUBE_MAP
level:MipMap 层数,一般都传入0
internalformat:图片的内部格式
Format 纹素 gl.RGB (R, G, B, 1) gl.RGBA (R, G, B, A) gl.ALPHA (0, 0, 0, A) gl.LUMINANCE (L, L, L, 1) gl.LUMINANCE_ALPHA format: 纹素的格式,必须与 internalformat 相同
type:纹素的数据类型
Type 介绍 gl.UNSIGNED_BYTE 无符号字节,每个元素有1字节 gl.UNSIGNED_SHORT_5_6_5 RGB 分别有5, 6, 5字节 gl.UNSIGNED_SHORT_4_4_4_4 RGBA 每个4字节 gl.UNSIGNED_SHORT_5_5_5_1 RGB 每个5字节,A 1字节 image:图像
返回值:无
gl.uniform1i(uniformLoc, texUnitIndex)
将纹理单元分配给uniform变量
输入值:
- uniformLoc:变量位置
- texUnitIndex:纹理单元编号
返回值:无
Framebuffer
gl.createFramebuffer()
创建一个framebuffer
返回值:farmebuffer对象
gl.deleteFramebuffer(framebuffer)
删除framebuffer
gl.bindFramebuffer(target, framebuffer)
将framebuffer绑定在target上,如果framebuffer是null,则解绑
输入值:
- target:必须是gl.FRAMEBUFFER
- framebuffer:要绑定的framebuffer
返回值:无
gl.framebufferTexture2D(target, attachment, textarget, tex, level)
把贴图texture绑定到target上
输入值:
target:必须是gl.FRAMEBUFFER
attachment:绑定到哪里
gl.COLOR_ATTACHMENT0:绑定为颜色缓冲
gl.DEPTH_ATTACHMENT:绑定为深度缓冲
textarget:贴图类型(gl.TEXTURE_2D, gl.CUBE_MAP_TEXTURE)
tex:贴图
level:MIPMAP层级
返回值:无
gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer)
把renderbuffer绑定到target上
输入值:
target:必须是gl.FRAMEBUFFER
attachment:绑定到哪里
gl.COLOR_ATTACHMENT0:绑定为颜色缓冲
gl.DEPTH_ATTACHMENT:绑定为深度缓冲
gl.STENCIL_ATTACHMENT:绑定为模板缓冲
renderbuffertarget:必须是gl.RENDERBUFFER
renderbuffer:renderbuffer对象
输出值:无
gl.checkFramebufferStatus(target)
检查framebuffer的完整性
输入值:target:必须是gl.FRAMEBUFFER
返回值:
- 0:target不是gl.FRAMEBUFFER
- gl.FRAMEBUFFER_COMPLETE:framebuffer完整
- gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:framebuffer的某一关联对象为空
- gl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:framebuffer关联对象尺寸不一致
- gl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:framebuffer尚未关联任何一个对象
Renderbuffer
gl.createRenderbuffer()
创建一个renderbuffer
返回值:renderbuffer对象
gl.deleteRenderbuffer(renderbuffer)
删除renderbuffer
gl.bindRenderbuffer(target, renderbuffer)
将renderbuffer绑定在target上,如果renderbuffer是null,则解绑
输入值:
- target:必须是gl.RENDERBUFFER
- renderbuffer:要绑定的renderbuffer
返回值:无
gl.renderbufferStorage(target, internalFormat, width, height)
创建对应类型的renderbuffer并初始化
输入值:
target:必须是gl.RENDERBUFFER
internalFormat:格式
gl.DEPTH_COMPONENT16:深度缓冲
gl.STENCIL_INDEX8:模板缓冲
gl.RGBA4:颜色缓冲
gl.RGB5_A1
gl.RGB565
width,height:大小
返回值:无
Other
gl.enable(cap)
开始cap功能
输入值:
cap:功能
gl.DEPTH_TEST
gl.BLEND
gl.CULL_FACE
gl.DITHER
gl.STENCIL_TEST
返回值:无
gl.disable(cap)
同上
gl.blendFunc(srcFactor, dstFactor)
设置混合模式
输入值:
srcFactor和dstFactor
gl.ZERO gl.ONE
gl.SRC_COLOR gl.ONE_MINUS_SRC_COLOR gl.DST_COLOR gl.ONE_MINUS_DST_COLOR
gl.SRC_ALPHA gl.ONE_MINUS_SRC_ALPHA gl.DST_ALPHA gl.ONE_MINUS_DST_ALPHA
gl.SRC_ALPHA_SATURATE
返回值:无
gl.depthMask(mask)
是否开启深度写入
输入值:
- mask:true或者false
返回值:无
gl.viewport(x, y, width, height)
设置绘制区域
输入值:
- x,y:左下角位置
- width,height:大小