一、使用背景

近期在Xcode中使用OpenGL ES 2.0实现一些效果,刚开始存在一些性能问题(CPU和GPU),幸运的是Xcode中自带了免费的性能工具Instruments,其中包含OpenGL ES Analysis,查找方法如图1,图2所示,英文好的童鞋可以访问Apple官方提供的资料(https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ToolsOverview/ToolsOverview.html)。

      

       图1  OpenGL ES Analysis查找                      图2  OpenGL ES Analysis

为了方便查看draw call的回调和shader的执行过程,故此分享下Xcode OpenGL ES Frame Capture的使用。

参考网址:http://www.cnblogs.com/TracePlus/p/4093830.html

二、使用方法

1.OpenGL ES Frame Capture设置

如果使用该功能的前提:

(1)必须使用真机

(2)至少Xcode4.5以上

(3)需要把GLKit或OpenGL Framework加入代码中

(4)设置Manager Schemes..,设置GPU Frame Capture为OpenGL ES 效果如图3,图4所示。

       

        图3  Manager Schemes                                              图4  设置GPU Frame Capture为OpenGL ES

2.捕获Frame

此时,按下command+R运行工程,当在真机上加载完成后进入Debug Navigator ,然后点击FPS标签查看FPS显示,CPU/GPU执行时间等,如图5,图6所示。

      图5  FPS查找

                              图6  FPS标签内容

图6中显示FPS为60,CPU耗时0毫秒,GPU耗时1.7毫秒。程序员的目标是将FPS尽可能的达到60,即每帧画面CPU和GPU耗时Wie16毫秒(1/60)。当FPS的值偏低时,就需要通过上图查看是CPU的瓶颈还是GPU的瓶颈,进而对其进行性能优化。

当GPU遇到瓶颈时,可以捕获每帧,来查看渲染的内部流程,方法为在运行过程中,点击相机图标获取当前Frame,如图7,图8所示。

            图7  Frame捕获按钮

   

    图8  捕获到的当前Frame                                     图9  状态信息

此时在当前设备上,可以看到当前捕获帧的画面(暂停中),选中左侧一行指令,右侧会出现对应的Buffers,GPU Objects 和变量,如图9所示。

如果您的当前画面中没有Objects面板,则可以通过点击show assistant Editor,找到想要显示的选项,如图10所示。

                            

      图10  show assistant Editor                                                                      图11  设置是否高亮显示

可以通过右键选择Show/Hide Draw Call Highlight,显示当前渲染部分为高亮显示,如图11所示。

在assistant窗口中选择Programs选项,选择其中的Program Object便可查看其对应的shader,如图12所示。当然可以查看shader中各个方法的耗时情况,进而进行优化,修改之后点击左下角更新按钮即可查看修改之后的效果,如图13所示。

       

         图12  查看Program Objects                      图13  shader查看

Xcode OpenGL ES Frame Capture的使用的更多相关文章

  1. Use PerfHUD ES to Do Frame Capture Android Game

    Author: http://www.cnblogs.com/open-coder/p/3898224.html Get Start This is short tutorial about how ...

  2. Beginning OpenGL ES 2.0 with GLKit Part 1

    Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...

  3. OpenGL ES 2: debugging, and improvements to VAO, VBO

    OpenGL ES 2: debugging, and improvements to VAO, VBO http://www.altdevblogaday.com/2013/10/12/opengl ...

  4. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  5. IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)

    OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...

  6. Android 中建立一个OpenGL ES的开发环境

    转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...

  7. OpenGL ES应用开发实践指南:iOS卷

    <OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...

  8. 最新首发Eclipse+CDT+android-ndk写纯c++安卓应用(附openGL Es)

    首先下载eclipse和cdt.我的版本依次是:Version: Indigo Service Release 2和Version: 1.0.0.201202111925,再下载windows的ndk ...

  9. 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

    1.                 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...

随机推荐

  1. C++进阶--placement new/delete

    //############################################################################ // Placement New 和 Pl ...

  2. RTMP与HLS压力测试工具安装与配置

    在CentOS 6.5环境中安装依赖软件包,使用git下载最新版本st-load源码包 [root@localhost ~]# yum install git unzip patch gcc gcc- ...

  3. bzoj2909: Bipartite Numbers

    Description Bipartite Number是这样的一个正整数,他只能由两段相同的数组成,如44444411,10000000, 5555556,41,而4444114,44444则不是. ...

  4. JS之滚动条效果2

    在前面一篇说的是滚动条效果,本篇继续在前面的基础上面针对滚动条进行操作.本次要实现的效果如下:拖动滚动条左右移动时,上面的图片内容也相对外层盒子做相对移动. 下面针对要实现的效果进行分析:首先是页面基 ...

  5. MyBatis 值的传递

    1.值的传递 - Map传值 可以通过对象获取Map传递值,在配置文件中通过 #{} 或 ${} 进行应用 查询30-40岁的用户 <!-- 值的传递 - Map传值 --> <se ...

  6. 服务网关zuul之四:zuul网关配置

    禁用过滤器在Zuul中特别提供了一个参数来禁用指定的过滤器,该参数的配置格式如下:zuul.AccessFilter.pre.disable=true动态加载动态路由通过结合Spring Cloud ...

  7. 【转】Java工程师必备书单

    江湖路险,你我同行. Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端 ...

  8. linux中文件名有英文括号的问题

    文件名包含“()”的文件,输入“(“后按TAB键无法补全,手动输入文件全名也删除不了:提示bash: syntax error near unexpected token `('错误. 在linux中 ...

  9. sqlserver 查询重复数据

    use StudentManageDB go ,,) ,,) ,,) select * from ScoreList order by StudentId --在知道那个字段重复的情况 --查询所有重 ...

  10. 家庭版Windows设置远程连接

    家庭版Windows设置远程连接1. windows+R 打开运行,输入 regedit 打开注册表 2.依次打开路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...