Struktura vr_module
#include <
vr.h
>
Pola danych |
|
struct hw_module_t | wspólne |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | reserved [8-2] |
Szczegółowy opis
Zaimplementuj ten interfejs HAL, aby otrzymywać wywołania zwrotne podczas korzystania z aplikacji rzeczywistości wirtualnej (VR). Aplikacje VR mają zazwyczaj specjalne wymagania dotyczące wyświetlania i wydajności, w tym:
- Niski czas reakcji czujników – łączny czas reakcji od czujnika IMU, akcelerometru i żyroskopu do wywołania widocznego dla aplikacji musi być bardzo krótki (zwykle poniżej 5 ms). Jest to wymagane do obsługi czujnika HIFI.
- Niska latencja wyświetlania – łączna latencja od wywołania funkcji rysowania na procesorze graficznym do faktycznej aktualizacji wyświetlania musi być jak najniższa. Aby to osiągnąć, należy użyć SurfaceFlingera w trybie pojedynczego buforowania i zadbać o to, aby wywołania funkcji rysowania były prawidłowo zsynchronizowane z wyświetlaniem. To zachowanie jest udostępniane aplikacjom za pomocą rozszerzenia EGL. Poniżej znajdziesz potrzebne w tym celu rozszerzenia EGL.
- Wyświetlacz o niskiej perzystancji – ustawienia wyświetlacza o niskiej perzystancji muszą być ustawione tak nisko, jak to możliwe, przy zachowaniu rozsądnej jasności. W przypadku typowego wyświetlacza pracującego z częstotliwością 60 Hz piksele powinny być podświetlane przez czas nie dłuższy niż 3,5 ms, aby można je było uznać za oświetlenie o niskiej trwałości. Pozwala to uniknąć efektu ghostingu podczas poruszania się w ustawieniach VR. Należy włączyć tę opcję w lights.h HAL, gdy ustawiona jest opcja BRIGHTNESS_MODE_LOW_PERSISTENCE.
- Stałe osiąganie wydajności przez GPU i CPU – w przypadku aplikacji VR z mieszanym obciążeniem GPU/CPU, która wykonuje zadania w regularnych odstępach czasu (kilka razy na klatkę), harmonogram procesora powinien zapewnić, aby zadania wątku renderowania aplikacji były wykonywane w ciągu 1 ms od momentu zaplanowania i były ukończone przed końcem okna rysowania. W tym celu jedno jądro procesora musi być zarezerwowane tylko dla wątku renderowania aktualnie uruchomionej aplikacji VR w trybie VR i udostępnione w ramach zestawu procesora „aplikacja na wierzchu”. Należy też zachować odpowiednią częstotliwość zegara procesora, procesora graficznego i szyny, aby mieć pewność, że renderowanie zostanie ukończone w czasie przeznaczonym na renderowanie każdej klatki, gdy w pliku HAL power.h w trybie VR, gdy urządzenie nie jest ograniczane termicznie.
- Wymagane rozszerzenia EGL: wymagane są wszystkie ustawienia GPU umożliwiające korzystanie z wymienionych powyżej funkcji, w tym rozszerzenia EGL: EGL_ANDROID_create_native_client_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content, EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync i EGL_KHR_wait_sync.
- Dokładne raportowanie danych termicznych – dokładne temperatury i limity termiczne muszą być raportowane w pliku thermal.h HAL. W szczególności aktualna temperatura skóry musi być prawidłowo raportowana w przypadku DEVICE_TEMPERATURE_SKIN, a wartość vr_throttling_threshold zgłaszana przez to urządzenie musi prawidłowo raportować limit temperatury, powyżej którego regulator termiczny urządzenia ogranicza częstotliwość zegara procesora, GPU lub magistrali poniżej wartości minimalnej wymaganej do zapewnienia stabilnej wydajności (patrz poprzedni punkt).
Ogólnie rzecz biorąc, producenci wdrażający ten interfejs HAL powinni używać polecenia set_vr_mode jako wskazówki, aby włączyć optymalizację wydajności w trybie VR, która jest potrzebna do spełnienia któregokolwiek z wymienionych powyżej wymagań, oraz włączyć funkcje urządzenia, które są optymalne dla trybów wyświetlania VR. Jeśli nie ma żadnych optymalizacji lub nie są one potrzebne do spełnienia powyższych wymagań, wywołanie set_vr_mode może po prostu nic nie robić.
Żadna metoda w tym interfejsie HAL nie będzie wywoływana równolegle w ramach frameworka Androida.
Dokumentacja pola
struct hw_module_t common |
Typowe metody modułu. Ten element musi być pierwszym elementem vr_module , ponieważ użytkownicy tej struktury mogą przesyłać hw_module_t do vr_module wskaźnika w kontekstach, w których wiadomo, że hw_module_t odwołuje się do vr_module .
void(* init)(struct vr_module *module) |
Metoda ułatwiająca implementację HAL do konfigurowania stanu potrzebnego podczas uruchamiania w czasie wykonywania. Ta metoda jest wywoływana raz przez VrManagerService podczas fazy uruchamiania. Przed zainicjowaniem nie zostanie wywołana żadna metoda tego interfejsu HAL.
void(* set_vr_mode)(struct vr_module *module, bool enabled) |
Ustaw stan trybu VR. Możliwe stany parametru włączonego: false – tryb VR jest wyłączony, wyłącz wszystkie ustawienia dotyczące VR. true – tryb VR jest włączony, włącz wszystkie ustawienia dotyczące VR.
Jest on wywoływany za każdym razem, gdy system Android wchodzi w tryb VR lub z niego wychodzi. Zwykle dzieje się tak, gdy użytkownik przełącza się na aplikację VR, która wykonuje renderowanie stereoskopowe.
Dokumentacja tego typu danych została wygenerowana z tego pliku:
- hardware/libhardware/include/hardware/ vr.h