我试过用
floatbuffer.put(float[]);
Run Code Online (Sandbox Code Playgroud)
但是当我处理超过200个正方形时,每个帧都有不同的纹理坐标,我的fps急剧下降,游戏变得太过流畅.
你认为badlogicgames.com上提到的方法,而不是使用floatbuffer,使用intbuffer,但是,同样的事情,等于缓慢的方法"put"的那一刻.
那么,我如何以最佳性能更新我所有的浮动缓冲区?
编辑:我已经解决了我的问题,"put"方法本身并不慢,问题是当为每个floatbuffer初始化一个新的float时,而不是那个,我只是更改floatarray中包含的每个元素的值避免许多GC活动..我想.
我正在编写一个OpenGL ES 2.0引擎并使用FloatBuffers,但我听说FloatBuffers在Android Froyo上速度慢,而且在Gingerbread上速度更快.
所以我想知道的是,是否可以使用本机C/C++(Android NDK)创建和编辑缓冲区.
它真的能提高性能吗?
哪些标题必须包括在内?
FloatBuffer有方法capacity()告诉我们最大容量FloatBuffer.但是,它并没有告诉我们缓冲区中有多少个元素.那么如何确定a中的元素数量FloatBuffer?我想确定我FloatBuffer是满还是满.
这就是我如何制作一个三角形数组
float[] tableVerticesWithTriangle = {
// triangle 1
0f, 0f, 9f, 14f, 0f, 14f,
// triangle 2
0f, 0f, 9f, 0f, 9f, 14f
};
Run Code Online (Sandbox Code Playgroud)
这就是我在本机环境中分配块的方式
vertexData = ByteBuffer
.allocateDirect(
tableVerticesWithTriangle.length * BYTES_PER_FLOAT)
.order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexData.put(tableVerticesWithTriangle);
Run Code Online (Sandbox Code Playgroud) 我正试图找到一种在java中使用jack-audio的方法.我已经设法创建基于jnajack的包装器来获取从jacks的端口到java应用程序的音频(原始的jnajack不能与jack 1.9.8一起使用),但是我找不到操作数据的方法.我开始了List<FloatBuffer>,为了进一步的数据操作,我需要将其转换为byte[].
简单来说......首先我想将数据保存到文件中,但据我所知,java sound api只能保存来自TargetDataLine和/或的数据byte[].我怎样才能转换FloatBuffer成byte[]?我能找到的唯一方法是以floatbuffer.get(float[])某种方式(不知道如何)转换float[]为byte[].
我正在尝试在 Android 中将 float[] 转换为 byte[]。我在stackoverflow上查看了其他问题和答案,但没有一个帮助,所以我决定实施我自己的解决方案。我试过的方法是:
byte[] data = some data;
ByteBuffer buffer = ByteBuffer.allocate(data.length);
buffer.put(data);
FloatBuffer fBuffer = buffer.asFloatBuffer();
float[] dataConverted = fBuffer.array();
Run Code Online (Sandbox Code Playgroud)
但是,例外:
java.lang.UnsupportedOperationException
at java.nio.ByteBufferAsFloatBuffer.protectedArray(ByteBufferAsFloatBuffer.java:128)
at java.nio.FloatBuffer.array(FloatBuffer.java:101)
Run Code Online (Sandbox Code Playgroud)
从行:
float[] dataConverted = fBuffer.array();
Run Code Online (Sandbox Code Playgroud)
一直被抛出,我不知道为什么。有人可以帮助解释为什么抛出这个异常吗?会有很大帮助吗?