2011-03-02 14 views
19

¿Existe alguna manera de decidir de antemano en función de la complejidad esperada de un juego/aplicación en la fase de planificación si usar un dibujo Canvas normal en un SurfaceView o ir con OpenGL?Android: Decidir entre SurfaceView y OpenGL (GLSurfaceView)

He estado jugando con un lienzo y solo necesito movimiento en 2D, y en un teléfono bastante nuevo estoy obteniendo un rendimiento bastante decente con un montón de objetos primitivos y algunos mapas de bits corriendo por la pantalla sobre un fondo sólido .

¿Es justo decir que si voy a dibujar imágenes de fondo y aumentar el número de objetos que se mueven y dibujan encima de ellos, debería ir directamente a OpenGL?

Respuesta

29

Todo lo que puedo decir es que depende de cuántos sprites vas a usar. Chris Pruett de Google también ha documentado esta parte muy bien.

Google I/O 2009 y Google I/O 2010.

A continuación se muestra una imagen de una de sus diapositivas que están relacionados con el tema: enter image description here

Con ese conocimiento, hay que ir con OpenGL usando la extensión draw_texture. Recuerde consultar la cadena y verificar si se admite draw_texture en el dispositivo real.

Para obtener más información relacionada con el desarrollo de juegos en general, consulte this.

+3

Pero esta imagen no muestra la carga en núcleo ARM vs GPU. Cuando renderiza con OpenGL, está moviendo la carga a la GPU mientras que el núcleo ARM está disponible para otras tareas informáticas. Creo que Canvas acaba llamando a Skia, que usa principalmente ciclos de ARM para renderizar. Según la versión de Android que está utilizando, algunas partes de Skia parecían aceleradas por hardware. – videoguy

10

SurfaceView

Un GLSurfaceView es una SurfaceView que se puede hacer en con OpenGL. Elegir entre ellos es simple:

Si está familiarizado con OpenGL y necesita lo que proporciona, use un GLSurfaceView. De lo contrario, use un SurfaceView. OpenGL es de bajo nivel. Si no está familiarizado con , es una tarea para aprender. Si solo necesita el dibujo 2D, SurfaceView utiliza el lienzo de alto rendimiento, razonablemente de alto rendimiento. Es muy fácil trabajar con.

A menos que tenga un buen motivo para usar un GLSurfaceView, debe usar un SurfaceView normal. Sugeriría que si aún no sabe que necesita GL, entonces probablemente no.

OpenGL

OpenGL sería capaz de manejar las rotaciones y escalar fácilmente.

Honestamente, es probable que tenga que aprender un montón de OpenGL para hacer esto, específicamente relacionados con los temas de:

Geometría de iluminación (o simplemente desactivarlo) Picking (seleccionando la geometría a dibujar en ella) Pixel Maps Texture Mapeo Mipmapping También, aprender OpenGL para esto podría ser exagerado, y usted tendría que ser muy bueno bueno para hacerlo eficiente.

En cambio, yo recomendaría el uso de los componentes gráficos de una biblioteca de juegos construido encima de OpenGL, tales como:

Cocos2d

libgdx

Any of the engines listed here

Fuente

Difference between SurfaceView and GLSurfaceView in Android

Android: Canvas vs OpenGL

Cuestiones relacionadas