gpt4 book ai didi

android - 为什么有些 gl 调用接受数组,而其他的只接受 Android 上的缓冲区

转载 作者:行者123 更新时间:2023-11-29 00:48:59 28 4
gpt4 key购买 nike

我刚刚开始在 Android 上学习 OpenGL,我只是注意到一些 gl 调用,例如 glTexCoordPointer(...) 或 glVertexPointer(...),只接受 Buffer 对象中的数据,其他的,例如glDrawTexvOES()、glTexParameteriv(),也接受一个 float[]。

我很好奇为什么会这样? :)

最佳答案

基本区别在于 glTexCoordPointer 和 glVertexPointer 函数的输入不会立即使用,它们只会在调用 glDraw 方法后使用,例如glDrawArrays,glDrawElements。

由于不会立即使用数组,因此您需要将指向发送到这些函数的数组的指针保持足够长的时间,以便绘图例程可以访问它。数据必须在 native 堆上,否则即使数据未被删除,垃圾收集器也可以移动底层 native 指针。为了获得 native 堆上的指针,您需要将数据包装在 Buffer 对象中。

类似 glTexParameteriv 的函数会立即使用您传入的数组中的值,因此无需担心指针从被调用函数下移出,也无需将它们放在 native 堆上。

如果您在 native 代码中使用 glTexCoordPointer 和 friend ,则必须保留发送给它的指针,直到您也调用了 glDraw 函数。在 native 代码中,您的优势在于指针无需包装在对象中,但缺点是您必须手动管理任何堆分配。

关于android - 为什么有些 gl 调用接受数组,而其他的只接受 Android 上的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578969/

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