2010-08-02 13 views
11

Obecnie gram z grafiką 2D w Androidzie i używam zwykłego starego SurfaceView do rysowania rysunków i bitmap na ekranie. To działa dobrze, ale w ruchu sprite'a jest trochę jąkania i zastanawiam się, czy można to zrobić w czasie rzeczywistym (ale nie strasznym szybko).Różnice i zalety SurfaceView vs GLSurfaceView na Androida?

Wiem, że istnieje GLSurfaceView, który wykorzystuje OpenGL, ale jestem ciekawy, w jakim stopniu to robi różnicę. Czy akceleracja zwykłego sprzętu SurfaceView, czy też muszę korzystać z OpenGL? Jakiego rodzaju różnicy prędkości można się spodziewać po przełączeniu na OpenGL i ile zmiany kodu wymagałoby przełączenia (logika gry znajduje się w oddzielnym obiekcie, który dostarcza uporządkowaną tablicę rysunków do SurfaceView)?

Odpowiedz

2

O ile mogę powiedzieć, musisz użyć OpenGL, aby uzyskać przyspieszenie HW. Ale nie przyjmuj jest oczywiste i czekać na inne odpowiedzi ^^

Jeśli tak jest rzeczywiście, przyspieszenie powinno być dość ważne. Każda aplikacja 2D powinna działać z prędkością co najmniej 20 klatek na sekundę (generalnie mniej wielokątów niż aplikacje 3D).

wymaga to dużej ilości kodu, ale 1) jako pierwszej próby, możesz wypróbować tylko 1 kwadratowy VBO i zmienić macierz za każdym razem i 2) twoje renderowanie wydaje się już dość hermetyzowane, więc powinno znacznie uprościć rzeczy.

+1

Tak. GLSurfaceView jest przyspieszany w HW, a SurfaceView nie (jako Android 4.3). – pierrotlefou

0

SurfaceView nie jest domyślnie przyspieszany sprzętowo. jeśli chcesz uzyskać przyspieszenie HW użyj GLSurfaceView, który używa OpenGL i jest przyspieszany sprzętowo.

-1

Przyspieszanie sprzętowe jest możliwe dla zwykłego SurfaceView od wersji 3.0.

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

+0

To jest złe. "Począwszy od wersji Android 3.0 (poziom API 11), potok renderowania 2D dla systemu Android obsługuje akcelerację sprzętową, co oznacza, że ​​wszystkie operacje wykonywane na płótnie programu View korzystają z GPU". Tak, ale NIE dla SurfaceView. –

+0

Z wyjątkiem API23 + tam, gdzie jest ta nowa metoda: https://developer.android.com/reference/android/view/Surface.html#lockHardwareCanvas() –

Powiązane problemy