Android SurfaceView是否使用通常的openGL es Calls?

时间:2015-07-05 12:50:33

标签: android opengl-es android-canvas surfaceview glsurfaceview

目前我从使用glSurfaceView切换到我的应用程序的SurfaceView 然而,如果SurfaceView的内部过程只使用了,我就会徘徊 在glSurfaceView

中使用的opengl es调用

例如,在glSurfaceView中,您必须为uv Coords提供介于(0.0`1.0)之间的浮点值范围

但是在“曲面视图”中,您可以使用带有int值的Rects,这些值直接指向位图图像的像素坐标。它似乎更有效,但是如果坐标必须转换为浮点数以适应opengl es函数,那么处理是否浪费?

我;我只是想知道这些内部如何工作。

2 个答案:

答案 0 :(得分:2)

如果您使用相同的OpenGL ES调用,它将使用相同的OpenGL ES调用。 GLSurfaceView只是一个包装SurfaceView的类库,可以为您处理EGL设置和线程管理。您可以自己将GLES与SurfaceView一起使用(有关示例,请参阅Grafika。)

如果您使用Canvas在SurfaceView的Surface上绘图,那么您将使用Skia库在软件中进行渲染,并且根本不涉及OpenGL ES。

如果您正在使用Canvas绘制自定义视图,则可能涉及硬件加速,并且您的Canvas绘制调用由GLES执行。转换数字格式之间的坐标是操作中较便宜的部分之一。

要了解内部如何运作,请参阅graphics architecture doc

答案 1 :(得分:0)

Android内部可能会或可能不会使用OpenGL调用表面视图。当app中显式关闭硬件加速时,有一个名为SKIA的软件渲染器可用于渲染目的,或者由于视图尺寸/格式等原因无法使用硬件加速。