OpenGLES3.0 API速查指南:异步查询与缓冲对象

需积分: 5 0 下载量 11 浏览量 更新于2024-08-05 收藏 1012KB PDF 举报
“opengles3-quick-reference-card.pdf”是一个关于OpenGL ES 3.0 API的快速参考卡片,由Khronos Group于2012年发布。它涵盖了异步查询、缓冲对象等多个关键概念。 在OpenGL ES 3.0中,异步查询是一个重要的特性,允许开发者在不阻塞主线程的情况下获取图形处理单元(GPU)的状态信息。这有助于提高应用性能和响应性。以下是关于异步查询的关键点: 1. `void GenQueries(sizein,uint*ids);`:此函数用于生成一个或多个查询对象标识符。这些对象将被用于执行特定类型的查询。 2. `void BeginQuery(enumtarget,uint id);`:启动一个查询,指定查询类型(如`ANY_SAMPLES_PASSED_CONSERVATIVE`,用于检查帧缓冲区中的所有样本是否都通过了深度测试)。`id`是之前生成的查询对象的标识符。 3. `void EndQuery(enumtarget);`:结束当前正在执行的查询。当调用`EndQuery`时,GPU会继续执行查询,但不会阻塞CPU。 4. `void DeleteQueries(sizein,const uint*ids);`:删除不再需要的查询对象。 5. `boolean IsQuery(uint id);`:检查给定的标识符是否表示一个有效的查询对象。 6. `void GetQueryiv(enum target,enumpname,int*params);` 和 `void GetQueryObjectuiv(uint id,enumpname,uint*params);`:这两个函数用于获取查询对象的参数,例如查询结果或其他元数据。 除了异步查询,OpenGL ES 3.0还引入了缓冲对象(Buffer Objects),它们是存储顶点数组数据或索引的高性能服务器内存。缓冲对象的主要操作包括: 1. `void GenBuffers(sizein,uint*buffers);` 和 `void DeleteBuffers(sizein,const uint*buffers);`:生成和删除缓冲对象。 2. `void BindBuffer(enum target,uint buffer);`:绑定一个缓冲对象到特定的目标,如顶点数组(VERTEX_ARRAY_BUFFER)、像素打包(PIXEL_UNPACK_BUFFER)或像素解包(PIXEL_PACK_BUFFER)等。 3. `void BindBufferRange(enum target,uint index,uint buffer,int ptroffset,sizeiptrsize);` 和 `void BindBufferBase(enum target,uint index,uint buffer);`:用于将缓冲对象绑定到指定的缓冲目标索引,可以设置偏移量和大小(针对UNIFORM_BUFFER或TRANSFORM_FEEDBACK_BUFFER等目标)。 这些API调用允许开发者有效地管理图形数据,提高渲染效率,并利用OpenGL ES 3.0的高级特性,如统一缓冲(UNIFORM_BUFFER)和变换反馈(TRANSFORM_FEEDBACK_BUFFER),进一步优化图形处理。