沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

AndroidOpenGLES渲染YUV

12月8日 顾昀汐投稿
  1、EGL环境搭建1。1关键方法介绍
  1)eglGetDisplay获取EGL显示窗口
  2)eglInitialize对(1)中获取到的Display进行初始化
  3)eglChooseConfig根据对窗口的条件要求从系统中选择最佳的配置数据
  4)eglCreateContext结合EGLDisplay与EGLConfig创建EGL上下文
  5)eglCreateWindowSurface通过Android提供的Surface创建画布
  6)eglMakeCurrentEGLContext、EGLSurface、EGLDisplay创建EGL环境,到这一步我们就可以在当前线程下执行OpenGL相关的Api了
  7)eglSwapBufferSurface内容上屏(每一次OpenGL操作后,都需要执行此操作,确保OpenGL绘制操作及时生效)2、OpenGL着色器2。1关键方法介绍
  加载着色器
  1)eglCreateShader根据指定类型(GLFRAGMENTSHADER、GLVERTEXSHADER。。。)创建一个空的OpenGLShader
  2)glShaderSource给创建出来的Shader输入GLSL代码
  3)glCompileShader编译shader
  4)glGetShaderiv获取编译过程中的状态信息GLCOMPILESTATUS获取编译状态,0表示编译失败GLINFOLOGLENGTH获取编译中的日志字符长度
  5)glGetShaderInfoLog根据(4)中的日志长度得到编译中的日志信息
  6)glDeleteShader清除Shader
  创建着色器程序
  7)glCreateProgram创建一个空的着色器程序
  8)glAttachShader为着色器程序添加Shader
  9)glLinkProgram对(8)中的Shader进行链接
  10)glGetProgramiv获取链接过程中的状态信息GLLINKSTATUS获取链接状态码,0表示链接失败GLINFOLOGLENGTH获取链接过程中的日志字符长度
  11)glGetProgramInfoLog根据(10)中的日志长度得到链接过程中的日志信息
  12)glDeleteProgram清理着色器程序2。2YUV着色器
  顶点着色器attributevec4vPattributevec2fPvaryingvec2vTextCuniformmat4vMvoidmain(){vTextCoordfPglPositionvPositionvM}
  片段着色器varyingvec2vTextCuniformsampler2DyTuniformsampler2DuTuniformsampler2DvTvoidmain(){floatytexture2D(yTexture,vTextCoord)。r;floatutexture2D(uTexture,vTextCoord)。r0。5;floatvtexture2D(vTexture,vTextCoord)。r0。5;vec3rgb。ry1。403v;rgb。gy0。344u0。714v;rgb。by1。770u;glFragColorvec4(rgb,1。0);}3、Demo实现3。1流程简介
  C音视频学习资料免费获取方法:关注音视频开发T哥,点击链接即可免费获取2023年最新C音视频开发进阶独家免费学习大礼包!
  3。2代码实现
  CMake库引入targetlinklibraries({PROJECTNAME}logcat{androidlog}opengllibeglEGLopensllibOpenSLESopengles2。0GLESv2androidbasiclibANativeWindowandroid)
  1)创建EGL环境,使得当前线程支持OpenGL操作1、获取默认窗口EGLDisplayeglDisplayeglGetDisplay(EGLDEFAULTDISPLAY);2、对窗口进行初始化EGLintmajor,eglInitialize(eglDisplay,major,minor);3、为窗口从系统中选定合适的配置EGLintconfigAttrib〔〕{EGLREDSIZE,8,EGLGREENSIZE,8,EGLBLUESIZE,8,EGLALPHASIZE,8,EGLDEPTHSIZE,8,EGLSTENCILSIZE,8,EGLRENDERABLETYPE,EGLOPENGLES2BIT,OpenGLES2。0EGLNONE};EGLEGLConfigeglCeglChooseConfig(eglDisplay,configAttrib,eglConfig,1,num);4、创建EGL上下文EGLintcontextAttrib〔〕{EGLCONTEXTCLIENTVERSION,2,OpenGLES2。0EGLNONE};EGLContexteglContexteglCreateContext(eglDisplay,eglConfig,EGLNOCONTEXT,contextAttrib);5、创建窗口画布EGLintsurfaceAttrib〔〕{EGLWIDTH,1,EGLHEIGHT,1,EGLNONE};这是一个离屏的Surface,等Android可视Surface到达后可进行更换EGLSurfaceeglPbSurfaceeglCreatePbufferSurface(eglDisplay,eglConfig,surfaceAttrib);6、为当前线程绑定EGL环境eglMakeCurrent(eglDisplay,eglPbSurface,eglPbSurface,eglContext);
  2)将EGL环境中的离屏Surface更新为可视Surface(TextureVieworSurfaceViewor。。。)includevoidVideoViewYUV::OnSurfaceCreated(JNIEnvenv,jobjectsurface){将surface转为ANativeWindow类型ANativeWindowwindowANativeWindowfromSurface(env,surface));通过ANativeWindow创建EGLSurfaceEGLSurfacesurfaceeglCreateWindowSurface(egldisplay,eglconfig,window,0);将此Surface更新为当前EGL环境的输出对象eglMakeCurrent(eglDisplay,surface,surface,eglContext);}
  3)编译OpenGL着色器1、编译vertex着色器GLuintvertexShaderglCreateShader(GLVERTEXSHADER);glShaderSource(vertexShader,1,vertexShaderCode,NULL);glCompileShader(vertexShader);2、编译fragment着色器GLuintfragmentShaderglCreateShader(GLFRAGMENTSHADER);glShaderSource(fragmentShader,1,fragmentShaderCode,NULL);glCompileShader(fragmentShader);3、创建着色器程序GLuintprogramglCreateProgram();3。1为着色器程序链接shaderglAttachShader(program,vertexShader);glAttachShader(program,fragmentShader);3。2链接程序glLinkProgram(program);
  4)启用着色器并初始化相关变量1、启用着色器程序glUseProgram(program);2、找到着色器程序中的所有变量gpuYTextureglGetUniformLocation(glslProgram,yTexture);gpuUTextureglGetUniformLocation(glslProgram,uTexture);gpuVTextureglGetUniformLocation(glslProgram,vTexture);gpuVMatrixglGetUniformLocation(glslProgram,vMatrix);gpuVPositionglGetAttribLocation(glslProgram,vPosition);gpuFPositionglGetAttribLocation(glslProgram,fPosition);glGenTextures(3,cpuYuvTexture);for(inti0;i3;i){glBindTexture(GLTEXTURE2D,cpuYuvTexture〔i〕);glTexParameteri(GLTEXTURE2D,GLTEXTUREWRAPS,GLREPEAT);glTexParameteri(GLTEXTURE2D,GLTEXTUREWRAPT,GLREPEAT);glTexParameteri(GLTEXTURE2D,GLTEXTUREMAGFILTER,GLLINEAR);glTexParameteri(GLTEXTURE2D,GLTEXTUREMINFILTER,GLLINEAR);glBindTexture(GLTEXTURE2D,0);}3、输入坐标数据、变换矩阵数据floatvposition〔8〕{1。f,1。f,1。f,1。f,1。f,1。f,1。f,1。f};floatfposition〔8〕{0。f,0。f,1。f,0。f,0。f,1。f,1。f,1。f};glEnableVertexAttribArray(gpuVPosition);glVertexAttribPointer(gpuVPosition,2,GLFLOAT,GLFALSE,sizeof(GLFLOAT)2,vposition);glEnableVertexAttribArray(gpuFPosition);glVertexAttribPointer(gpuFPosition,2,GLFLOAT,GLFALSE,sizeof(GLFLOAT)2,fposition);glUniformMatrix4fv(gpuVMatrix,1,GLFALSE,matrix);
  5)输入YUV图片数据并绘制顶点上屏glActiveTexture(GLTEXTURE0);glBindTexture(GLTEXTURE2D,cpuYuvTexture〔0〕);glUniform1i(gpuYTexture,0);glTexImage2D(GLTEXTURE2D,0,GLLUMINANCE,imageWidth,imageHeight,0,GLLUMINANCE,GLUNSIGNEDBYTE,y);glActiveTexture(GLTEXTURE1);glBindTexture(GLTEXTURE2D,cpuYuvTexture〔1〕);glUniform1i(gpuUTexture,1);glTexImage2D(GLTEXTURE2D,0,GLLUMINANCE,imageWidth2,imageHeight2,0,GLLUMINANCE,GLUNSIGNEDBYTE,u);glActiveTexture(GLTEXTURE2);glBindTexture(GLTEXTURE2D,cpuYuvTexture〔2〕);glUniform1i(gpuVTexture,2);glTexImage2D(GLTEXTURE2D,0,GLLUMINANCE,imageWidth2,imageHeight2,0,GLLUMINANCE,GLUNSIGNEDBYTE,v);glDrawArrays(GLTRIANGLESTRIP,0,4);内容上屏eglSwapBuffer();
  原文链接:AndroidOpenGLES娓叉煋YUV鎺橀噾

