GLES3.0中文API-glDrawRangeElements

glDrawRangeElements 是 OpenGL ES 3.0 中的一个函数,用于从数组数据渲染基元。它限制了 glDrawElements 的使用,要求索引值在指定范围内。此函数接受模式、起始索引、结束索引、元素数量、类型等参数。请注意,某些模式只在 GL ES 版本3.2及以上可用,且如果相关条件不满足,可能会触发错误。该函数与启用的数组配合工作,如果未启用所需的通用顶点属性数组,将从当前的通用属性状态获取相应的元素。

名称

glDrawRangeElements — 从数组数据渲染基元

C规范

void glDrawRangeElements( GLenum mode,
GLuint start,
GLuint end,
GLsizei count,
GLenum type,
const void * indices);

参数

mode
指定要渲染的原语类型。接受符号常量GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_LINE_STRIP_ADJACENCY,GL_LINES_ADJACENCY,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_TRIANGLES,GL_TRIANGACE_STRIP_ADIP_AD_ACE

start
指定索引中包含的最小数组索引。

end
指定索引中包含的最大数组索引。

count
指定要渲染的元素数。

type
指定索引中值的类型。必须是GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT或GL_UNSIGNED_INT中的一种。

indices
指定绑定到GL_ELEMENT_ARRAY_BUFFER的缓冲区中的字节偏移量(转换为指针类型),以开始从中读取索引。如果没有绑定缓冲区,则指定指向索引存储位置的指针。

描述

glDrawRangeElements是glDrawElements的受限形式。 mode,count和type与glDrawElements的相应参数匹配,并具有额外的约束,即数组count中的所有值必须位于start和end之间(包括首尾)。

实现表示建议的最大顶点和索引数据量,可通过使用参数GL_MAX_ELEMENTS_VERTICES和GL_MAX_ELEMENTS_INDICES调用glGet来查询。如果end-start + 1大于GL_MAX_ELEMENTS_VERTICES的值,或者如果count大于GL_MAX_ELEMENTS_INDICES的值,则该调用可能会降低性能。不要求引用[start,end]范围内的所有顶点。但是,该实现可能会部分处理未使用的顶点,从而降低了使用最佳索引集可以实现的性能。

调用glDrawRangeElements时,它将使用启用数组中的count个顺序元素,从一开始就构建一个几何图元序列。模式指定了构造什么样的图元,以及数组元素如何构造这些图元。如果启用了多个阵列,则使用每个阵列。

要启用和禁用通用顶点属性数组,请调用glEnableVertexAttribArray和glDisableVertexAttribArray。

如果未启用与顶点着色器所需的通用属性相对应的数组,则将从当前的通用属性状态获取相应的元素。

注意

GL_LINE_STRIP_ADJACENCY,GL_LINES_ADJACENCY,GL_TRIANGLE_STRIP_ADJACENCY,GL_TRIANGLES_ADJACENCY和GL_PATCHES仅在GL ES版本为3.2或更高版本时可用。

错误

索引超出[start,end]范围是错误的,但是实现可能不会检查这种情况。这样的索引导致依赖于实现的行为。

如果mode不被接受,则生成GL_INVALID_ENUM。

如果计数为负,则生成GL_INVALID_VALUE。

如果end <start,则生成GL_INVALID_VALUE。

如果将非零缓冲区对象名称绑定到已启用的数组或元素数组,并且当前已映射缓冲区对象的数据存储,则将生成GL_INVALID_OPERATION。

如果当前绑定的帧缓冲区未完成帧缓冲区(即glCheckFramebufferStatus的返回值不是GL_FRAMEBUFFER_COMPLETE),则会生成GL_INVALID_FRAMEBUFFER_OPERATION。

如果转换反馈处于活动状态且未暂停,则生成GL_INVALID_OPERATION。

如果几何着色器处于活动状态,并且模式与当前安装的程序对象中的几何着色器的输入基本类型不兼容,则生成GL_INVALID_OPERATION。

