最大缓冲区大小Opengl ES 2.0

时间:2014-11-27 21:46:43

标签: opengl-es opengl-es-2.0

我知道这已经讨论过,但我仍然没有找到与2014年相关的合适答案。 OpenGL ES 2.0中的顶点缓冲区对象是否有最大尺寸? 我正在编写一个在Android上运行的图形引擎。

我使用gldrawarrays()用GL_LINE_STRIP绘制一堆行。 所以,我没有使用任何索引数组,因此我没有使用索引缓冲区对象提供的短整数的最大值。

我想加载超过200万的X,Y,Z浮点值,以便将大约24mb的数据加载到GPU。

我的出路是短路还是远远超出极限?有没有办法查询这个?

1 个答案:

答案 0 :(得分:1)

就API而言,GLsizeiptr的大小是上限。

这通常意味着4 GiB(32位指针是最常见的情况);当然,没有集成设备实际上拥有那么多GPU内存,这是你可以处理的最大地址。因此,它是您可以使用glBufferData (...)等函数分配的最大字节数。

考虑glBufferData的原型:

void glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);

现在让我们看看GLsizeiptr

的定义

OpenGL ES 2.0 Specification - 基本GL操作 - p。 12

Specification sample

OpenGL或OpenGL ES没有定义操作限制。关于你可以移植做的最好的事情是调用glBufferData (...)一定大小, NULL 用于data指针,看看它是否会引发{{} 1}}错误。这非常粗略等同于“代理纹理”,用于在尝试上传之前检查是否有足够的内存来容纳具有某些尺寸的纹理。对于这个问题来说,这是一个非常粗略的方法,但它已经在GL中存在了很长时间。