【问题标题】:int arrays into intbuffer for Android OpenGL ES 1.0?将 int 数组转换为 Android OpenGL ES 1.0 的 intbuffer?
【发布时间】:2011-10-14 15:48:04
【问题描述】:

我最近在 Badlogicgames.com 上阅读了一篇关于加快将信息添加到顶点缓冲区(或任何其他 intbuffer)的过程的文章,它确实提高了我的项目的速度,但我不太了解

“注意到 IntBuffer.put(int[] src) 没有受到问题的影响”

statement.... 如果您不需要浮点数,是否可以将 int[] 数组输入 IntBuffer 以提高速度?每次我尝试将 int[] 放入缓冲区时;什么都没有渲染...

这是我目前使用的一个例子:

dMesh[i].putVertexBuffer(coords); //function being called

            public void putVertexBuffer(int[] input) //actual function
            {
                ByteBuffer tC = ByteBuffer.allocateDirect(input.length *4);
                tC.order(ByteOrder.nativeOrder());
                _vertexBuffer = tC.asIntBuffer();
                _vertexBuffer.put(input);
                _vertexBuffer.position(0);
            }

现在,如果 int 数组 "coords" 填充了变量,这些变量是使用 "Float.floatToIntBits(float value)" 转换为整数的浮点数;这很好......但是标准整数数组没有显示任何内容...... 但是如果我只有一个 float[] 数组并将“asIntBuffer()”更改为“asFloatBuffer()”,这行得通吗?我糊涂了。是否需要转换? 提前感谢任何提供任何见解的人。

快速编辑: 我差点忘了……这是我引用的文章: http://www.badlogicgames.com/wiki/index.php/Direct_Bulk_FloatBuffer.put_is_slow

【问题讨论】:

  • 欢迎来到 StackOverflow,希望您阅读FAQ

标签: android opengl-es android-2.2-froyo


【解决方案1】:

当您尝试使用整数时,您是否也更改了使用数组来使用整数而不是浮点数的代码?我在这里遇到了各种各样的问题。

我之前的问题/答案可能会有所帮助 - 它在这个领域:

Passing java.nio.IntBuffer to C function in an Android game

【讨论】:

  • 感谢您的意见,这听起来是个好建议,但我使用的是 Android 2.2.1 "FroYo",我不相信 NDK 可以使用它... JNI 需要 NDK 不需要是吗?嗯,谢谢你的帮助,如果我以后有其他设备,我可能会使用它。
  • NDK 适用于 1.5 及更高版本。我从未调查过的其他一些本地活动内容仅适用于 2.3+,但这是完全不同的。
【解决方案2】:

glVertexPointer 调用中的类型没有使用带有 GL_FLOAT 参数的 int 数组,是吗?在这种情况下,我不会怀疑这种行为。当使用整数作为顶点位置时,请务必使用 GL_INT 类型作为 glVertexPointer 中的类型参数(或任何此类属性数组函数)。

【讨论】:

  • 我不认为 GL_INT 在 OpenGL ES 1.0 for android 中受支持...它理解 GL_FLOAT、GL_SHORT,我相信还有一些不是 int。
  • @Kalisme 然后一个 int 数组无论如何都不起作用,你需要一个短数组。但是使用除GL_INT 之外的任何整数数组是错误的使用,并且不会起作用。
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 2011-07-01
  • 2012-05-02
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多