【问题标题】:Difference between SurfaceView and GLSurfaceView in AndroidAndroid中SurfaceView和GLSurfaceView的区别
【发布时间】:2012-06-17 07:02:16
【问题描述】:

谁能告诉我 SurfaceView 和 GLSurfaceView 之间的基本区别是什么?什么时候应该使用 SurfaceView,什么时候应该使用 GLSurfaceView?

我在 Stack Overflow 上阅读了一些已经回答的问题,但它们不能满足我的查询。

任何帮助将不胜感激。

【问题讨论】:

标签: android opengl-es surfaceview


【解决方案1】:

GLSurfaceView 是一个 SurfaceView,您可以使用 OpenGL 进行渲染。在它们之间进行选择很简单:

  • 如果您熟悉 OpenGL 并需要它提供的功能,请使用GLSurfaceView
  • 否则,请使用SurfaceView

OpenGL 是低级的。如果您还不熟悉它,这是一项需要学习的任务。如果您只需要 2D 绘图,SurfaceView 使用高级、相当高性能的Canvas。使用起来非常简单。

除非您有充分的理由使用GLSurfaceView,否则您应该使用常规SurfaceView。我建议如果你还不知道你需要 GL,那么你可能不需要。

【讨论】:

  • 感谢您的回答。我有一个问题......对于相机,哪一个会更好?
  • @AndroDev 您将不得不更加具体。虽然你的意思是刺穿:如果你想显示来自相机的实时图像的预览,你只需要一个SurfaceViewdeveloper.android.com/guide/topics/media/…
  • 请注意,可以将 OpenGL 与 SurfaceView 一起使用。使用GLSurfaceView 来做这件事并不那么复杂。请参阅Graphics architecture document
  • 这是一个非常糟糕的答案。改为检查@pierrotlefou
【解决方案2】:

GLSurfaceView 是 3D 应用程序的主要构建块,因为 View 是 2D 应用程序。它不仅广泛用于 3D 游戏,还广泛用于相机等多媒体应用程序中,以创建特殊的预览效果。

GLSurfaceView 扩展了 SurfaceView 并且另外拥有一个渲染线程和一个由客户端设置的渲染对象。渲染线程持续运行或按需运行,并委托给渲染对象以使用 OpenGL API 绘制帧。对于 SurfaceView 和 GLSurfaceView,渲染是在主线程之外的单独线程中执行的。不同之处在于 SurfaceView 的渲染线程是由客户端创建的,而 GLSurfaceView 是由系统创建的。更重要的是,GLSurfaceView 会在内部处理主线程和渲染线程之间的同步。

更多信息,请查看thisthis

【讨论】:

    【解决方案3】:

    SurfaceView

    AFAIK Canvas 在 2D 绘图中实现简单且有效,但不支持 3D 绘图

    GLSurfaceView

    如果你想设计一些 3D 游戏,那么你应该使用 GLSurfaceView 和 OGLES

    我的经验是,如果您只想进行 2D 处理,请选择 Canvas,因为与 GLSurfaceView 相比,它更易于实现且更有效。

    【讨论】:

    • 在2D处理的情况下,为什么Canvas有效?
    • 请注意,可以将 OpenGL 与 SurfaceView 一起使用。使用GLSurfaceView 来做这件事并不那么复杂。请参阅Graphics architecture document
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多