opengl es3.0编程指南 3.0为什么不能普及

4671人阅读
1. 基本概念
1.1 Mali GPU家族
& & & Mali GPU家族都包含以下通用的硬件:
& & & o&基于分块的延迟渲染:&
& & & & Mali GPU把framebuffer分成许多块(16 x 16像素),然后一块一块地进行渲染。基于分块的渲染是有效的,因为像素值使用片上内存进行计算。它需要更少的内存带宽和功耗。
& & & o&L2 Cache控制器:
& & & & 一个Mali GPU有一个或多个L2 Cache控制器,它可减少内存带宽(可减少访问主内存)和功耗。Mail GPU使用L2 Cache代替本地内存(Local Memory)。&&
1.1.1 Utgard架构家族
& & 具有一个顶点处理器(VP)和一个或多个片断处理器(FP),支持OpenGL ES 1.1 和 2.0。
& 1) &Mali GPU组件
&&2)&Mali-400 MP GPU架构
o&顶点处理器(Vertex Processor: VP)
& &VP处理图形管道的顶点处理(vertex processing)阶段的工作,它产生原语(点、线、三角形)列表,并加速创建供像素处理器(Fragment Processors: FP)使用的数据结构(如:多边形列表和打包的顶点数据)。
o&像素处理器(Fragment Processor:FP)
& &FP处理图形管道的光栅化和像素处理阶段的工作。它使用VP输出的数据结构和原语列表来产生framebuffer中的像素数据,以方便显示在屏幕上。
1.1.2 Midgard架构家族
& & &Midgard架构的GPU拥有用于执行顶点、片断和计算处理的统一的Shader cores,它支持OpenGL ES 1.1、2.0、3.0,以及OpenCL 1.1。
& & 1)&Mali-T600系列GPU组件
& 2)&Mali-T600系列GPU架构
1.2 图形管道(OpenGL ES Graphics Pipeline)
& &Mali GPU使用数据结构和硬件功能模块(VP、FP、MMU、PMU、L2 Cache控制器)来实现OpenGL ES图形管道。
1.2.1&初始化处理 (Start processing)
& &OpenGL ES API级的驱动在内存中为GPU创建数据结构、且为每个场景配置硬件。软件主要功能如下:
& & &1) 为RSWs(Render State Words)和纹理描述产生数据结构
& & &2) 为顶点处理创建命令列表
& & &3) 在需要时编译Shaders&
1.2.2&顶点处理操作(Per-vertex processing operations)
& 顶点处理器为每个顶点运行一次顶点着色器程序(Vertex Shader Program),顶点着色器程序执行如下操作:
& & 1) 光照(Lighting)
& & 2) 变换(Transforms:平移、旋转、拉伸)
& & 3) 视口变换(Viewport transformation)
& & 4) 透视变换(Perspective transformation)
& & 5) 组装图形顶点原语(Assembles vertices of graphics primitives)
& & 6) 创建多边形列表(Builds polygon lists)
1.2.3&光栅化和片断着色(Rasterization and fragment shading)
& &片断/像素处理器(FP)执行以下操作:
& &&1) 读取数据(数据--&系数):
& & & & 读取状态信息、多边形列表和变换之后的顶点数据。这些数据由【三角形设置单元】进行处理并生成系数。
& & 2) 多边形光栅化(系数--&片断):
& & & & 光栅器从【三角形设置单元】中获取系数,然后执行方程式以创建片断。
& & 3) 执行片断着色器(片断--&颜色):
& & & & 片断/像素处理器为每一个片断执行一次【片断着色器程序】以计算出每个片断的颜色。
1.2.4&混合和帧缓冲操作(Blending and framebuffer operations)
& &fragments--& tile buffers --& framebuffer
& &在处理完tile buffer之后,FP为framebuffer产生最后的显示数据。为了提高处理速度,每一个FP处理不同的tile。
& &混合单元把fragments与在对应位置的tile buffer中已经存在的颜色数据进行混合。
& &FP主要功能如下:
& &1) 测试fragments且更新tile buffer
& &2) 计算fragments是否可见,且把可见的fragments保存到tile buffers中
& &3) 在当前tile被完全渲染之后,把tile buffer中的内容写入framebuffer中
2. 优化清单
2.1 检查显示设置
& &1) 应用程序使用正确的drawing surface,使用支持的surface中的一个。
& &2) Framebuffer分辨率和颜色格式与显示控制器兼容
& &3) Framebuffer不要超过屏幕的分辨率
& &4) Framebuffer不要超过屏幕的的颜色的深度
& &5) Framebuffer格式应当与drawing surface格式相同
2.2 使用正确的工具和工具设置
& &1) 使用工具的最新版本
& &2) 当工具更新之后,重新编译所有代码
& &3) 创建与硬件结构相对应的版本
& &4) 充分使用硬件特性:如果硬件支持硬浮点(Vector Floating Point&VFP&)或NEON,使用此特性编译所有相关的代码
& &5) 最后以Release版本发布
2.3 删除调试信息
& &1) 尽量少使用printf,但logcat对性能影响不大
& &2) 尽量不要调用glGetError(),如果需要,每帧不要超过一次,因为它需要占用较多的时间
2.4 避免无限命令列表
& &1) 如果帧间不清楚buffers,命令列表可能一直增长,它将导致GPU做无用功。
& &2) 如果App渲染到surface(如:pixmapsurface、pbuffersurface),在一帧结束时不清除命令列表
& &3) 如果使用FBO(Framebuffer Objects),则不存在此问题
& &4) 如果渲染到eglWindowSurface,每当调用eglSwapBuffers()时,命令列表自动结束
& &5) 为了防止命令列表无限增长,必须同时清楚这些颜色、深度和模板buffer。调用函数:
& & & glClear( GL_COLOR_BUFFER_BIT | GL_DEPTHBUFFER_BIT | GL_STENCILBUFFER_BIT );
2.5 避免调用阻塞图形管道的函数
& &1) glReadPixels()
& &2) glCopyTexImage()
& &3) glTexSubImage()
2.6 不要每一帧都编译Shaders
& &尽量在应用程序启动时编译Shaders,或者使用预编译的shaders。预编译的Shaders只能在编译时指定的GPU上运行。
2.7 使用VSYNC
& & VSYNC(Vertical Synchronization)可使应用的帧率与屏幕的显示速率同步,其功能如下:
& & 1) 它通过消除撕裂改善图像的质量
& & 2) 防止应用产生的帧率大于屏幕可显示的帧率,以降低功耗
2.8 禁止使用24位纹理
& & 可使用16位或32位纹理,而不要使用24位纹理。24位纹理不完全适合高速缓存。采用24位纹理可能会导致数据使用超过一个高速缓存行,这对性能和内存带宽将产生负面影响。
2.9 使用纹理映射(mipmapping)--good
& & 纹理映射:采取高分辨率纹理,并将其伸缩到多个较小的尺寸称为mipmap级别的纹理。这需要比非mipmapped纹理多约33%的内存。
& & 在执行时调用glGenerateMipmap()根据未压缩的纹理产生mipmaps,或使用《Mali GPU Texture Compression Tool》预产生mipmaps。
& & 其好处如下:
& & 1) 改善图像质量
& & 2) 提高性能
& & 3) 减少内存带宽
2.10 使用ETC压缩纹理
& &压缩纹理可减少纹理的大小,其好处如下:
& &1) 提高性能
& &2) 提高纹理的可缓存性
& &3) 减少内存带宽
& &可用的ETC(Ericsson Texture Compression)压缩纹理类型如下:
& 可使用《Mali GPU Texture Compression Tool》创建ETC1、ETC2和ASTC压缩纹理。
2.11 减少内存带宽
& 内存带宽不仅是性能bottleneck,而且内存带宽越大,功耗越高。
& 1) 内存带宽是共享资源,如过度使用将导致整个系统性能问题;如图像内存由APP共享,当GPU过度使用带宽时,CPU性能也将下降
& 2) 访问高速缓存中的将降低功能和提高性能;若APP必须从主内存中读取大量数据,可使用mipmapping或texture compression等技术以确保数据可被高速缓存所缓存
& 3) 可减少内存带宽的方法:&
& & &o Activate back face culling.
& & &o Utilize view frustum culling.
& & &o Ensure textures are not too large.
& & &o Use a texture resolution that fits the object on screen.
& & &o Use low bit depth textures where possible.
& & &o Use lower resolution textures if the texture does not contain sharp detail.
& & &o Only use trilinear filtering on specific objects.
& & &o Utilize Level of Detail (LOD).
2.12 使用顶点Buffer对象(VBO)
& &VBO(Vertex Buffer Object)是让APP存储和操作GPU内存中数据的一种机制。当GPU处理数据时,不需要从CPU内存中读取,可以节约内存带宽。
2.13 发布时检查列表
3. 优化流程
& & 一般优化流程如下图所示:
3.1 如何评估优化效果?
& & & 评估优化效果时使用Frame Time,而不是FPS。
& & &&FPS(Frames per Second) 一个基本的性能指标,而Frame Time是最好的性能优化效果指标。Frame Time是一个线性值,而FPS是一个非线性值,线性值计算更加容易。
& & & FPS与Frame Time的差异如下图所示:
3.2 如何计算Fragment Shader的最大cycles?
A = GPU时钟速度 x FP个数 x 0.8; &// 每秒可达到的最大cycles
B = FB_H x FB_W x 期望的FPS x 2.5; //每秒要求的fragments数
C = A/B; // Fragment Shader的平均cycles&
通过shader compiler工具可以得知Shader需要的cycles.
注:不要误以为Fragment Processing 周期数(cycles)等于Fragment Processing指令数,Mali GPU中的处理器在每周期可执行许多指令。
3.3 Bottleneck在处理器间移动
& & o&在优化过程中,性能瓶颈可在图形管理的不同阶段(即不同的处理)间移动。在DS-5 Streamline中可从图形显示中读取瓶颈位置,瓶颈是其负荷最大的地方。
& & & 在上图中,为了改善性能,可把应用处理器和Fragment处理器上的部分工作移到Vertex处理器上来做。
理想的负荷状态
& & 理想的负荷状态是:图形管道各个阶段的负荷相当,如下图所示:
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1520582次
积分:17252
积分:17252
排名:第248名
原创:229篇
转载:174篇
评论:279条
(2)(4)(3)(2)(5)(4)(10)(3)(4)(3)(2)(3)(6)(1)(2)(6)(5)(5)(8)(7)(7)(19)(18)(6)(15)(4)(3)(1)(12)(12)(31)(22)(12)(16)(14)(11)(7)(4)(15)(10)(8)(56)(19)Android 4.3新功能曝光:支持OpenGL ES 3.0
谷歌已经开始秘密测试Android 4.3了,这似乎暗示即将开幕的I/O开发者大会上,我们将看不到Android 5.0的身影了?
HTC的工程师透露,Android 4.3将会加入Bluetooth Low Energy(低功耗蓝牙技术)功能,通过开放API,开发者可以在这个功能上开发出很多衍生的应用,如健康类应用心率监视器等等。
虽然之前已有厂商已通过自己的努力添加了上述功能,但Android官方直到现在都还没收纳它。此外,开发者还透露,Android新版本系统还将支持OpenGL ES 3.0,而Galaxy S4、HTC One等机型内置的高通骁龙600处理器,其图形处理器Adreno 320已经支持了这个标准。
根据之前OpenGL ES 3.0公布的规范来看,其新功能主要包含有:
1、支持更多缓冲区对象。
2、新版GLSL ES 3.0着色语言,支持 32 位整数和浮点数据类型以及操作。
3、增加多个纹理的支持,包括浮点纹理、深度纹理、顶点纹理等等。
4、多重渲染目标(Multiple Render Targets),让GPU一次性渲染多个纹理。
5、多重采样抗锯齿(MSAA Render To Texture),让3D物体的边缘不出现毛刺,可提升图像效果。
6、使用统一的纹理压缩格式ETC。
Android 4.3有多种版本,从4.3到4.3.1和4.3.3不等。说好的Android 5.0呢?
相关报道:
新闻热线:010-
责任编辑:王新宇
名企动态: |
标志着Windows迈出个性化计算的第一步……
本站特聘法律顾问:于国富律师
Copyright (C) 1997-Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free.
I'm trying to port an iOS project to Android (java). I've however encountered a few ES 2.0 extension functions (OES), which do not appear in the Android GLES20 API:
glGenVertexArraysOES
glBindVertexArrayOES
glDeleteVertexArraysOES
It appears I have to call these functions from NDK, dynamically bind the extensions at runtime and check for support od devices. Not something I'd love to do.
While googling I found these functions in the GLES30 api. So my question is:
- is it possible to mix GLES20 and GLES30 calls?
- are these functions basically calls to the same api or is this completely different?
- any other sugggestions?
Just looking at the API entry points, ES 3.0 is a superset of ES 2.0. So the transition is mostly smooth. You request API version 3 when making the GLSurfaceView.setEGLContextClientVersion() call, and your ES 2.0 code should still work. Then you can start using methods from GLES30 on top of the GLES20 methods.
There are some very subtle differences, e.g. related to slight differences in cube map sampling, but you're unlikely to run into them. If you want details, see appendix F.2 of the spec document. Some features like client side vertex arrays have been declared legacy, but are still supported.
The only thing you're likely to encounter are differences in GLSL. You can still use ES 2.0 shaders as long as you keep the #version 100 in the shader code. But if you want to use the latest GLSL version (#version 300 es), there are incompatible changes. The necessary code changes are simple, it's mostly replacing attribute and varying with in and out, and not using the built-in gl_FragColor anymore. You have to switch over to the new GLSL version if you want to take advantage of certain new ES 3.0 features, like multiple render targets.
The downside of using ES 3.0 is of course that you're much more restricted in the devices your software runs on. While the latest higher-end devices mostly support ES 3.0, there are still plenty of devices out there that only support 2.0, and will stay at that level. According to the latest data from Google (), 18.2% of all devices support ES 3.0 as of July 7, 2014.
28.2k61939
As @vadimvolk explained, you will need to check whether OpenGL driver supports OES_vertex_array_object extension. More info here:
If you just stick to use OpenGL ES 3.0, you can use these methods after checking that you've got OpenGL ES 3.0 context. In Android, you can mix calls to GLES20 and GLES30 because these APIs are backwards-compatible.
All you need is to create OpenGL ES 2.0 context and check if returned context version is 3.0 by reading GL_VERSION string. If it is 3.0, you can use mix both GLES20 and GLES30 functions. Additional info:
Functions are same. In GLES20 they are exists only on some devices as not mandatory extensions.
In GLES30 they are mandatory.
If you use them from GLES30 your application will work only on devices supports GLES30 (only devices made for android 4.4).
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled你的位置: >
此外并支持品牌OpenGL ES 3.0版本 14:44
评论:字号:苹果 iPhone 5S16GB手机而今在手机市场上依然很优秀,虽然在机能方面也做出了更大的更新的处理,处理器进级到了64位A7,里存进级为LPDDR3,相当出色,越发引人注目。在今朝苹果iPhone5s在掌酷数码国行报价 1860 元(天下货到付款),有兴趣的可以接洽方
网店链接 :
店铺所在 :江苏省无锡市南长区人民西路梦之岛
提醒网购有风险,请网友操作支付宝等保证支付要领举办业务,本站提供的信息,均可举办淘宝在线业务,可能货到付款,请网友不要轻信任何人先打款后发货的非保证业务要领举办业务。请大师生存好有效的业务记录、通信记录、 QQ记录等,以便维护自己的权益!一旦发生纠纷请拨打投拆电话 QQ:此电话/QQ为投诉专用,不接管产时值值等咨询,不含节沐日。5S
型号:iPhone5s 16G
国行 PCHOMEVIP商店
苹果 iPhone 5S16GB手机而今在手机市场上依然很优秀,虽然在机能方面也做出了更大的更新的处理,处理器进级到了64位A7,里存进级为LPDDR3,相当出色,越发引人注目。在今朝苹果iPhone5s在掌酷数码国行报价1860元(天下货到付款),有兴趣的可以接洽要领张小姐 QQ 。
销售商家:掌酷数码
iPhone5s日版的最为明明的一进级处地点于其搭载了苹果A7处理器,其最刺目的地方便在于它是64位的结构。iPhone 5s日版作为首款搭载64位架构芯片的手机,自然噱头十足。A7芯片基于ARM的ARM v8打算,其指令集支持AES和SHA-1/SHA-256加密运算。苹果应用其在Touch ID生物节制机制,另外并支持OpenGL ES 3.0版本,图形处理机能更佳。
点评16GB苹果iPhone5s报价有多高,相信好多人都有所耳闻,该机曾一度被炒至超过1万元,而其官方原价也就仅为5千多元,价值虚高也是因为缺货,而今货源富饶了,苹果iPhone5s国行的报价也是终于回归理性,并且尚有着不错的降幅,对该机等待已久的朋友可以下手.
联 系 人 :张小姐
苹果iPhone5S
苹果iPhone5S
参考价值:1860元
iPhone5s国行在整体外观上,根基沿袭了上一代iPhone的造型,机身尺寸和厚度均没有改变。只不过在颜色上面,iPhone 5s日版拥有了深空灰色、银白色和香槟金色三种,而本次评测机型正好是香槟金色。反面给人的第一感觉,就是闪光灯地域明明被换成了LED双闪光灯,分为白色和黄色两颗,分别对应冷色调与暖色调。根据苹果官方先容,这两颗闪光灯能够根据情形光泽,组合出3000多种曝光方案,大大晋升闪光灯质量.此外并支持品牌OpenGL ES 3.0版本相关推荐●【下一页更精彩】●相关文章:
更多内容访问地方品牌网:第一时间获取地方品牌资讯和商品优惠动态,请用手机扫描左方二维码,或在微信公众账号中搜索「地方品牌网」或「difangpinpai」,即可获得地方品牌网每日精华内容推送和商品优惠资讯,并参与编辑活动。
此外并支持品…相关推荐讯胡笑红实习贾婷服装企业关店潮仍在继续,波司登27日发布截至日的中期财报显示,公今日直达链接 苏宁易购 次旗舰声波牙刷,满减新低价~ PHILIPS自从收购了Sonicare后在声波牙刷规模逐今日直达链接 美国亚马逊 体毛你好,体毛再见!七夕来了,性感不留毛,平滑美腿俘获男神~这款飞利浦 今日 网站专题热门专题微信扫描分享本文加此微信免费送1斤红枣

我要回帖

更多关于 opengl es 3.0 pdf 的文章

 

随机推荐