首页/ 学科题库/ webgl/ 常见错误与调试入门专题测试
webgl 模拟试卷

常见错误与调试入门专题测试

20 题 40 分钟 难度:★
  • 上下文丢失与恢复: 监听 webglcontextlost 与 webglcontextrestored 事件重建渲染资源
  • 错误码检查与定位: 使用 getError 逐步定位 INVALID_OPERATION、INVALID_VALUE 等错误
  • 黑屏问题排查思路: 按着色器、顶点数据、矩阵变换、视口设置的顺序排查无输出问题
  • 渲染结果不一致排查: 对比状态机残留与深度测试配置定位图像差异原因
  • 坐标系与视口调试: 使用 gl.viewport 与辅助线验证坐标映射与显示区域是否正确

试卷习题(20 题)

参考答案在文末
判断题
1
判断题

排查黑屏时,先用固定输出的片元着色器与覆盖全屏的固定顶点验证管线是否通畅,可以快速缩小问题范围。

A

对

B

错

2
判断题

在 webglcontextlost 事件中必须调用 preventDefault,浏览器才会尝试恢复上下文并派发 webglcontextrestored 事件。

A

对

B

错

3
判断题

gl.viewport 的参数单位是渲染缓冲像素,通常应设置为 canvas.width 与 canvas.height。

A

对

B

错

4
判断题

gl.getError() 返回 NO_ERROR 说明当前没有产生接口级错误,但并不代表渲染结果符合预期。

A

对

B

错

5
判断题

同一份 WebGL 代码在不同手机上呈现不同结果,可能与浮点精度限定符的实现差异有关。

A

对

B

错

单选题
6
单选题

WebGL 上下文丢失时会触发哪个事件?

A

webglcontextlost

B

webglcontextrestored

C

webglcontextcreationerror

D

visibilitychange

7
单选题

上下文丢失之后,之前创建的缓冲、纹理与 program 还能继续使用吗?

A

可以继续使用,只是画面暂时黑屏

B

全部失效,必须在恢复事件中重新创建

C

只有纹理失效,缓冲仍然可用

D

只有 program 失效,缓冲与纹理仍然可用

8
单选题

WebGL 黑屏问题的推荐排查顺序是什么?

A

状态、视口、矩阵、顶点数据、着色器

B

着色器、顶点数据、矩阵、视口、状态

C

视口、着色器、状态、矩阵、顶点数据

D

矩阵、视口、着色器、状态、顶点数据

9
单选题

设置渲染输出区域的大小与位置,应调用哪个接口?

A

gl.viewport

B

gl.scissor

C

gl.clear

D

gl.enable

10
单选题

绘制时未绑定任何 program,gl.getError() 通常返回哪个错误码?

A

INVALID_ENUM

B

INVALID_VALUE

C

INVALID_OPERATION

D

OUT_OF_MEMORY

11
单选题

部分设备不支持片元着色器中的 highp 精度时,应如何处理精度声明?

A

直接写 highp,不支持时编译会报错

B

用 GL_FRAGMENT_PRECISION_HIGH 宏做分支,声明 highp 或回退 mediump

C

省略精度声明,由驱动自行决定

D

用 int 类型替代所有 float 计算

12
单选题

同一份 WebGL 代码在不同设备上渲染结果不一致,应优先怀疑哪类原因?

A

显示器品牌不同

B

精度限定符、扩展支持与硬件上限等设备差异

C

网络带宽不足

D

用户操作系统的语言设置

13
单选题

排查 WebGL 黑屏时,建议最先确认的内容是什么?

A

当前设备的显卡型号

B

着色器是否编译与链接成功

C

页面当前帧率

D

纹理的分辨率

14
单选题

要验证坐标映射是否正确,比较直接的做法是什么?

A

临时把视口改成画布的一个子区域,观察内容是否随之收缩或移动

B

关闭抗锯齿后观察边缘变化

C

提高纹理分辨率

D

增加场景中的光源数量

15
单选题

读取并清空当前 WebGL 错误状态的接口是哪个?

A

gl.getError()

B

gl.getParameter()

C

gl.isContextLost()

D

gl.getExtension()

多选题
16
多选题

关于 WebGL 错误码,以下说法正确的是?

A

INVALID_VALUE 常见于偏移、长度等数值越界

B

OUT_OF_MEMORY 表示显存不足,通常与过大的纹理或缓冲有关

C

getError 会清空错误状态,适合分段插入检查点定位错误位置

D

CONTEXT_LOST_WEBGL 表示可以继续正常绘制,不必处理

17
多选题

关于坐标系与视口调试,以下说法正确的是?

A

绘制一条从 (-1,-1) 到 (1,1) 的辅助线,端点应落在视口的对角位置

B

视口不会随画布尺寸自动更新,resize 后需要重新设置

C

忘记按设备像素比换算缓冲尺寸,会导致内容只占画布一角或发虚

D

视口尺寸可以超过渲染缓冲尺寸,超出部分会被自动裁剪

18
多选题

关于上下文丢失与恢复,以下说法正确的是?

A

显卡驱动重置、显存不足、标签页长期处于后台都可能触发上下文丢失

B

恢复事件中应重建全部资源并重新启动渲染循环

C

把资源创建集中到一个初始化函数中,便于丢失后整体重建

D

上下文丢失后浏览器会自动重建全部资源,开发者无需处理

19
多选题

以下哪些属于不同设备渲染结果不一致的常见原因?

A

浮点精度限定符的支持差异

B

可选扩展缺失,例如浮点纹理与实例化绘制

C

纹理尺寸等硬件上限不同

D

每帧显式重置深度、混合等渲染状态

20
多选题

排查黑屏问题时,以下做法有效的是?

A

检查着色器是否编译链接成功,并读取编译日志

B

确认顶点属性已启用、缓冲已绑定且数据量正确

C

临时关闭深度测试与面剔除,排除遮挡与朝向问题

D

把清屏颜色与物体颜色设置为完全一致以便观察

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.A 7.B 8.B 9.A 10.C 11.B 12.B 13.B 14.A 15.A 16.A;B;C 17.A;B;C 18.A;B;C 19.A;B;C 20.A;B;C
想在手机上在线作答这套卷子?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可限时作答并自动判分。
了解产品 App
← 上一套 基础图元绘制与交互专题测试 下一套 → 渲染管线与着色器基础专题测试