OpenGL es 在android平台的移植性问题
2012-07-06 18:08
423 查看
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");
}
但到了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");
}
相关文章推荐
- Android 的平台碎片化问题
- cocos2d-x(quick--cocos2d-x)引擎开发的游戏在android平台上,锁屏,按HOME键,重反游戏后黑屏问题
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——1.2 用OpenGL ES 2.0画一个三角形
- Android平台通用安全问题分析及策略(一)
- 引用extension时(包括发布到Android平台)遇到的问题
- Unity在移动平台上的运用:关于打包到 Android 端的问题
- 关于Android DES加密算法在不同平台加密结果不同的问题的一个解决方法
- Android 5.1-s5p6818平台音频无输出的问题
- 编写一个Android平台遇到的所有问题(一)——查询sqlite数据库时遇到的问题
- linux & android平台WIFI休眠唤醒问题
- 展讯android智能机平台FDL1,FDL2,SPL文件下载问题简析
- Android问题:安卓平台体系结构划分
- Android 的平台碎片化问题
- Cocos2d-x 修改Android平台帧率fps - 解决游戏运行手机发热发烫问题
- 解决源码编译android 4.0.4和SDK 后无法更新安卓平台的更新问题
- OpenGL ES 在 iOS 平台纹理贴图倒置的问题研究
- Android5.1-s5p6818平台“AttributeError: 'JNIFromJavaP' ~~”的问题
- 展讯android智能机平台FDL1,FDL2,SPL文件下载问题简析
- Android----- MD5加密(登录注册得到与IOS相同的加密值,并且解决两个平台汉字加密不相同问题)
- Android 的平台碎片化问题