剔除优化和遮挡查询优化:Culling & Occlusion Query - MartinRGB/GLES30_ProgrammingGuide_NDK GitHub Wiki

剔除和遮挡查询

剔除 (Culling)

剔除可以减少 GPU 光栅化不可见三角形的时间,改善性能。

首先要选择正面三角形的方向,调用 glFrontFace(dir),然后要指定被剔除的三角形的面,调用 glCullFace(mode),例如 GL_FRONT,GL_BACK,GL_FRONT_AND_BACK

最后用 glEnable 启用。

遮挡查询 (Occlusion Query)

用来跟踪通过深度测试的片段样本,遮挡查询的目标有 GL_ANY_SAMPLES_PASSED(更精确),GL_ANY_SAMPLES_PASSED_CONSERVATIVE (性能更好)

使用方法:

glBeginQuery(GL_ANY_SAMPLES_PASSED,queryObject);
//绘制图元
...
glEndQuery(GL_ANY_SAMPLES_PASSED);
...
//等待几 frame 后再进行查询,能获得更好的性能
//查询通过深度测试的 sample
glGetQueryObjectuiv(queryObject,GL_QUERY_RESULT,&numSamples);