【问题标题】:Android: Deciding between SurfaceView and OpenGL (GLSurfaceView)Android:在 SurfaceView 和 OpenGL 之间做出选择(GLSurfaceView)
【发布时间】:2011-03-02 15:01:21
【问题描述】:

有没有办法在规划阶段根据游戏/应用程序的预期复杂性预先决定是在 SurfaceView 中使用常规 Canvas 绘图还是使用 OpenGL?

我一直在玩画布,只需要 2D 运动,在一部相当新的手机上,我获得了相当不错的性能,一堆原始对象和一些位图在纯色背景上围绕屏幕运行。

公平地说,如果我要绘制背景图像并增加在它们之上移动和绘制的对象的数量,我应该直接使用 OpenGL 吗?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    我只能说这取决于你要使用多少精灵。来自 Google 的 Chris Pruett 也很好地记录了这一部分。

    Google I/O 2009Google I/O 2010

    下面是他的一张幻灯片中与您的主题相关的图片:

    有了这些知识,您应该使用 draw_texture 扩展名来使用 OpenGL。记得查询出字符串并检查draw_texture在实际设备上是否支持。

    有关一般游戏开发的更多信息,请参阅this

    【讨论】:

    • 但是这张图片没有显示 ARM 内核与 GPU 的负载。当您使用 OpenGL 进行渲染时,您将负载转移到 GPU,而 ARM 内核可用于其他计算任务。我相信 Canvas 最终会调用 Skia,它主要使用 ARM 周期进行渲染。根据您使用的 Android 版本,Skia 的某些部分似乎是硬件加速的。
    【解决方案2】:

    SurfaceView

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

    如果您熟悉 OpenGL 并需要它提供的功能,请使用 GLSurfaceView。否则,请使用 SurfaceView。 OpenGL是低级的。如果 你还不熟悉它,这是一项需要学习的任务。如果 只需要2D绘图,SurfaceView使用高级,合理 高性能帆布。使用起来非常简单。

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

    OpenGL

    OpenGL 将能够轻松处理旋转和缩放。

    老实说,您可能需要学习很多 OpenGL 才能做到这一点, 特别与以下主题相关:

    几何照明(或只是禁用它)拾取(选择几何 绘制它)像素映射纹理映射Mipmapping另外,学习 OpenGL 可能是矫枉过正,你必须漂亮 擅长让它变得高效。

    相反,我建议使用游戏的图形组件 建立在openGL之上的库,例如:

    Cocos2d

    libgdx

    Any of the engines listed here

    来源

    Difference between SurfaceView and GLSurfaceView in Android

    Android: Canvas vs OpenGL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多