gpt4 book ai didi

java - 我可以为 GLES20.glDrawElements 函数提供多少个索引?

转载 作者:行者123 更新时间:2023-12-01 11:11:21 25 4
gpt4 key购买 nike

我想在android Studio中用opengl绘制一个更复杂的对象。我有一个网格。所有顶点法线和索引都是正确的。

但是当我使用这个函数GLES20.glDrawElements(mode,count,type,indices)时,我遇到了一个问题,当计数为1661或更高时,应用程序会崩溃。但是当计数为 1381 或更低时,它工作正常(除了我的对象看起来错误)。

我认为可能有两个原因。首先,这个数字太高了,而且该方法对它可以绘制的对象数量有限制。(但我还没有找到任何关于它的信息,我不认为 1700 是一个如此高的索引数量!)

另一种可能性是,我以某种方式定义了 openGl 绘制的框架或空间错误。我正在与 Vuforia 合作并使用 Vuforia 示例项目。当我输入一个小的计数并且opengl实际绘制一些东西时,它都在图像目标的一个小区域中。但由于我使用该示例,我不知道您将在哪里定义类似的内容。

如果有人有想法,我会非常感激!

编辑:这是 Logcat 中发生的情况:

D/libEGL: glDrawElements(GL_TRIANGLES, 1661, GL_UNSIGNED_SHORT, (const void *) 0x899e56d0);

A/libc:致命信号 11 (SIGSEGV),代码 2,tid 65432 中的故障地址 0xe34s5654 (GLThread 8537)

E/BufferQueueProducer:[unnamed-] dequeueBuffer:超过最小未出队缓冲区计数(2)(出队=7未出队=1)

最后的报告重复了几次......

最佳答案

除了数据类型的固有限制之外,可以传递给 glDrawElements() 的索引数量没有定义的限制。

ES 2.0支持两种索引类型:

  • GL_UNSIGNED_BYTE,最大值为 255。
  • GL_UNSIGNED_SHORT,最大值为 65,535。

准确地说:以上是对最大索引值的限制,而不是对glDrawElements()索引数量的限制。因此,如果多次使用索引,索引的数量实际上可能会高于此限制。不过,这通常会限制一次调用可以绘制的几何图形数量。

如果您使用 GL_UNSIGNED_SHORT 作为索引,那么您绝对应该能够使用几千个索引。

我能想到的唯一合理的解释是,如果顶点数据太大,设备就会耗尽内存。您可以尝试调用 glGetError(),看看是否收到任何 GL_OUT_OF_MEMORY 错误。尽管如此,这些错误往往无法可靠地报告。

除此之外,还有两种可能的解释:

  1. 您的代码已损坏。
  2. 设备上的 OpenGL 实现已损坏。

如果不查看代码的关键部分,就不可能分辨出这两者中的哪一个。

关于java - 我可以为 GLES20.glDrawElements 函数提供多少个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com