O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Implementando OpenGL ES e EGL

OpenGL é um cross-plataforma gráfica API que especifica uma interface de software padrão para gráficos 3D de processamento de hardware. OpenGL ES é um subconjunto da especificação OpenGL para dispositivos embarcados.

Para ser Android compatíveis , dispositivos precisam fornecer drivers para EGL, OpenGL ES 1.x, e OpenGL ES 2.0. O suporte para OpenGL ES 3.x é opcional. As principais considerações incluem:

  • Garantir que o driver GL seja robusto e esteja em conformidade com os padrões OpenGL ES.
  • Permitindo um número ilimitado de contextos GL. Como o Android permite aplicativos em segundo plano e tenta manter os contextos GL vivos, você não deve limitar o número de contextos em seu driver.
  • Estar atento à quantidade de memória alocada para cada contexto, porque é comum ter de 20 a 30 contextos GL ativos de uma vez.
  • Compatível com o formato de imagem YV12 e outros formatos de imagem YUV que vêm de outros componentes do sistema, como codecs de mídia ou a câmera.
  • Apoiar as extensões obrigatórias EGL_KHR_wait_sync , GL_OES_texture_external , EGL_ANDROID_image_native_buffer e EGL_ANDROID_recordable . Além disso, Hardware Composer v1.1 e superior exigem a EGL_ANDROID_framebuffer_target extensão.

É altamente recomendado para também apoiar EGL_ANDROID_blob_cache , EGL_KHR_fence_sync e EGL_ANDROID_native_fence_sync .

Android 10 implementa a interface de EGL 1.5 . Para obter informações sobre os novos recursos do EGL 1.5, consulte o Khronos libera 1.5 Especificação .

Carregando driver

O Android espera que as GPUs disponíveis para o sistema sejam conhecidas quando a imagem do sistema for construída. Os caminhos preferidos para os condutores de 32 bits e de 64 bits são OpenGL ES /vendor/lib/egl e /vendor/lib64/egl respectivamente. O carregador usa duas propriedades do sistema, ro.hardware.egl e ro.board.platform , ou o nome exato para descobrir e carregar os drivers do sistema. O driver OpenGL ES deve ser enviado em um binário ou dividido em três binários. Se o driver OpenGL ES for enviado em um binário, use um dos seguintes nomes:

libGLES_${ro.hardware.egl}.so
libGLES_${ro.board.platform}.so
libGLES.so

Se o driver OpenGL ES for enviado em três binários, use um dos seguintes conjuntos de nomes:

libEGL_${ro.hardware.egl}.so
libGLESv1_CM_${ro.hardware.egl}.so
libGLESv2_${ro.hardware.egl}.so

libEGL_${ro.board.platform}.so
libGLESv1_CM_${ro.board.platform}.so
libGLESv2_${ro.board.platform}.so

libEGL.so
libGLESv1_CM.so
libGLESv2.so

Camadas OpenGL ES

O Android 10 apresenta um sistema de camadas para GLES 2.0+. Camadas GLES são objetos compartilhados disponíveis em aplicativos ou fornecidos por ferramentas. Camadas GLES permitir que aplicativos debuggable para descobrir e camadas de carga, utilizando os mesmos mecanismos de configuração como Vulkan .

GLES LayerLoader, um componente dentro do carregador EGL, identifica camadas GLES. Para cada camada do GLES LayerLoader encontra, o GLES LayerLoader chama AndroidGLESLayer_Initialize , anda listas de funções do libEGL, e chama AndroidGLESLayer_GetProcAddress para todas as funções conhecidas. Se a camada interceptar uma função, ela rastreia o endereço da função. Se a camada não interceptar uma função, AndroidGLESLayer_GetProcAddress retorna o mesmo endereço de função que foi aprovada. O LayerLoader então atualiza a lista de ganchos de função para apontar para o ponto de entrada da camada.

Ativando camadas

Você pode habilitar camadas GLES por aplicativo ou globalmente. As configurações por aplicativo persistem nas reinicializações, enquanto as propriedades globais são apagadas na reinicialização.

Para ativar camadas por app:

# Enable layers
adb shell settings put global enable_gpu_debug_layers 1

# Specify target app
adb shell settings put global gpu_debug_app package_name

# Specify layer list (from top to bottom)
adb shell settings put global gpu_debug_layers_gles layer1:layer2:...:layerN

# Specify packages to search for layers
adb shell settings put global gpu_debug_layer_app package1:package2:...:packageN

Para camadas desativar por app:

adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layer_app

Para permitir globalmente camadas:

# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN

Camadas de teste

GLES camadas são apoiados por CTS Android e são obrigados a passar por testes CTS para dispositivos compatíveis . Para identificar se as camadas estão trabalhando em um dispositivo, execute $ atest CtsGpuToolsHostTestCases .