Android Surfaceflinger和openGL ES

概述关于SurfaceFlinger,我有几个问题:1)我知道应用程序会写入Surface本身,然后将缓冲区移至SurfaceFlinger(假设我使用的是HardwareCanvas或EGL).缓冲区内有什么?原始像素?编译的openGL代码?缓冲区可以在一个事务中保存像素,而在另一事务中保存另一类型的数据吗?2)我读到SurfaceFlinger

关于SurfaceFlinger,我有几个问题:

1)我知道应用程序会写入Surface本身,然后将缓冲区移至SurfaceFlinger(假设我使用的是HarDWare Canvas或EGL).缓冲区内有什么?原始像素?编译的openGL代码?
缓冲区可以在一个事务中保存像素,而在另一事务中保存另一类型的数据吗?

2)我读到SurfaceFlinger使用OpenGL ES 1.0 API写入HWC / displayController命令的某处.真的吗?

如果是,那么3.0版命令如何转换为1.0版命令,在哪里?

谢谢

解决方法:

(1)假设您使用的是OpenGL ES,该应用程序会将命令排队到GL驱动程序,该驱动程序将输出呈现到缓冲区. Surface是生产者和使用者之间共享的缓冲池/缓冲区队列;在这种情况下,应用程序是生产者,而SurfaceFlinger是消费者.为了将GLES渲染到Surface,该池将具有两个或三个缓冲区(即双缓冲或三缓冲).缓冲区由gralloc分配,具有描述内容(宽度,高度,像素格式等)的头,并保存原始像素.

原始像素不是必须存在的,因为足够复杂的系统可以在需要时重播GLES命令,但实际上,实现是填充缓冲区并传递句柄.

由于gralloc标头指定了缓冲区属性,因此可以随时更改缓冲区大小和像素格式.系统的某些部分并不期望这样.例如,如果将RGB像素馈送到MediaCodec的“ Surface”输入,然后切换到YUV,则编解码器可能无法检测到更改. (这可以通过一些隐藏的选项来进行屏幕录制.)

(2)硬件编辑器的值为its own API.它与GLES无关.如果超出了重叠平面的数量,则可以使用GLES完成部分或全部合成,但这可以在SurfaceFlinger中处理.

更多详细信息,请参见graphics architecture doc.

总结

以上是内存溢出为你收集整理的Android Surfaceflinger和openGL ES全部内容,希望文章能够帮你解决Android Surfaceflinger和openGL ES所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1088951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存