剔除优化和遮挡查询优化: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);