GLES在Android上报错为SEGV_ACCERR

2019-07-12  本文已影响0人  我爱麦芽糖

基本上分为两种情况

//我们记着色器A为AShader, B为 Bshader, 它们各自有一个顶点属性 a,b 位置都为0
int aLoc=0;
int bLoc=0;
FloatBuffer buffer=ByteBuffer.allocateDirect(4*100)
    .order(ByteOrder.nativeOrder())
  .asFloatBuffer();

//Use aShader
GLES20.glEnableVertexAttribArray(aLoc);
//初始化数据省略
.....
//设置顶点数据 
buffer.position(0);
GLES20.glVertexAttribPointer(loc, 3, GLES20.GL_FLOAT, false, 0, buffer);
GLES20.glDrawArrays(...,0,100);
//假如我们将下面这句话注释掉 ,会导致不可预估的错误
//GLES20.glDisableVertexAttribArray(locPos); 

//Use bShader
GLES20.glEnableVertexAttribArray(bLoc);
//初始化数据省略
.....
//设置顶点数据 
buffer.position(0);
GLES20.glVertexAttribPointer(loc, 3, GLES20.GL_FLOAT, false, 0, buffer);
GLES20.glDrawArrays(...,0,100);
  
上一篇 下一篇

猜你喜欢

热点阅读