Создание одной вспомогательной функции для распределения ByteBuffer для Android OpenGL ES - PullRequest
0 голосов
/ 28 марта 2012

Для выделения 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); внутри пустоты draw(GL10 gl) метод.

1 Ответ

1 голос
/ 28 марта 2012

Вы пытаетесь использовать theBuff в качестве выходного параметра, но у Java их нет. Вместо этого верните bBuff.

И нет необходимости передавать size. Плавающие всегда 4 байта в Java. Если вам не нужен литерал, используйте Float.SIZE / 8 (потому что это количество битов).

...