如果说 ,我不知道,如果你不明白这个话题。连接到:http://blog.csdn.net/wangchenggggdn/article/details/8896453(下称链接①),

里面评论有非常多人提到了这个问题,我也是当中一员,可是问遍了全部人,自己也发帖(http://bbs.csdn.net/topics/390769358

寻求解决方式,却终究没能得到一个可用的方案。

从2014年4月中旬遇到这个问题。纠结了两个多星期,最终在看了好多好多资料之后。于4月的最后一个周一,临时攻克了这么个问题。

距离那时候已经快3个月了,因为这段时间我留下的qq邮箱,不小心泄露了我的那么一点点信息,也有好几个网友加我q问我这个问题。

索性我就再倒回来写一篇文章解释一下,这也算是我在csdn上面正儿八经的第一篇原创blog,一字一句出自我手。

废话不多说,正文来了:

自从參考链接①做了yuv显示之后,坐标问题就一直存在,以下两组坐标系就是罪魁祸首,

///////////////////// 米2S、华为 等//////////////////////////
GLfloat squareVertices_zero[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};
GLfloat coordVertices_zero[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
}; ////////////////////// 红米、台电pad、kindle pad、SS_SCH-1939D等//////////////////////////
GLfloat squareVertices_one[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
}; GLfloat coordVertices_one[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
};

最终在无奈之下,病急乱投医,每找到个资料就好好的看看,最终被这篇(http://guide.eoeandroid.com/#OpenGL)文章中的几个大字“OpenGL
版本号与设备兼容性”  给深深的吸引住了。于是多投入了一些眼神。。哈哈!

然后自己再通过获取不同设备的OpenGL扩展名来看,发现了一些不算规律的规律。

。。

问题从此变得明朗了,解决方式例如以下:

第一步:在createSurfaceView的时候,推断应该使用哪种坐标系:

char *glExtension = NULL;
glExtension = glGetString(GL_EXTENSIONS);
if(strstr(glExtension, "GL_AMD_compressed_ATC_texture") != NULL)
{
// LOGD("===%s===", strstr(glExtension, "GL_AMD_compressed_ATC_texture"));
Vertex_Texture_Index = 0;
}
else
{
// LOGE("===%s===", strstr(glExtension, "GL_AMD_compressed_ATC_texture"));
Vertex_Texture_Index = 1;
}

当然,那个“GL_AMD_compressed_ATC_texture”仅仅只是是我自己选择来推断的条件,你也能够依据自己的观察自己来选一个扩展名作为推断

第二步:在render的时候选择纹理坐标系

	if(Vertex_Texture_Index == 0)
{
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices_zero); // 2:2个数字表示一个坐标
glEnableVertexAttribArray(ATTRIB_VERTEX); glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, coordVertices_zero);
glEnableVertexAttribArray(ATTRIB_TEXTURE);
}
else if(Vertex_Texture_Index == 1)
{
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices_one); // 2:2个数字表示一个坐标
glEnableVertexAttribArray(ATTRIB_VERTEX); glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, coordVertices_one);
glEnableVertexAttribArray(ATTRIB_TEXTURE);
}

至此。在我这儿就算是攻克了这个问题了。

特此写出来,希望能提供一些帮助给有须要的人

当然。我自己也不是非常确定那个扩展名究竟能不能全然的兼容全部设备,所以。。

以后要是哪位朋友还有更好的解决的方法。烦请告知!!!

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Android使用OpenGL ES2.0显示YUV,您的手机上的数据要解决两个方面的坐标的更多相关文章

  1. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤

    原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...

  2. OPENGL ES2.0如何不使用glActiveTexture而显示多个图片

    https://www.oschina.net/question/253717_72107 用opengl es 2.0显示多个图片的话,我只会一种方式,先将图片生成纹理,然后用下面的方式渲染 // ...

  3. Android +NDK+eclipse+opengl ES2.0 开启深度測试

    參考:https://www.opengl.org/discussion_boards/showthread.php/172736-OpenGL-ES-Depth-Buffer-Problem 环境: ...

  4. Android上使用OpenGLES2.0显示YUV数据

    在Android上用OpenGLES来显示YUV图像,之所以这样做,是因为: 1.Android本身也不能直接显示YUV图像,YUV转成RGB还是必要的: 2.YUV手动转RGB会占用大量的CPU资源 ...

  5. iOS开发——图形编程OC篇&OpenGL ES2.0编程步骤

    OpenGL ES2.0编程步骤 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设 ...

  6. OpenGL ES2.0入门详解

    引自:http://blog.csdn.net/wangyuchun_799/article/details/7736928  1.决定你要支持的OpenGL ES的版本.目前,OpenGL ES包含 ...

  7. OpenGL ES2.0 基本编程

    1. EGL OpenGL ES命令须要一个rendering context和一个drawing surface. Rendering Context: 保存当前的OpenGL ES状态. Draw ...

  8. OpenGL ES2.0 入门经典例子

    原文链接地址:http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿 ...

  9. Cocos2d-x中使用OpenGL ES2.0编写shader

    这几天在看子龙山人的关于OpenGL的文章,先依葫芦画瓢,能看到些东西,才能慢慢深入了解,当入门文章不错,但是其中遇到的一些问题,折腾了一些时间,为了方便和我一样的小白们,在这篇文章中进行写补充. O ...

随机推荐

  1. ASP.NET Identity 身份验证和基于角色的授权

    ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...

  2. hdu 4407 Sum 容斥+当前离线

    乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数. 如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作.把改动加上去 ...

  3. (大数据工程师学习路径)第一步 Linux 基础入门----Linux 下软件安装

    介绍 介绍 Ubuntu 下软件安装的几种方式,及 apt,dpkg 工具的使用. 一.Linux 上的软件安装 通常 Linux 上的软件安装主要有三种方式: 在线安装 从磁盘安装deb软件包 从二 ...

  4. 页面加速Chromium 预压 Prerendering

    前者已经推出了一个博客prefetch预加载的网页资源,以提高网页加载速度,下面我们一起来看一下,以加速网页chromium prerendering.介绍prerendering之前.先介绍两个概念 ...

  5. 数字使用相应的加密策略传递一个字符串后Java实现代码

    公司采用公用电话传递数据,数据小于8整数位,为了确保安全,     在转移的过程中需要加密,加密规则如下面的:         第一个数据下降,附图然后各加5,和除以10的余数取代该数字,       ...

  6. 开源服务发现项目Zookeeper,Doozer,Etcd

    这篇文章是Jason Wilder对于常见的服务项目发现Zookeeper.Doozer,Etcd所写的一篇博客,其原文地址例如以下:Open-Source Service Discovery. 服务 ...

  7. 十天学Linux内核之第四天---如何处理输入输出操作

    原文:十天学Linux内核之第四天---如何处理输入输出操作 真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可 ...

  8. e.target 和 e.srcElement 的使用问题

    ie 下的event.srcElement从字面上可以看出来有以下关键字:事件.源(它的意思就是:当前事件的源), 我们可以调用他的各种属性就像:document.getElementById(&qu ...

  9. vim温馨提示

    (一)各种文本操作 各种跳转 h,j,k,l h左移一个字符,j下移一行,k上移一行,l右移一个字符 w.b w 下一个单词,b上一个单词 0,$   行首,行尾 G,gg.30% 3G跳到第3行,g ...

  10. 【翻译】C#和.NET核心快速参考

    原文:[翻译]C#和.NET核心快速参考 PS:在网上看到的一篇C#总结,英文的,总结的还可以,都是基础知识,翻译给大家学习.文章结尾有英文原版.发布地址:http://www.cnblogs.com ...