蓝紫™
DDZEB 完全自主知识产权图形图像开发平台
开放源码 免费使用 在线运行
原生 WebGL 2.0 Context,学习 GPU 编程的起点站。
文件语言大小版本开发者最后更新
lands/webgl productionJavaScript9.8KBv1.0.0YB2024-10-30查看
lands/webgl source codeJavaScript20.6KBv1.0.0YB2024-10-30查看
一、简要介绍 二、初始化 三、接口属性四、接口方法一、简要介绍

原生 WebGL 2.0,对 WebGL2RenderingContext 的底层封装,可以编写顶点着色器(Vertex Shader)以及片元着色器(Fragment Shader)进行渲染,具体可参考蓝紫官方样例:Rotating Cube。我们对 WebGL 接口进行了极尽简化和精心设计,力求让引擎接口清晰、方便且灵活强大。

webgl 引擎示例:粒子系统
二、初始化
const canvas = await Lan.webgl(900, 600, {
  alpha : false,
  antialias : false,
});
// use canvas to draw

其中,alpha 以及 antialias 缺省为 false。我们将接口添加在 canvas 上,可通过 canvas 对象进行调取。

三、接口属性 3.1、CONTEXT

WebGL2RenderingContext 对象。

3.2、VS

数组,所有 Vertex Shader 源代码。

3.3、FS

数组,所有 Fragment Shader 源代码。

四、接口方法 4.1、lost()

返回 bool 值,表示 context 是否已丢失。

4.2、clear(r, g, b, a, mask)

执行图像清除操作,绘制为统一的颜色,所有参数均为可选参数。

4.3、error(err)

将 WebGL 错误代码转换为可读字符串,err 参数可选。

4.4、texture(data, options = {})

创建 WebGLTexture 对象,所有参数可选。当 data 未传或不可用的时候,创建一个与画布尺寸一致的空纹理对象。

options 可选参数如下:

返回对象包含如下属性和方法:

4.5、cubemap(images)

通过 6 个图片(Image)加载 Cubemap 天空盒纹理,返回对象包含如下属性和方法:

加载 Cubemap 图片,可使用 media 库的 cubemap 接口。

4.6、frameBuffer()

创建 WebGLFramebuffer 对象,用于接受 Shader 程序的渲染输出。返回对象附加接口:

4.7、buffer(data_or_size, type, usage)

创建缓冲(WebGLBuffer),type 缺省为 ARRAY_BUFFERusage 缺省为 STATIC_DRAW。返回对象附加属性方法如下:

4.8、compile(type, source, line_number_offset = 0)

编译 Shader 代码,传入参数 type 为 string 类型,取值:vertex 或 fragment。

4.9、program(vs, fs, options = {})

编译并生成一个 WebGLProgram 对象。vs 及 fs 必传,可以是字符串形式的代码,也可以是蓝紫里的 Shader 代码段整数编号(从 0 开始)。当 Shader 代码未包含 #version 指示器时,将自动添加 #version 300 es 指示器并在 Fragment Shader 中添加 out vec4 fragColor 颜色输出项。

可选参数 options 包括:

返回的 WebGLProgram 对象附加接口如下:

4.10、drawXXX(count, first)

我们将 gl.drawArrays 代理到了 canvas 对象作为接口,分别为:drawPoints、drawLineStrip、drawLineLoop、drawLines、drawTriangleStrip、drawTriangleFan 以及 drawTriangles,参数均为 (count, first),其中 first 默认为 0。

4.11、destroy()

清理和销毁。在蓝紫开发环境中无需调用此接口,开发环境会自动进行回收清理工作。