相关Gets

glGet 参数 GL_MAX_ELEMENTS_VERTICES

glGet 参数 GL_MAX_ELEMENTS_INDICES

API支持版本

函数名2.03.03.13.2
glDrawRangeElements-

另见

glCheckFramebufferStatus, glDisableVertexAttribArray, glDrawArrays, glDrawElements, glDrawArraysInstanced, glDrawElementsInstanced, glEnableVertexAttribArray,

版权

https://www.khronos.org/registry/OpenGL-Refpages/es3/html/glDrawRangeElements.xhtml
Copyright © 1991-2006 Silicon Graphics, Inc. Copyright © 2010-2015 Khronos Group. This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.

您提供的信息 `------------RE GLES (Ganesh)------------` 表示 Android 系统图形服务中 **GLES(OpenGL ES)渲染引擎(Ganesh)** 的状态信息开始输出。这部分信息通常出现在执行 `adb dumpsys SurfaceFlinger` 命令后,用于展示当前由 **Skia** 使用的 **GLES 渲染后端(Ganesh)** 的运行状态。 --- ### **GLES(OpenGL ES)简介** GLES(OpenGL ES,OpenGL for Embedded Systems)是 OpenGL 的子集,专为嵌入式系统(如 Android、iOS)设计,用于高效的 2D/3D 图形渲染。 在 Android 中,**Skia** 是主要的 2D 图形库,它可以通过 **Ganesh** 后端使用 GLES 进行 GPU 加速渲染。 --- ### **Ganesh 简介** **Ganesh** 是 Skia 图形库的 GPU 渲染后端,负责将 Skia 的绘图命令转换为 GPU 可执行的指令。它支持多个图形 API,包括: - OpenGL ES(GLES- Vulkan - Metal(iOS) Ganesh 的主要功能包括: - 管理 GPU 资源(如纹理、缓冲区) - 执行 GPU 渲染命令 - 优化渲染性能(如批处理、缓存管理) --- ### **RE GLES (Ganesh) 输出内容示例** 执行 `adb dumpsys SurfaceFlinger` 后,可能会看到如下片段: ``` ------------RE GLES (Ganesh)------------ Context: Valid: true Renderer: Mali-G72 MP3 Version: OpenGL ES 3.2 Max texture size: 8192 Max view dimension: 4096 Capabilities: NPOT: true FBO: true EGL image: true EGL image external: true Blit: true MSAA: true Mipmap: true SRGB: true Texture compression: ETC2 Memory: 1024MB allocated Stats: Textures: 128 Render targets: 32 GPU memory usage: 45.2MB ``` --- ### **关键信息解析** | 字段 | 含义 | |------|------| | `Renderer` | GPU 型号,如 Mali-G72、Adreno 等 | | `Version` | 支持的 GLES 版本,如 3.2 | | `Max texture size` | 支持的最大纹理尺寸 | | `Capabilities` | 支持的功能列表,如非幂次纹理(NPOT)、多重采样(MSAA)等 | | `Memory` | GPU 内存分配情况 | | `Stats` | 当前渲染资源统计,如纹理数量、GPU 内存使用等 | --- ### **用途与适用场景** - **性能优化**:检查 GPU 使用情况,避免纹理过多或内存泄漏。 - **兼容性分析**:查看设备是否支持某些 GLES 功能(如 NPOT、MSAA)。 - **调试 GPU 渲染问题**:如纹理不显示、渲染模糊、性能卡顿等。 - **开发调试**:确认应用是否成功使用 GLES 渲染。 - **GPU 资源管理**:监控纹理、帧缓冲区的创建与释放。 --- ### **常用调试命令** ```bash adb dumpsys SurfaceFlinger | grep -A 50 "RE GLES (Ganesh)" adb shell dumpsys SurfaceFlinger --help adb shell dumpsys SurfaceFlinger --list-layers ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值