`
mmdev
  • 浏览: 13460145 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

BlackBerry PlayBook NDK 2.0样例分析之“HelloWorldDisplay”

 
阅读更多

分析了“HelloWorldConsole”样例和PlayBook NDK的事件处理机制后让我们来看看PlayBook NDK中的第二个样例“HelloWorldDisplay”。

样例“HelloWorldDisplay”就是之前NDK Beta中的“HelloWorld”样例,之前的博文也介绍过,程序启动后在屏幕上显示一张底图和“HelloWorld”字样。

既然我们已经开始理解PlayBook NDK上的事件处理机制,就让我们更深入看看“HelloWorldDisplay”的代码。

“HelloWorldDisplay”项目中有main.c,bbutil.h,bbutil.c三个文件,其中bbutil.h和bbutil.c文件中提供了一些工具函数,用于实现一些具体的工作,本文先不作详细介绍,这里主要先看看main.c中的代码。

从main.c中的main函数开始,开始首先是对PlayBook屏幕环境的初始化,代码如下:

 screen_create_context(&screen_cxt, 0);

函数screen_create_context是在头文件<screen/screen.h>中声明的,用于初始化PlayBook得屏幕环境,对于需要图形界面的程序这一步都是需要的。

其中的参数是指向screen_cxt的指针,而screen_cxt在main.c文件开头进行了声明,声明如下:

static screen_context_t screen_cxt;

初始化屏幕后就需要进行BPS的初始化工作,主要是为了后面的事件处理。如之前的博文提到的,BPS初始化工作通过调用bps_initialized()函数完成,代码如下:

 bps_initialize();


完成了BPS的初始化工作后开始为屏幕设置egl,完成egl初始化工作,启动openGL。

egl的初始化过程比较复杂,样例中这些代码被放在bbutil.c中进行定义,在main.c中就简单调用bbutil_init_egl()函数完成。这里不详细讲述egl的初始化过程,有兴趣的同学可以打开bbutil.c文件仔细看看。

bbutil_init_egl()函数的调用代码如下,调用完成后会对调用结果进行判断,如果调用失败则对screen_cxt进行释放。

    if (EXIT_SUCCESS != bbutil_init_egl(screen_cxt)) {
        fprintf(stderr, "Unable to initialize EGL\n");
        screen_destroy_context(screen_cxt);
        return 0;
    }

进一步是样例本身的初始化工作,主要是加载字体,并定义顶点数组和纹理坐标数组,所有初始化代码放在main.c的init()函数中。

    //Initialize app data
    if (EXIT_SUCCESS != init()) {
        fprintf(stderr, "Unable to initialize app logic\n");
        bbutil_terminate();
        screen_destroy_context(screen_cxt);
        return 0;
    }


然后是调用navigator_rotation_lock()函数锁定屏幕,不响应PlayBook方向变化的动作。

接着通过screen_request_events()函数和navigator_request_events()函数向BPS请求屏幕事件和“Navigator”事件。这两部分的代码是该样例事件处理的重要部分。

    //Signal BPS library that navigator orientation is to be locked
    if (BPS_SUCCESS != navigator_rotation_lock(true)) {
        fprintf(stderr, "navigator_rotation_lock failed\n");
        bbutil_terminate();
        screen_destroy_context(screen_cxt);
        return 0;
    }

    //Signal BPS library that navigator and screen events will be requested
    if (BPS_SUCCESS != screen_request_events(screen_cxt)) {
        fprintf(stderr, "screen_request_events failed\n");
        bbutil_terminate();
        screen_destroy_context(screen_cxt);
        return 0;
    }

    if (BPS_SUCCESS != navigator_request_events(0)) {
        fprintf(stderr, "navigator_request_events failed\n");
        bbutil_terminate();
        screen_destroy_context(screen_cxt);
        return 0;
    }


已经完成初始化工作后就进入事件循环,在事件循环中通过bps_get_event()函数获取事件,如果事件获取成功则对事件进行处理。本例对事件的处理很简单,只响应退出事件,当退出事件发生时跳出事件循环。

事件处理完成后调用render()函数完成屏幕绘制工作,所有绘制工作在main.c的update()函数中完成,主要是通过openGL的相关函数展现顶点数组对应的矩形,同时显示纹理。

有关如何通过openGL显示图形我们在之后的文章中继续讨论。

这里还要注意一点的是调用bps_get_event时使用了0为参数,意味着如果没有事件发生,程序不会阻塞,而会继续运行。也就是说该样例一直在重画屏幕上显示的内容,虽然我们看见的只是一张静态的底图和“Hello World”字样。

    for (;;) {
        //Request and process BPS next available event
        bps_event_t *event = NULL;
        rc = bps_get_event(&event, 0);
        assert(rc == BPS_SUCCESS);

        if ((event) && (bps_event_get_domain(event) == navigator_get_domain())
                && (NAVIGATOR_EXIT == bps_event_get_code(event))) {
            break;
        }

        fprintf(stderr,"Trying to render \n");
        render();
    }

如果退出事件发生,程序会跳出事件循环继续执行下面的资源释放代码:

    //Stop requesting events from libscreen
    screen_stop_events(screen_cxt);

    //Shut down BPS library for this process
    bps_shutdown();

    //Destroy the font
    bbutil_destroy_font(font);

    //Use utility code to terminate EGL setup
    bbutil_terminate();

    //Destroy libscreen context
    screen_destroy_context(screen_cxt);
    return 0;



通过对“HelloWorldDisplay”样例的分析我们可以完整地看到一个PlayBook NDK应用程序的运行过程,包括应用的初始化,事件循环和资源释放三个重要的部分。

有关如何使用OpenGL在PlayBook上进行绘图,我们后面继续讨论。

分享到:
评论

相关推荐

    blackberry NDK

    BlackBerry NDK,全称是BlackBerry Native Development Kit,是一个专为BlackBerry PlayBook和BBX操作系统的原生应用程序开发而设计的工具集。它允许开发者使用C和C++语言来编写应用程序,直接访问设备的底层硬件...

    黑莓PlayBook平台下的工程示例

    在这种背景下,“黑莓PlayBook平台下的工程示例”显得尤为珍贵,它们为开发者提供了宝贵的参考和学习材料,特别是对于那些想要利用NDK(Native Development Kit)进行原生代码编程的开发者。 NDK是黑莓平台上的一个...

    playbook一键刷机教程

    Playbook一键刷机教程 本文档提供了Playbook一键刷机的详细教程,旨在帮助用户快速刷机并升级到最新的1917系统。本教程解决了之前版本的BUG,包括修复桥接的BUG、取消了浏览器、摄像机和BBworld的安装、降级后直接...

    黑莓Playbook原生浏览器输入法

    "黑莓Playbook原生浏览器输入法"这个主题聚焦于黑莓平板电脑上的浏览器输入体验,特别是对于中文用户而言。黑莓Playbook是一款搭载BlackBerry Tablet OS系统的平板电脑,尽管其市场份额相对较小,但对于用户来说,...

    如何打包基于Playbook的Android应用

    - **目的**: 为了测试转换后的应用,需要将PlayBook设备升级至2.0版本的Beta测试版。此操作需在官网注册并等待批准。 - **链接**: [https://bdsc.webapps.blackberry.com/android/beta/bbtablet20/register/]...

    2010BlackBerry PlayBook上的设备集成

    ### 2010 BlackBerry PlayBook上的设备集成 #### 议程回顾与核心知识点 **议程** - 前两周网络研讨会回顾 - 摄像头 - 设备传感器 - 应用的生命周期 - 滑动手势 - 设备信息 - 活动指示标识 - 电池电量和事件 - ...

    BlackBerry_PlayBook_Tablet-T1526983-1526983-0213114900-011-2.0-ZH

    PlayBook中文说明书,BlackBerry_PlayBook_Tablet-T1526983-1526983-0213114900-011-2.0-ZH.pdf

    基础电子中的黑莓PlayBook拆解

    黑莓PlayBook 是黑莓公司2010年发布的平板电脑,定于2011年正式上市,该平板电脑的配置相当高,配备黑莓自己研发的操作系统。  规格参数  网络制式:CDMA2000/CDMA1X EV-DO  重 量 :400 克  尺寸/体积:193...

    黑莓Android Player说明文档

    黑莓Android Player的推出极大地丰富了BlackBerry PlayBook的应用生态,使得用户能够享受到更广泛的应用程序选择。虽然目前存在一些功能限制,但随着技术的不断进步和版本迭代,未来的Android Player将会更加完善,...

    Virtual Keyboard for BlackBerry PlayBook:BlackBerry PlayBook 的虚拟键盘。 俄罗斯布局实施。-开源

    【标题】"Virtual Keyboard for BlackBerry PlayBook: BlackBerry PlayBook 的虚拟键盘。俄罗斯布局实施。-开源"揭示了这个项目的核心内容是为BlackBerry PlayBook设计的一款虚拟键盘,并且特别强调了它采用了俄罗斯...

    黑莓备份提取软件 2.0.1(未注册)

    “支持所有版本黑莓(包括PlayBook系列)的桌面管理器的备份bbb、 ipd和新的bbb v2文件,从BlackBerry备份恢复任何文件(加密或未加密),安装适用于Windows、Mac、OS X、 Linus设备。自动提取转换成CSV、vCard或...

    playbook调用云输入法

    在IT行业中,Playbook通常指的是BlackBerry PlayBook,这是一款由BlackBerry(原RIM公司)推出的平板电脑。本文将围绕Playbook如何调用云输入法进行深入探讨,特别是针对在设备内置的浏览器中启用中文输入法的方法。...

    ansible:KubeOperator 3.0 Ansible Playbook,替代2.0版本中的kubeasz组件

    KubeOperator 3.0 Ansible剧本安装netaddr模块pip安装--no-cache-dir netaddr == 0.7.19 -i 执行安装ansible-playbook -i托管90-init-cluster.yml

    BlackBerry-PlayBook-Apps:[STABLE] 拼音、五笔输入法 for BlackBerry Playbook

    BlackBerry PlayBook是一款由加拿大公司RIM(Research In Motion)推出的平板电脑,它以其独特的操作系统BlackBerry Tablet OS吸引了一部分用户。本项目专注于为BlackBerry PlayBook提供稳定的拼音和五笔输入法解决...

    microsoft partner playbook 20190319

    《Microsoft Partner Playbook 20190319》是微软为合作伙伴提供的一份重要指南,旨在帮助他们更好地理解并利用微软的技术、资源和策略,以提升业务表现和客户满意度。这份Playbook包含了丰富的信息,包括最新的市场...

    playbook开发环境搭建

    本文档旨在指导Windows开发者如何使用BlackBerry Tablet OS SDK for Adobe AIR创建适用于BlackBerry PlayBook平板电脑的应用程序。此文档提供了从安装SDK、配置模拟器到创建并测试应用程序的全过程指南。 #### 应用...

    openssh升级ansible-playbook

    当我们谈论"openssh升级ansible-playbook"时,意味着我们需要使用Ansible的Playbook来自动化OpenSSH的更新过程。 首先,让我们详细了解一下Ansible Playbook。Playbook是Ansible的核心概念,它是以YAML格式编写的...

    playbook-v1.3

    playbook-v1.3镜像

    ofxQNX:用于 openFrameworks 的 BlackBerry PlayBook 和 BlackBerry 10 插件

    用于 openFrameworks 的 BlackBerry PlayBook 和 BlackBerry 10 插件 项目页面: : 存储库: : 版权所有 (C) 2012-2015 劳伦斯穆勒 接触 网站: : 执照 新 BSD 许可证(3 条款许可证) 见 要求 一个打过补丁的...

    Ansible之Playbook使用

    Ansible之Playbook使用 Ansible之Playbook使用是 Ansible 的一个核心组件,playbook 是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook 可以...

Global site tag (gtag.js) - Google Analytics