2012-03-28 5 views
0

Für die Zuweisung von ByteBuffer Speicher für Scheitelpunkte, Farben, Beleuchtung usw. muss ich jedes Mal Folgendes tun.Erstellen einer Helferfunktion für die ByteBuffer-Zuweisung android OpenGL ES

 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); 
     ....... 

Also habe ich versucht, eine Hilfsfunktion so etwas zu machen.

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); 

} 

Aber es hat nicht funktioniert. es gab mir eine java.lang.NullPointerException zeigt die Quelle auf gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertBuff); innerhalb der void draw(GL10 gl) Methode.

Antwort

1

Sie versuchen, theBuff als Ausgabeparameter zu verwenden, aber Java hat diese nicht. Übergeben Sie stattdessen bBuff.

Und es ist nicht notwendig, size zu übergeben. Floats sind immer 4 Bytes in Java. Wenn Sie das Literal nicht wollen, verwenden Sie Float.SIZE/8 (weil es eine Anzahl von Bits ist).