void drawGLScene(AndroidContext *rc) { #ifdef DROID_EXTREME_LOGS LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : start"); #endif /* DROID_EXTREME_LOGS */ GLfloat vertices[4][3]; GLfloat texcoord[4][2]; // int i, j; float rgba[4]; #ifdef GLES_FRAMEBUFFER_TEST glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); #endif // Reset states rgba[0] = rgba[1] = rgba[2] = 0.f; rgba[0] = 1.f; glColor4f(1.f, 1.f, 1.f, 1.f); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, rgba); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, rgba); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, rgba); glDisable(GL_CULL_FACE | GL_NORMALIZE | GL_LIGHTING | GL_BLEND | GL_FOG | GL_COLOR_MATERIAL | GL_TEXTURE_2D); /* Clear The Screen And The Depth Buffer */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glEnable(GL_BLEND); //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); glBindTexture( GL_TEXTURE_2D, rc->texID); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // for ( i = 0; i < rc->height/2; i++ ) // for ( j = 0; j < rc->width; j++ ) // rc->texData[ i*rc->width*NBPP + j*NBPP + 3] = 200; // memset(rc->texData, 255, 4 * rc->width * rc->height ); #ifndef GLES_FRAMEBUFFER_TEST glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rc->texData ); #endif if ( rc->draw_texture ) { int cropRect[4] = {0,rc->height,rc->width,-rc->height}; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); glDrawTexsOES(0, 0, 0, rc->width, rc->height); } else { /* Enable VERTEX array */ glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); /* Setup pointer to VERTEX array */ glVertexPointer(3, GL_FLOAT, 0, vertices); glTexCoordPointer(2, GL_FLOAT, 0, texcoord); /* Move Left 1.5 Units And Into The Screen 6.0 */ glLoadIdentity(); //glTranslatef(0.0f, 0.0f, -3.3f); //glTranslatef(0.0f, 0.0f, -2.3f); /* Top Right Of The Quad */ vertices[0][0]=rc->tex_width; vertices[0][1]=rc->tex_height; vertices[0][2]=0.0f; texcoord[0][0]=1.f; texcoord[0][1]=0.f; /* Top Left Of The Quad */ vertices[1][0]=0.f; vertices[1][1]=rc->tex_height; vertices[1][2]=0.0f; texcoord[1][0]=0.f; texcoord[1][1]=0.f; /* Bottom Left Of The Quad */ vertices[2][0]=rc->tex_width; vertices[2][1]=0.f; vertices[2][2]=0.0f; texcoord[2][0]=1.f; texcoord[2][1]=1.f; /* Bottom Right Of The Quad */ vertices[3][0]=0.f; vertices[3][1]=0.f; vertices[3][2]=0.0f; texcoord[3][0]=0.f; texcoord[3][1]=1.f; /* Drawing using triangle strips, draw triangles using 4 vertices */ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); /* Disable vertex array */ glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } glDisable(GL_TEXTURE_2D); /* Flush all drawings */ glFinish(); #ifdef GLES_FRAMEBUFFER_TEST glBindFramebufferOES(GL_FRAMEBUFFER_OES, rc->framebuff); #endif #ifdef DROID_EXTREME_LOGS LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : end"); #endif /* DROID_EXTREME_LOGS */ }
void drawGLScene(AndroidContext *rc) { #ifdef DROID_EXTREME_LOGS LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : start"); #endif /* DROID_EXTREME_LOGS */ #ifdef GPAC_USE_GLES2 GLuint loc_vertex_array, loc_texcoord_array; loc_vertex_array = loc_texcoord_array = -1; #endif GLfloat vertices[4][3]; GLfloat texcoord[4][2]; // int i, j; float rgba[4]; GL_CHECK_ERR // Reset states rgba[0] = rgba[1] = rgba[2] = 0.f; rgba[0] = 1.f; #ifndef GPAC_USE_GLES2 glColor4f(1.f, 1.f, 1.f, 1.f); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, rgba); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, rgba); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, rgba); #endif /* Clear The Screen And The Depth Buffer */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GL_CHECK_ERR //glEnable(GL_BLEND); //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #ifndef GPAC_USE_GLES2 glEnable(GL_TEXTURE_2D); #endif glUseProgram(rc->base_program); glActiveTexture(GL_TEXTURE0); glBindTexture( GL_TEXTURE_2D, rc->texID); GL_CHECK_ERR glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); #ifndef GPAC_USE_GLES2 glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); #endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // for ( i = 0; i < rc->height/2; i++ ) // for ( j = 0; j < rc->width; j++ ) // rc->texData[ i*rc->width*NBPP + j*NBPP + 3] = 200; // memset(rc->texData, 255, 4 * rc->width * rc->height ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, rc->tex_width, rc->tex_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rc->texData ); GL_CHECK_ERR if ( rc->draw_texture ) { GL_CHECK_ERR int cropRect[4] = {0,rc->height,rc->width,-rc->height}; #ifndef GPAC_USE_GLES2 glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); glDrawTexsOES(0, 0, 0, rc->width, rc->height); #endif } else { GL_CHECK_ERR #ifndef GPAC_USE_GLES2 /* Enable VERTEX array */ glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); /* Setup pointer to VERTEX array */ glVertexPointer(3, GL_FLOAT, 0, vertices); glTexCoordPointer(2, GL_FLOAT, 0, texcoord); /* Move Left 1.5 Units And Into The Screen 6.0 */ glLoadIdentity(); #else loc_vertex_array = glGetAttribLocation(rc->base_program, "gfVertex"); if(loc_vertex_array<0) return; glEnableVertexAttribArray(loc_vertex_array); glVertexAttribPointer(loc_vertex_array, 3, GL_FLOAT, GL_FALSE, 0, vertices); loc_texcoord_array = glGetAttribLocation(rc->base_program, "gfTexCoord"); if (loc_texcoord_array>=0) { glVertexAttribPointer(loc_texcoord_array, 2, GL_FLOAT, GL_FALSE, 0, texcoord); glEnableVertexAttribArray(loc_texcoord_array); } #endif //glTranslatef(0.0f, 0.0f, -3.3f); //glTranslatef(0.0f, 0.0f, -2.3f); /* Top Right Of The Quad */ vertices[0][0]=rc->tex_width; vertices[0][1]=rc->tex_height; vertices[0][2]=0.0f; texcoord[0][0]=1.f; texcoord[0][1]=0.f; /* Top Left Of The Quad */ vertices[1][0]=0.f; vertices[1][1]=rc->tex_height; vertices[1][2]=0.0f; texcoord[1][0]=0.f; texcoord[1][1]=0.f; /* Bottom Left Of The Quad */ vertices[2][0]=rc->tex_width; vertices[2][1]=0.f; vertices[2][2]=0.0f; texcoord[2][0]=1.f; texcoord[2][1]=1.f; /* Bottom Right Of The Quad */ vertices[3][0]=0.f; vertices[3][1]=0.f; vertices[3][2]=0.0f; texcoord[3][0]=0.f; texcoord[3][1]=1.f; /* Drawing using triangle strips, draw triangles using 4 vertices */ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); #ifndef GPAC_USE_GLES2 /* Disable vertex array */ glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #endif } #ifndef GPAC_USE_GLES2 glDisable(GL_TEXTURE_2D); #endif GL_CHECK_ERR /* Flush all drawings */ glFinish(); #ifdef DROID_EXTREME_LOGS LOG( ANDROID_LOG_VERBOSE, TAG, "drawGLScene : end"); #endif /* DROID_EXTREME_LOGS */ }
void glDrawTexsOESLogged(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height) { printf("glDrawTexsOES(%i, %i, %i, %i, %i)\n", x, y, z, width, height); glDrawTexsOES(x, y, z, width, height); }