glEnableVertexAttribArray上的OpenGL 2.0 ES 1281错误

时间:2013-08-28 18:31:28

标签: java android opengl-es

我使用https://github.com/d3kod/Texample2中的代码在OpenGL 2.0中呈现文本。可以在http://primalpond.wordpress.com/2013/02/26/rendering-text-in-opengl-2-0-es-on-android/

找到该项目的说明

代码在运行android 4.1.2的三星Galaxy S3上运行良好。但是,它在运行Android 2.3.4的Droid X上不起作用,并且其他人在Android 4.0.4 Onepad 940平板电脑上遇到此问题(请参阅http://primalpond.wordpress.com/2013/02/26/rendering-text-in-opengl-2-0-es-on-android/#comment-89)。

我收到1281错误: GLES20.glEnableVertexAttribArray(mColorHandle)

我确定这是因为我的Droid X上的GL_MAX_VERTEX_ATTRIBS只有8,mColorHandle设置为26.当我在Samsung GS3上运行我的应用时,{{1} }是16,但GL_MAX_VERTEX_ATTRIBS设置为0。

因此,从26> 8开始,1281错误被抛出。我不明白为什么Droid的句柄值为26,GS3得到0。

mColorHandle程序在对象构造函数的这一行中设置:

mProgram

这是产生错误的行:

mColorHandle = GLES20.glGetUniformLocation(mProgram.getHandle(), "u_Color");

修改

这是设置程序的类:

void initDraw(float red, float green, float blue, float alpha) {
GLES20.glUseProgram(mProgram.getHandle()); // specify the program to use

// set color TODO: only alpha component works, text is always black #BUG
float[] color = {red, green, blue, alpha}; 
GLES20.glUniform4fv(mColorHandle, 1, color , 0); 
GLES20.glEnableVertexAttribArray(mColorHandle);

GLES20.glActiveTexture(GLES20.GL_TEXTURE0);  // Set the active texture unit to texture unit 0

GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); // Bind the texture to this unit

// Tell the texture uniform sampler to use this texture in the shader by binding to texture unit 0
GLES20.glUniform1i(mTextureUniformHandle, 0); 
//Log.i("error", "glerror3: " + GLES20.glGetError());
}

1 个答案:

答案 0 :(得分:1)

你的逻辑被打破了。如果u_Color是统一的,则它不能是顶点属性。解决了这个问题。