《OpenGL ES应用开发实践指南:Android卷》—— 3.1 加载着色器

本节书摘来自华章出版社《OpenGL ES应用开发实践指南:Android卷》一 书中的第3章,第3.1节,作者:(美)Kevin Brothaler ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1 加载着色器

我们既然已经为着色器写了代码,下一步就要把它们加载到内存中;为此,我们首先需要写一个可以从资源文件夹读取那些代码的方法。

3.1.1 从资源中加载文本

在项目中创建一个新的Java源代码包,命名为“com.airhockey.android.util”,在这个包中创建一个名为“TextResourceReader”的新类。在类中加入如下代码:
screenshot
screenshot

我们已经定义了一个方法从资源中读取文本,该方法就是readTextFileFromResource()。它的工作原理就是在程序代码中通过传递Android上下文(context)及资源标识符(resource ID)调用readTextFileFromResource()。为了存取资源标识符,Android上下文是必需的。例如,要读入片段着色器,我们需要用代码readTextFileFromSource(this.context, R.raw.simple_fragment_shader)使用这个方法。
我们也在代码中检测了两个可能遇到的一般情形:资源可能不存在,或者读取资源时发生错误。这些情况发生时,要捕捉错误并抛出封装好的异常(exception),这些异常对发生的错误进行了解释。如果代码失败并且抛出了一个异常,通过查看异常的消息和栈轨迹(stack trace),就能更好地知道发生了什么事情。
另外,别忘了按组合键“Ctrl+Shift+O”(在Mac上是“”)把代码中要用的导入(import)加进来。

3.1.2 读入着色器的代码

我们现在就要加入一些调用真正地读取着色器的代码。切换到AirHockeyRender.java文件,并在onSurfaceCreated()中的glClearColor()调用后面加入如下代码:
screenshot

别忘了加入TextResourceReader的导入。因为我们还没有一个Android上下文的引用,这段代码还无法编译。在类的顶部加入如下代码:
screenshot

像下面这样改变构造函数的起始行:
screenshot

我们也不得不改变AirHockeyActivity.java,把Android上下文的引用传递进去;打开AirHockeyActivity.java,按如下方式改变glSurfaceView.setRenderer()的调用:
screenshot

一个Activity组件就是Android的上下文,因此,把this的引用传递进去。

3.1.3 记录发生的一切

当我们开始撰写更复杂的代码时,万一在某处犯了错误,查看事情发生的轨迹会很有帮助。在Android里,我们可以使用Log类把所有的事情记录在系统日志(System log)中,这些记录可以在Eclipse的Logcat视图中看到。
我们并不总是想记录所有的事情,因此,我们在com.airhockey.android.util包中用如下代码添加了一个称为LoggerConfig的新类:
screenshot

我们无论何时想要记录一些事情时,就要检查这个常量是真值(true)还是假值(false)。为了打开或关闭这些记录,我们所需要做的就是更新这个常量值并重新编译这个程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值