《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)。为了打开或关闭这些记录,我们所需要做的就是更新这个常量值并重新编译这个程序。

相关文章
|
Java Android开发
Android面试题经典之Glide取消加载以及线程池优化
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
461 2
|
移动开发 数据库 Android开发
构建高效Android应用:Kotlin协程的实践指南
【5月更文挑战第30天】 在移动开发领域,性能优化和流畅的用户体验是至关重要的因素。对于Android开发者来说,Kotlin协程作为一种异步编程解决方案,提供了强大且轻量级的机制来处理后台任务,而不会对主线程造成阻塞。本文将深入探讨Kotlin协程的概念、优势以及如何在Android应用中实现它们,从而改善应用响应性和用户满意度。通过实例代码和最佳实践的分享,我们将展示如何有效利用协程来处理网络请求、数据库操作和耗时计算,同时确保UI的流畅性。
|
移动开发 调度 Android开发
构建高效Android应用:Kotlin协程的实践指南
【5月更文挑战第30天】在移动开发领域,Android平台的流畅性与效率一直是开发者追求的核心。随着Kotlin语言的普及,其提供的协程特性为编写高效、轻量级的异步代码提供了强大工具。本文将深入探讨如何在Android项目中利用Kotlin协程来优化性能,提升用户体验。我们将从协程的基本概念出发,通过实例演示如何在实际开发中合理运用协程,并讨论协程对资源管理和错误处理的影响。
171 3
|
移动开发 API Android开发
构建高效Android应用:Kotlin协程的实践指南
【5月更文挑战第11天】 在移动开发领域,性能优化和资源管理是至关重要的。特别地,对于Android开发者来说,合理利用Kotlin协程可以极大地改善应用的响应性和稳定性。本文将深入探讨Kotlin协程在Android中的实际应用,包括它们如何简化异步编程模型、提高UI线程的响应性,以及减少内存消耗。我们将通过具体案例分析,了解如何在实际项目中有效地使用协程,从而帮助开发者构建更加高效的Android应用程序。
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
159 0
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
180 0
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
157 2
|
物联网 区块链 vr&ar
构建高效Android应用:Kotlin协程的实践指南未来交织:新兴技术趋势与跨领域应用探索
【5月更文挑战第28天】随着移动应用开发的不断进步,开发者寻求更高效、更简洁的方式来处理异步任务和提升用户体验。在Android平台上,Kotlin协程作为一种轻量级的线程管理方案,提供了强大的工具来简化并发和异步编程。本文将深入探讨Kotlin协程的核心概念,并通过实例演示如何在Android应用中利用协程优化性能和响应性。通过本文,你将学会如何运用协程来编写更加流畅和高效的代码,同时减少内存消耗和提高应用的稳定性。 【5月更文挑战第28天】 随着科技的迅猛发展,一系列创新技术如区块链、物联网(IoT)、虚拟现实(VR)等正在逐渐从概念验证走向实际应用。这些技术的融合与交叉不仅预示着信息时
|
移动开发 Android开发 开发者
构建高效安卓应用:Kotlin 协程的实践指南
【5月更文挑战第18天】 随着移动开发技术的不断进步,安卓平台亟需一种高效的异步编程解决方案来应对日益复杂的应用需求。Kotlin 协程作为一种新兴的轻量级线程管理机制,以其简洁的语法和强大的功能,成为解决这一问题的关键。本文将深入探讨Kotlin协程在安卓开发中的实际应用,从基本概念到高级技巧,为开发者提供一份全面的实践指南,旨在帮助读者构建更加高效、稳定的安卓应用。