众所周知,在程序中,它会调用opengl es库中的函数(当然还有libegl)。我想更详细地了解这一点。也就是说,什么样的库调用另一个库,因此调用GPU。 surfaceflinger,garrots如何与所有这些相互作用。 我知道有很多图片描绘了近似的方案。但是没有明确的呼叫树。我很乐意回答任何问题。也许有一些我找不到的有用资源。
答案 0 :(得分:2)
你的问题过于宽泛。我仍然会尝试做一些明确的事情。
应用程序将在Canvas或其基于OpenGL ES的应用程序上绘制。基于Canvas的应用程序可能使用也可能不使用硬件渲染。在硬件渲染和OpenGL应用程序的情况下,使用GPU将最终图像写入称为“Surface”的缓冲区。在Canvas和Software Rendering的情况下,使用CPU写入相同的缓冲区。
可以有多个这样的缓冲区。哪些被发送到Surface Flinger进行合成。再次表面弗林格;可能会也可能不会使用OpenGL(或GPU)进行合成。 SurfaceFlinger还可以根据不同的条件将此合成任务卸载到HardwareComposer。
GrAlloc用于为图形目的分配连续的内存块。
因此,最终合成缓冲区将被发送到LCD显示器进行最终显示。
修改强> OpenGL如何工作?
所以Open GL只是一种化身。 GPU venodors在GPU驱动程序中提供该规范的实现。 LibGLES将拥有所有函数声明及其图形驱动程序作业,以将libgl调用转换为GPU指令。
如果您想深入了解Surface Flinger和硬件编写器,请阅读android源代码网站上的Android Graphics Architecture。