记得去年来网易面试的时候,跟 HR 聊,当时我说,我觉得从工作中最主要获得两种乐趣,一种是创造的乐趣,另一种是探索的乐趣。所谓创造的乐趣,是指将一件东西,从无到有的创造出来;而探索的乐趣,则是不断的获得新的知识和认识,不断地了解、知道曾经不了解不知道的东西,拓展自己认知的边界,甚至是拓展全人类,认知和认识的边界。
如果利用的好,同事大概可以像自己的手,像自己的脑,延伸了自己所能创造的东西的规模,拓展了自己的认识的边界。
记得去年来网易面试的时候,跟 HR 聊,当时我说,我觉得从工作中最主要获得两种乐趣,一种是创造的乐趣,另一种是探索的乐趣。所谓创造的乐趣,是指将一件东西,从无到有的创造出来;而探索的乐趣,则是不断的获得新的知识和认识,不断地了解、知道曾经不了解不知道的东西,拓展自己认知的边界,甚至是拓展全人类,认知和认识的边界。
如果利用的好,同事大概可以像自己的手,像自己的脑,延伸了自己所能创造的东西的规模,拓展了自己的认识的边界。
实现一个游戏的一种非常流行的方式看起来像这样:
|
|
SurfaceTexture 类是在 Android 3.0 中引入的。就像 SurfaceView 是 Surface 和 View 的结合一样,SurfaceTexture 是 Surface 和 GLES texture 的粗糙结合(有几个警告)。
当你创建了一个 SurfaceTexture,你就创建了你的应用作为消费者的 BufferQueue。当一个新的缓冲区由生产者入对时,你的应用将通过回调 (onFrameAvailable()
) 被通知。你的应用调用 updateTexImage()
,这将释放之前持有的缓冲区,并从队列中获取新的缓冲区,执行一些 EGL 调用以使缓冲区可作为一个外部 texture 由 GLES 使用。
Android 应用框架 UI 是基于一个从 View 开始的对象层次体系的。所有的 UI 元素经历一个复杂的测量和布局过程来将它们适配入一个矩形区域,所有可见的 View 对象被渲染进一个 SurfaceFlinger 创建的 Surface,而后者由 WindowManager 在应用程序回到前台时建立。应用程序的 UI 线程执行布局并渲染进一个单独的缓冲区(无论 Layouts 和 Views 的个数,也不管 View 是否是硬件加速的)。
Android 7.0 添加了对 Vulkan 的支持,一个高性能 3D 图形的低开销跨平台 API。像 OpenGL ES 一样,Vulkan 提供了在应用中创建高质量,实时图形的工具。Vulkan 的优势包括 CPU 开销降低及支持 SPIR-V Binary Intermediate 语言。
OpenGL ES 定义了一个渲染图形的 API。它没有定义窗口系统。为了使 GLES 可以工作于各种平台之上,它被设计为与知道如何通过操作系统创建和访问窗口的库相结合。Android 使用的库称为 EGL。如果你想绘制纹理多边形,你使用 GLES 调用;如果你想将渲染的东西放在屏幕上,则使用 EGL 调用。
拥有图形数据缓冲区是很精彩的,但是当你在你的设备屏幕上看到它们时生活甚至更美好。那就是 SurfaceFlinger 和 Hardware Composer HAL 做的事情。