歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenGL ES 在Android平台的移植性問題

Android上為了讓視頻顯示的更流暢,自然要使用到NDK, 沒有采用YUV420 overlay的方式,  而采用平台移植更安全的RGB565顯示。 在android 2.3上測試通過。

但到了MTK andriod平台(A301)遇到glTexImage2D gl_error  0x501的錯誤(源圖像為176*144)。  經過反復測試, 這個mtk andriod版本支持opengl es, 但對源圖像的分辨率有奇怪的限制。當源尺寸寬高必須是64的倍數而且一般寬高為2倍的關系。比如512*256, 256*128都是可以的。只能先把圖像縮放到256*128, 然後再用opengl es刷屏。

另外, OpenSL es在MTK的android上也還是可以用的。

~~~最後 貼上opengl es的sample code給大家參考咯

void OpenGL_Resize(jint screen_width,  jint screen_height)

{

glDeleteTextures(1, &s_texture);
GLuint *start = s_disable_caps;
while (*start)
glDisable(*start++);
glEnable(GL_TEXTURE_2D);

glGenTextures(1, &s_texture);

glBindTexture(GL_TEXTURE_2D, s_texture);

glTexParameterf(GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameterf(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glShadeModel(GL_FLAT);
check_gl_error("glShadeModel");
glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
check_gl_error("glColor4x");
int rect[4] = {0, TEXTURE_HEIGHT, TEXTURE_WIDTH, -TEXTURE_HEIGHT};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
check_gl_error("glTexParameteriv");
VideoWidth = width;
VideoHeight = height;


}


static void render_video_opengl(unsigned char* rgb_buffer)
{
glClear(GL_COLOR_BUFFER_BIT);
glTexImage2D(GL_TEXTURE_2D,/* target */
0, /* level */
GL_RGB, /* internal format */
TEXTURE_WIDTH,/* width */
TEXTURE_HEIGHT,/* height */
0, /* border */
GL_RGB, /* format */
GL_UNSIGNED_SHORT_5_6_5,/* type */
rgb_buffer); /* pixels */
check_gl_error("glTexImage2D");
glDrawTexiOES(0, 0, 0, VideoWidth, VideoHeight);
check_gl_error("glDrawTexiOES");
}

Copyright © Linux教程網 All Rights Reserved