0

ByteBuffer每次我需要执行以下操作时为顶点、颜色、照明等分配内存。

      ByteBuffer bBuff=ByteBuffer.allocateDirect(vertices.length*4);    
      bBuff.order(ByteOrder.nativeOrder());
      vertBuff=bBuff.asFloatBuffer();
      vertBuff.put(vertices);
      vertBuff.position(0);

      ByteBuffer bColorBuff=ByteBuffer.allocateDirect(colorVals.length*4);
      bColorBuff.order(ByteOrder.nativeOrder());
      colorBuff=bColorBuff.asFloatBuffer();
      colorBuff.put(colorVals);
      colorBuff.position(0);
        .......

所以我尝试制作一个类似这样的辅助函数。

   private void fBFromFA(float array[], int size, FloatBuffer theBuff){

      ByteBuffer bBuff=ByteBuffer.allocateDirect(array.length*size);    
      bBuff.order(ByteOrder.nativeOrder());
      theBuff=bBuff.asFloatBuffer();
      theBuff.put(array);
      theBuff.position(0);

}

但它没有用。它给了我一个java.lang.NullPointerException指向 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff);voiddraw(GL10 gl)方法内部的来源。

4

1 回答 1

1

您试图theBuff用作输出参数,但 Java 没有这些。相反,返回bBuff.

而且没有必要传入size。浮点数在 Java 中总是 4 个字节。如果您不想要文字,请使用Float.SIZE / 8(因为它是位数)。

于 2012-03-28T11:16:17.417 回答