Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenGL ES 2.0-GL_纹理1_Android_Opengl Es 2.0 - Fatal编程技术网

Android OpenGL ES 2.0-GL_纹理1

Android OpenGL ES 2.0-GL_纹理1,android,opengl-es-2.0,Android,Opengl Es 2.0,我正在尝试使用GL_TEXTURE1纹理单元来绘制一个简单的形状。我知道如何使用标准的GL_纹理0绘制它,但当更改它时,有些东西不起作用 我认为,根据我的代码,我只需更改以下内容: glActiveTexture(GL_TEXTURE1); glUniform1i(uTextureLocation, 1); 我错过了什么 代码: 使用glActiveTexture设置活动纹理单元后,需要使用glBindTexture绑定纹理: 我在另一个问题中回答了这个问题: 您需要在onDrawFrame中

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

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

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

代码:


使用glActiveTexture设置活动纹理单元后,需要使用glBindTexture绑定纹理:

我在另一个问题中回答了这个问题:

您需要在onDrawFrame中调用glActiveTexture、glBindTexture、glUniform1i,而不是onSurfaceCreated,它将起作用。

很抱歉,您的答案不起作用。按照你的方法,我仍然得到一个黑色的scren。你需要清除深度和颜色缓冲区:GLES20.glclearges20.GL_color_BUFFER_BIT | GLES20.GL_depth_BUFFER_BIT;
public class RendererClass implements Renderer {

Context context;

FloatBuffer verticesInBuffer;

int aPositionLocation;
int aTextureLocation;
int uTextureLocation;

int program;

public RendererClass(Context context){
    this.context = context;
}

@Override
public void onSurfaceCreated(GL10 arg0, EGLConfig config) {

    GLES20.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

    float[] vertices = {

        -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(vertices.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer().put(vertices);

String vss = "attribute vec4 a_Position;" +
             "attribute vec2 a_Texture;" +
             "varying vec2 v_Texture;" +
             "void main(){" +
             "    v_Texture = a_Texture;" +
             "    gl_Position = a_Position;" +
             "}";

String fss = "precision mediump float;" +
             "varying vec2 v_Texture;" +
             "uniform sampler2D u_Texture;" +
             "void main(){" +
             "    gl_FragColor = texture2D(u_Texture, v_Texture);" +
             "}";

int vs = glCreateShader(GL_VERTEX_SHADER);
int fs = glCreateShader(GL_FRAGMENT_SHADER);

glShaderSource(vs, vss);
glShaderSource(fs, fss);

glCompileShader(vs);
glCompileShader(fs);

program = glCreateProgram();

glAttachShader(program, vs);
glAttachShader(program, fs);

glLinkProgram(program);

aPositionLocation = glGetAttribLocation(program, "a_Position");


// ***** Texture stuff starts here   </</</</


// Fase 1
glActiveTexture(GL_TEXTURE0);

int[] genTextures = new int[1];
glGenTextures(1, genTextures, 0);

glBindTexture(GL_TEXTURE_2D, genTextures[0]);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);


// Fase 2
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;

Bitmap bitmap1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.res_for_test_1, options);


// Fase 3
texImage2D(GL_TEXTURE_2D, 0, bitmap1, 0);
glGenerateMipmap(GL_TEXTURE_2D);    


// Fase 4
aTextureLocation = glGetAttribLocation(program, "a_Texture");
uTextureLocation = glGetUniformLocation(program, "u_Texture");

glUniform1i(uTextureLocation, 0);

verticesInBuffer.position(2);
glEnableVertexAttribArray(aTextureLocation);
glVertexAttribPointer(aTextureLocation, 2, GL_FLOAT, false, 16, verticesInBuffer);


// ***** Texture stuff ends here   </</</</


}

@Override
public void onSurfaceChanged(GL10 arg0, int width, int height) {

    GLES20.glViewport(0, 0, width, height);

}

@Override
public void onDrawFrame(GL10 glUnused) {

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

glUseProgram(program);

verticesInBuffer.position(0);
glEnableVertexAttribArray(aPositionLocation);
glVertexAttribPointer(aPositionLocation, 2, GL_FLOAT, false, 16, verticesInBuffer);

glDrawArrays(GL_TRIANGLE_FAN, 0, 6);

}

}
GLES20.glActiveTexture(GLES20.GL_TEXTURE0 + textureUnit);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureID);
GLES20.glUniform1i(uniformID, textureUnit);