基本上分為兩種情況
-
數(shù)據(jù)長度不一致
public float[] points=new float[100]; FloatBuffer buffer=ByteBuffer.allocateDirect(4*100) .order(ByteOrder.nativeOrder()) .asFloatBuffer(); GLES20.glEnableVertexAttribArray(loc); floatBuffer.flip(); GLES20.glVertexAttribPointer(loc, 3, GLES20.GL_FLOAT, false, 0, buffer); GLES20.glDrawArrays(...,0,100)
由于點(diǎn)長度為3,所以數(shù)據(jù)實(shí)際長度為 ,但是glDrawArrays()給出的點(diǎn)卻是100母赵,所以會(huì)報(bào)錯(cuò)令蛉。
- 多個(gè)著色器程序其中某個(gè)著色器程序中皂股,頂點(diǎn)屬性沒有關(guān)閉,然后又緊接著使用下個(gè)程序?qū)懭胄碌臄?shù)據(jù)會(huì)導(dǎo)致錯(cuò)誤
//我們記著色器A為AShader据德, B為 Bshader般此, 它們各自有一個(gè)頂點(diǎn)屬性 a,b 位置都為0
int aLoc=0;
int bLoc=0;
FloatBuffer buffer=ByteBuffer.allocateDirect(4*100)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
//Use aShader
GLES20.glEnableVertexAttribArray(aLoc);
//初始化數(shù)據(jù)省略
.....
//設(shè)置頂點(diǎn)數(shù)據(jù)
buffer.position(0);
GLES20.glVertexAttribPointer(loc, 3, GLES20.GL_FLOAT, false, 0, buffer);
GLES20.glDrawArrays(...,0,100);
//假如我們將下面這句話注釋掉 链方,會(huì)導(dǎo)致不可預(yù)估的錯(cuò)誤
//GLES20.glDisableVertexAttribArray(locPos);
//Use bShader
GLES20.glEnableVertexAttribArray(bLoc);
//初始化數(shù)據(jù)省略
.....
//設(shè)置頂點(diǎn)數(shù)據(jù)
buffer.position(0);
GLES20.glVertexAttribPointer(loc, 3, GLES20.GL_FLOAT, false, 0, buffer);
GLES20.glDrawArrays(...,0,100);