2010-08-02 7 views
11

Ich spiele gerade mit 2D-Grafiken in Android und habe eine einfache alte SurfaceView verwendet, um Drawables und Bitmaps auf den Bildschirm zu zeichnen. Das hat gut funktioniert, aber es gibt ein kleines Stottern in der Sprite-Bewegung, und ich frage mich, ob es machbar ist, ein Echtzeit-Spiel (aber nicht schrecklich schnell) zu machen.Unterschiede und Vorteile von SurfaceView vs GLSurfaceView auf Android?

Ich weiß, GLSurfaceView existiert, die OpenGL verwendet, aber ich bin gespannt, in wie weit dies einen Unterschied macht. Ist eine einfache SurfaceView-Hardware beschleunigt oder muss ich OpenGL verwenden? Welche Art von Geschwindigkeitsunterschied könnte ich erwarten, wenn ich auf OpenGL umschalte und wie viel Code geändert werden müsste (die Spiellogik befindet sich allesamt in einem separaten Objekt, das dem SurfaceView ein geordnetes Array von Zeichnungselementen zur Verfügung stellt)?

Antwort

2

Soweit ich das sagen kann, müssen Sie OpenGL verwenden, um HW-Beschleunigung zu bekommen. Aber nehmen Sie nicht ist selbstverständlich und warten auf andere Antworten ^^

Wenn es wirklich der Fall ist, sollte die Beschleunigung recht wichtig sein. Jede 2D-Anwendung sollte mit mindestens 20 fps (in der Regel weniger Polygone als 3D-Anwendungen)

es würde eine erhebliche Menge an Code, aber 1) als ein erster Versuch, könnten Sie versuchen, mit nur einem Quadrat VBO und ändern die Matrix jedes Mal und 2) Ihr Rendering scheint bereits ziemlich gekapselt, so dass es die Dinge viel vereinfachen sollte.

+1

Ja. GLSurfaceView ist HW-beschleunigt, während SurfaceView nicht (wie Android 4.3) ist. – pierrotlefou

0

SurfaceView ist standardmäßig nicht hardwarebeschleunigt. Wenn Sie die HW-Beschleunigung erhalten möchten, verwenden Sie GLSurfaceView, die opengl verwenden und hardwarebeschleunigt sind.

-1

Hardwarebeschleunigung ist für ein reguläres SurfaceView seit 3.0 möglich.

http://developer.android.com/guide/topics/graphics/hardware-accel.html

+0

Das ist falsch. "Ab Android 3.0 (API-Stufe 11) unterstützt die 2D-Rendering-Pipeline von Android die Hardwarebeschleunigung. Das bedeutet, dass alle Zeichenoperationen, die auf einem Canvas von View ausgeführt werden, die GPU verwenden". Ja, aber NICHT für eine SurfaceView. –

+0

Außer API23 +, wo es diese neue Methode gibt: https://developer.android.com/reference/android/view/Surface.html#lockHardwareCanvas() –

Verwandte Themen