android 触摸点缓冲区,Android OpenGL OutOfMemory(分配缓冲区)

我正在解析一个包含顶点及其属性的二进制文件。这些文件的范围从50,000-2,000,000个顶点。对于较低的文件,我没有问题直接分配数组并绘制点,但对于较大的文件,这是一个很大的问题。Android OpenGL OutOfMemory(分配缓冲区)

当我创建一个floatbuffer这样:

FloatBuffer buf = ByteBuffer.allocateDirect(vertices.length * 4);

我有时会内存溢出错误。这不是我绘制的唯一缓冲区,我也是彩色的。有没有更好的方式绘制顶点或动态分配到缓冲区,并且每次绘制?下面是我使用一些基本的绘图代码:

public PointCloud(String passedFileName, Context ctx) {

fileName = passedFileName;

header = new LAS_HeadParser(fileName);

numVertices = (int)header.numberOfPoints;

lasVertices = new float[numVertices*3];

lasColors = new float[numVertices*4];

intensity = new float[numVertices];

vbb = ByteBuffer.allocateDirect(lasVertices.length * 4);

cbb = ByteBuffer.allocateDirect(lasColors.length * 4);

new ProgressTask(ctx).execute();

}

public void setupBuffers(){

// a float is 4 bytes, therefore we multiply the number if

// vertices with 4.

vbb.order(ByteOrder.nativeOrder());

vertexBuffer = vbb.asFloatBuffer();

vertexBuffer.put(lasVertices);

vertexBuffer.position(0);

cbb.order(ByteOrder.nativeOrder());

colorBuffer = cbb.asFloatBuffer();

colorBuffer.put(lasColors);

colorBuffer.position(0);

}

public void draw(GL10 gl) {

//Log.d("Enter Draw", "*****************");

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

gl.glPointSize(0.6f);

gl.glDrawArrays(GL10.GL_POINTS, 0, numVertices);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

}

呼叫new ProgressTask(ctx).execute();只是解析并填充阵列。我无法继续解析文件,这需要很长时间。我有什么选择?

+0

哪行代码抛出了OutOfMemory错误? –

+0

@DoomGoober - vbb = ByteBuffer.allocateDirect(lasVertices.length * 4); –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值