首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FloatBuffer.put会导致崩溃?

FloatBuffer.put会导致崩溃?
EN

Stack Overflow用户
提问于 2012-03-27 02:31:20
回答 1查看 164关注 0票数 0

我有一个非常简单的几何图形,可以做几个矩形。由于某些原因,浮动缓冲区的put方法会使电话崩溃。代码如下

代码语言:javascript
复制
private FloatBuffer mFloatVertexBuffer;
public Bars(int numberOf,float widthIn,float heightIn, GL10 gl)
{
    width=widthIn;height=heightIn;

    mCoordinateType= GL10.GL_FLOAT;
    mCoordinateSize = 4;//FLOAT_SIZE =4 ;
    mFloatVertexBuffer = ByteBuffer.allocateDirect(mCoordinateSize * numberOf * 3).order(ByteOrder.nativeOrder()).asFloatBuffer();
    mVertexBuffer = mFloatVertexBuffer;

    mIndexCount = 6 * numberOf;
    final int CHAR_SIZE = 2;
    mIndexBuffer = ByteBuffer.allocateDirect(CHAR_SIZE * mIndexCount).order(ByteOrder.nativeOrder()).asCharBuffer();

    for (int i = 0, j = 0; i < numberOf; i++)
    {
        char a = (char) (j++); char b = (char) (j++);
        char c = (char) (j++);char d = (char) (j++);

        mIndexBuffer.put(a);mIndexBuffer.put(b); mIndexBuffer.put(c);
        mIndexBuffer.put(b); mIndexBuffer.put(c);mIndexBuffer.put(d);
    }
    float stride = widthIn/numberOf;
    for (int i = 0, j = 0; i < numberOf; i++)
    {
        float z = 0;
        float height=  heightIn*((float) Math.random());
        float ax = stride*(i+0);
        float ay = 0;
        float dx = stride*(i+1);
        float dy = 0;
        float bx = stride*(i+0);
        float by = height;
        float cx= stride*(i+1);
        float cy = height;

        mFloatVertexBuffer.put(j++,ax);
        mFloatVertexBuffer.put(j++,ay);
        mFloatVertexBuffer.put(j++,z);

        mFloatVertexBuffer.put(j++,bx);
        mFloatVertexBuffer.put(j++,by);
        mFloatVertexBuffer.put(j++,z);//Still Working

        mFloatVertexBuffer.put(j++,cx);//Throws error at this line (via debugger)
        mFloatVertexBuffer.put(j++,cy);
        mFloatVertexBuffer.put(j++,z);

        mFloatVertexBuffer.put(j++,dx);
        mFloatVertexBuffer.put(j++,dy);
        mFloatVertexBuffer.put(j++,z);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-27 02:48:00

代码语言:javascript
复制
mFloatVertexBuffer = ByteBuffer.allocateDirect(mCoordinateSize * numberOf * 3).order(ByteOrder.nativeOrder()).asFloatBuffer();

分配(4 * numberOf * 3)字节,但您需要(4 * numberOf *4* 3)字节,因为您希望为每个numberOf项存储12个大小为4的浮点数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9877675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档