> when draw YUV frame use opengl 2.0 and shader on nexus one,but the
> function glTexImage2D is too slow ,cost 40-60 ms
> who can fix it ?I want know whether EGLimage can fix it,but I do not know how
> use EGLimage,who can give me some examples?
the key codes:
> -------------------------------------------------
>
> int CreateSimpleTexture2D()
> {
> int err, i;
>
> for (i=0; i<3;i++)
> {
> glGenTextures(1, &userData.textureId[i]);
> if (err = glGetError()) {
> // NSLog(@"Error: Could not generate texture:
> %d", err);
>
> __android_log_print(ANDROID_LOG_ERROR,"CreateSimpleTexture2D","Error:
> Could not generate texture: %d", err);
> return 0;
> }
>
> glBindTexture(GL_TEXTURE_2D, userData.textureId[i]);
> if (err = glGetError()) {
> // NSLog(@"Error: Could not bind texture: %d",
> err);
>
> __android_log_print(ANDROID_LOG_ERROR,"CreateSimpleTexture2D","Error:
> Could not bind texture: %d", err);
> return 0;
> }
> }
>
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
> GL_LINEAR);
> if (err = glGetError()) {
> //NSLog(@"Error: Could not set texture minimization
> filter: %d", err);
>
> __android_log_print(ANDROID_LOG_ERROR,"CreateSimpleTexture2D","Error:
> Could not set texture minimization filter: %d", err);
> return 0;
> }
>
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
> GL_LINEAR);
> if (err = glGetError()) {
> // NSLog(@"Error: Could not set texture magnification
> filter: %d", err);
>
> __android_log_print(ANDROID_LOG_ERROR,"CreateSimpleTexture2D","Error:
> Could not set texture magnification filter: %d", err);
> return 0;
> }
>
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_CLAMP_TO_EDGE);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_CLAMP_TO_EDGE);
> glGenerateMipmap(GL_TEXTURE_2D);
> return 1;
> }
>
> ---------------------------------------render frame
> -------------------------------------------------
> glViewport ( 0, 0, g_WindowsWidth, g_WindowsHeight );
> checkGlError("glViewport");
> //glDrawBuffer(GL_COLOR_ATTACHMENT0);
> // Clear the color buffer
> glClear ( GL_COLOR_BUFFER_BIT );
> checkGlError("glClear");
> // Use the program object
> glUseProgram ( userData.programObject );
> checkGlError("glUseProgram");
> // Load the vertex position
> glVertexAttribPointer ( userData.positionLoc, 3, GL_FLOAT,
> GL_FALSE, 5 *
> sizeof(GLfloat), vVertices );
> // Load the texture coordinate
> glVertexAttribPointer ( userData.texCoordLoc, 2, GL_FLOAT,
> GL_FALSE, 5 *
> sizeof(GLfloat), &vVertices[3] );
>
> glEnableVertexAttribArray ( userData.positionLoc );
> glEnableVertexAttribArray ( userData.texCoordLoc );
>
> long long ttttttt=av_gettime();
> // Bind the texture
> glActiveTexture ( GL_TEXTURE1 );
> glBindTexture ( GL_TEXTURE_2D, userData.textureId[1] );
> glUniform1i ( userData.samplerLocU, 1);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_CLAMP_TO_EDGE);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_CLAMP_TO_EDGE);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_REPEAT);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_REPEAT);
> //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
>
> //glPixelStorei(GL_UNPACK_ALIGNMENT,1);
>
> glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width/2,
> height/2, 0,
> GL_LUMINANCE, GL_UNSIGNED_BYTE, pict->data[1]);
> checkGlError("glTexImage2D....pict->data[1]");
> //glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width*0.5,
> height*0.5, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pict->data[1]);
>
> // Bind the texture
> glActiveTexture ( GL_TEXTURE2 );
> glBindTexture ( GL_TEXTURE_2D, userData.textureId[2] );
> glUniform1i ( userData.samplerLocV, 2);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_CLAMP_TO_EDGE);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_CLAMP_TO_EDGE);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_REPEAT);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_REPEAT);
> //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
> //glPixelStorei(GL_UNPACK_ALIGNMENT,1);
>
> glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,width/2,
> height/2, 0,
> GL_LUMINANCE, GL_UNSIGNED_BYTE, pict->data[2]);
>
> checkGlError("glTexImage2D....pict->data[2]");
> // Set the sampler texture unit to 0
> glActiveTexture ( GL_TEXTURE0 );
> glBindTexture ( GL_TEXTURE_2D, userData.textureId[0] );
> glUniform1i ( userData.samplerLocY, 0);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
>
> glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_CLAMP_TO_EDGE);
> glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_CLAMP_TO_EDGE);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
> GL_REPEAT);
> //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
> GL_REPEAT);
> //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
> //glPixelStorei(GL_UNPACK_ALIGNMENT,1);
>
> glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width, height, 0,
> GL_LUMINANCE, GL_UNSIGNED_BYTE, pict->data[0]);
>
> __android_log_print(ANDROID_LOG_ERROR,"GPU","%lld",(av_gettime()-ttttttt)/1000);
> checkGlError("glTexImage2D....pict->data[0]");
> glDrawElements ( GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices
> );
--
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en