gpt4 book ai didi

java - 具有缓冲区偏移量的 glbuffersubdata,不会导致垃圾

转载 作者:行者123 更新时间:2023-11-29 22:32:49 25 4
gpt4 key购买 nike

你好,

我正在尝试通过调用 glBufferSubData() 来更新 VBO 的一部分。当我从现有影子缓冲区的开头 (0) 更新时,没有问题,因为缓冲区从 0 开始读取。以下将从缓冲区读取 0 到 y 并将其放置在 VBO 中的 0 到 y 处:

gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, 0, y, mPositionBuffer);

但是,如果我想更新 VBO 的一部分(不是从 0 开始),我就会遇到问题;以下不起作用,因为它会将缓冲区开头的值(0 到 y)写入 VBO 的 x 到 x+y 位置:

gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer);

使用 buffer.position(x) 改变位置没有任何效果:

gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer.position(x));

一个解决方案是 slice() 缓冲区,效果很好:

mPositionBuffer.position(x);
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer.slice());

但这会导致垃圾,因为使用切片生成新缓冲区,即使它使用相同的数据存储。

问题:有没有办法在不产生垃圾的情况下获得所需的结果(使用缓冲区中的偏移量替换 VBO 的偏移量部分)?正如您可能猜到的那样,这是针对 Android 游戏的,游戏中的垃圾收集是禁忌。

谢谢!提醒。

最佳答案

看来我也遇到了同样的问题。

我想到的唯一解决方案是使用 android ndk 创建 glBufferSubData 的替代实现,它将偏移量添加到指针(从 mPositionBuffer 派生的指针),然后再将其传递给实际的 opengl 函数。

这听起来太糟糕了,我希望有更好的解决方案。

关于java - 具有缓冲区偏移量的 glbuffersubdata,不会导致垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380489/

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