在Android版OpenGL ES 2.0上激活/使用GL_TEXTURE1

在Android版OpenGL ES 2.0上激活/使用GL_TEXTURE1,android,opengl-es-2.0,Android,Opengl Es 2.0,我正在尝试使用GL_TEXTURE1纹理单元来绘制一个简单的形状。我知道如何使用标准的GL_纹理0绘制它,但当更改它时,有些东西不起作用 我认为,根据下面的代码,我只需更改以下内容: glActiveTexture(GL_TEXTURE1); glUniform1i(uTextureLocation, 1); 我错过了什么 代码: 公共类renderClass实现渲染器{ 语境; 浮动缓冲区垂直缓冲区; 内定位; 国际迁移; 内部外部定位; int程序; 公共呈现器类(上下文){ this.c

我正在尝试使用GL_TEXTURE1纹理单元来绘制一个简单的形状。我知道如何使用标准的GL_纹理0绘制它,但当更改它时,有些东西不起作用

我认为,根据下面的代码,我只需更改以下内容:

glActiveTexture(GL_TEXTURE1);
glUniform1i(uTextureLocation, 1);
我错过了什么

代码:

公共类renderClass实现渲染器{
语境;
浮动缓冲区垂直缓冲区;
内定位;
国际迁移;
内部外部定位;
int程序;
公共呈现器类(上下文){
this.context=上下文;
}
@凌驾
已创建Surface上的公共void(GL10 arg0,EGLConfig config){
GLES20.glClearColor(1.0f,0.0f,0.0f,0.0f);
浮点[]顶点={
-0.5f,0.5f,0.5f,0.5f,
-1.0f,0.0f,0.0f,0.0f,
0.0f,0.0f,1.0f,0.0f,
0.0f,1.0f,1.0f,1.0f,
-1.0f,1.0f,0.0f,1.0f,
-1.0f,0.0f,0.0f,0.0f
};
verticesInBuffer=ByteBuffer.allocateDirect(顶点.长度*4).order(字节顺序.本机顺序()).asFloatBuffer().put(顶点);
String vss=“属性向量4 a_位置;”+
“属性向量2 a_纹理;”+
“可变vec2 v_纹理;”+
“void main(){”+
“v_纹理=a_纹理;”+
“gl_位置=a_位置;”+
"}";
字符串fss=“精度中间泵浮动;”+
“可变vec2 v_纹理;”+
“均匀的2D u_纹理;”+
“void main(){”+
“gl_FragColor=texture2D(u_纹理,v_纹理);”+
"}";
int vs=glCreateShader(GL_顶点_着色器);
int fs=glCreateShader(GL_片段_着色器);
glShaderSource(vs,vss);
glShaderSource(fs、fss);
glCompileShader(vs);
glCompileShader(fs);
program=glCreateProgram();
格拉塔沙德(项目,vs);
格拉塔沙德(项目,财政司司长);
glLinkProgram(program);
aPositionLocation=GLGetAttriblLocation(程序,“a_位置”);

//******纹理素材从这里开始您需要指定活动纹理单元并为其指定先前加载的纹理

为了方便起见,我创建了一个辅助函数来完成所有这一切。它激活给定的纹理单元,为其指定具有给定ID的纹理,并将该值放入着色器的
sampler2D
uniform:

protected void setTexture2D(int textureUnit, int textureID, int uniformID) {
    GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + textureUnit);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureID);
    GLES20.glUniform1i(uniformID, textureUnit);
}
然后这样称呼它:

setTexture2D(0, textureID, uniformID);

激活纹理单元后是否尝试绑定纹理?如果在激活操作之前绑定纹理,则纹理将绑定到纹理单元0。是。如果先查看代码,我将其称为“glActivateTexture”,然后称为“glBindTexture”.还有其他线索吗?你能解决这个问题吗?我也一样。很抱歉,这与我的代码有什么不同?我先调用“glActiveTexture”,然后调用“glBindTexture”,然后调用“glUniform1i”。与你的助手函数相同。它不适用于GL_TEXTURE1。
setTexture2D(0, textureID, uniformID);