建议彻查张颂文背后他是被生活一路毒打过来的。作者:隋坤要问最近谁最火,高启强第一,张颂文第二。这几天,随着电视剧《狂飙》热播,张颂文饰演的高启强从鱼贩一步步被逼成黑帮大佬,上演……324,范乔丹带队7连胜!感谢洛瑞成全,离全明星不远了猛龙队可谓是夺冠之后实力迅速滑落的典型代表!球队在20182019赛季成功击败勇士拿到总冠军,但随即球队核心莱昂纳德离队,使得球队下个赛季折戟东部半决赛,在下下一个赛季更是连季……5个与树共生的可持续性休闲建筑创意古语云仁者乐山,智者乐水,山水之间承载万物、陶冶性情,是自然之美,是乡村之美,也是休闲农业之美,而欣赏这些美景,离不开休闲建筑。那如何让休闲建筑充满创意?不妨看看这5个与树共生……因外包装太简洁,而被酒友忽视的4款白酒,都是纯粮酿造的好酒当今时代,买东西也好、看人也好,都要讲究颜值,虽然心里也知道人不可貌相,逛超市买东西不能要挑好看的,要挑实用的,可是看到好看的人或者物,总是忍不住要多看几眼,美好的人和物的确更……红色警戒二战术介绍三军阵营该如何选择和使用引题西木众所周知,红色警戒二尤里的复仇有三大势力,他们分别是苏军,盟军,尤里,不同的阵营有相对不同的体系,因此,它们也有各自的战术。今天给大家带来这一篇战术介绍(在……有灵性的人是什么样的1、其实灵魂越高级越有灵性的人,就会活得越像一个小孩子,你会发现他在人群当中并不合群,他更加喜欢一个人独处,他们独处时,并不会觉得孤独,而是享受的。因为这样的人,内在是丰……欧文妥协,安东尼拒绝退役再练秘密武器,美媒爆3换1交易北京时间8月6日,自由市场正在如约而至的持续发酵中,各支球队都在跃跃欲试,地震级交易以及顶薪续约合同此起彼伏,联盟也在不断上演着抢人大战,为下赛季的球队崛起保驾护航。欧文……AndroidOpenGLES渲染YUV1、EGL环境搭建1。1关键方法介绍1)eglGetDisplay获取EGL显示窗口2)eglInitialize对(1)中获取到的Display进行初始化3……祝贺!国乒世界冠军升官,升任省体育局长,错过爱情54仍未婚单近段时间,先后培养出李晓霞、张继科、陈梦等众多世界冠军的一代乒坛名将乔云萍又升级了!有网友发现,乔云萍成为山东省体育局党组书记、局长,官至正厅级领导。不得不说,乔云萍为退役的运……还记得她吗?当年与吴京在小李飞刀搭戏的小演员,今惊艳网友7月25日,网友甜辣味小欣分享了一张与知名导演、功夫巨星吴京在《小李飞刀》中的剧照,引发了不少网友的关注和热议。当年,让观众恨到牙痒痒的龙小云,如今已经成为了一位模特,高颜值惊……大瓜王者荣耀职业选手小胖,被爆qj,狼队最终选择力保?王者荣耀世界杯冠军赛都接近尾声。卫冕冠军重庆狠队,在半决赛上遇到老对手武汉eStarPro竟然被零封,这次的狼星大战令大家非常失望。选手在场上似乎状态全无,另一方面心态也炸了,……春天,这几个高铁食物你一定要知道,补铁,特别是女性要常吃女神产值高,全靠补铁滋养!春至时节除了注意日常护理之外,还要注意合理调节饮食起居,饮食方面应食宜清淡,不宜吃油炸、肥腻和过咸食品。春天注意避免糖类、脂肪、盐的过量!保证蛋……
央视主持李思思带儿子打卡故宫!戴网纱帽成贵妇,婴儿白肌肤抢镜羽绒服在冬季可是有着抗寒勇士之称,凭借着独特的设计还有填充物,给予女性足够的温暖,同时羽绒服为了满足现代女性的要求,在款式的变化上那是真的越来越丰富了,但是切记选择羽绒服一定要……北京周末去哪玩推荐6个免费亲子玩水地,完美周末,肆意撒欢走!溯溪玩水去不玩水无夏天,夏天最开心的就:各种玩水各种撒欢,和大自然撞个满怀,治愈一切烦恼。北京周末去哪玩?推荐6个免费亲子玩水地,完美周末,肆意撒欢!清风徐徐,溪水潺……白酒界公认的4款含金量高茅台未在其列?1。汾酒金奖20(清香)rmb:439度数:53vol口感:清香醇正,诸味协调,醇甜柔和,余味爽净,给人清新爽口的感觉,愉悦感强2。华世福(酱香)rmb:288度数……马宁被多拉多撞伤,无法主哨本周末的中超比赛直播吧8月25日讯中超第14轮,中超第十四轮武汉长江主场对阵河南嵩山龙门的比赛中,多拉多撞击当值主裁马宁,被直接红牌罚下。据直播吧了解,由于马宁被撞得不轻,无法主哨本周末的中超……国力李志民,是中国足球第一号悲剧人物,不知贾秀全还记得吗?这是我讲的关于中国足球俱乐部的第四个故事。云南红塔俱乐部投资足球表征广告效应,北京人和俱乐部投资足球表征政策支持,江苏舜天投资足球指向品牌价值,那么足球投资人有没有追求足……图片报贝林厄姆患有慢性滑囊炎膝盖肩膀都因炎症受影响根据德国媒体图片报多特蒙德跟队记者JorgWeiler的最新报道,自从卡塔尔冬季世界杯以来,多特蒙德的超级巨星贝林厄姆就一直受到膝盖问题的困扰。后果就是:从2月与弗赖堡的……山西三大省域副中心规划的破产20年的城市竞争力排名日前,由中国社会科学院财经战略研究院和中国社会科学出版社共同发布了有关城市综合竞争力的报告。报告主要对包含港澳台在内的291个城市,进行综合经……在气质这方面,陈伟霆真的比不过我!神评搞笑了,哈哈哈学个车把自家的积蓄都搭进去了。既然心动,不如行动。这二十年过了跟没过一个样子。然后转移了进食的目标。这不是最高境界,而是泡妞的最低境界。这个帽子的……小虎直播诉苦,EDG冠军教练加盟是噩梦,刚来大家就要叫他开哥最近关于电竞圈的消息还是很多的,德杯的比赛刚刚过去,大家很期待这些做出调整的战队磨合再好一点,然后给大家带来精彩的比赛,今年在小编眼里,TES、EDG、RNG是第一梯队,BLG……交易在所难免!为了总冠军,雄鹿将三分命中率42。6的他摆上货再见雄鹿!再见字母哥!难逃交易厄运的他,三分命中率高达42。6!转眼间,此前还盘踞联盟第一宝座的密尔沃基雄鹿就已经被波士顿凯尔特人给取代。尽管丢掉联盟第一的位置,但在二当……湿热不除,身体有毒,送你6种清热化湿的中成药,清除一身湿热大家好,我是沈医生。湿热不除,身体有毒!因为中医常说湿性黏滞,是因为如果我们身上有湿气,不仅会阻碍我们的气机运行,还会粘在我们身上,不容易被排出去,更重要的是,湿气还会和其他的……水煮花生好吃有技巧,学会1个小妙招,花生米香糯入味特好吃导语:水煮花生米,学会1个小窍门,花生米香糯入味好吃,还特省火水煮花生、油炸花生、糖醋花生等是花生米的经典家常做法,花生米不管是用哪种方法做,都能让人充分享受到其美味的口……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找