Anuncios de baja de (P)NaCl
Dado el impulso de la compatibilidad con WebAssembly en varios navegadores, planeamos enfocar nuestros esfuerzos de código nativo en WebAssembly en el futuro y quitar la compatibilidad con PNaCl en el cuarto trimestre de 2019 (excepto para las apps de Chrome). Creemos que el ecosistema dinámico que rodea a WebAssembly lo hace más adecuado para las apps web nuevas y existentes de alto rendimiento, y que el uso de PNaCl es lo suficientemente bajo como para garantizar la baja.
A partir de Chrome 76, PNaCl en la Web abierta se trasladó a una prueba de origen, que es un mecanismo para que los desarrolladores web se registren y obtengan acceso a una función que no está activada de forma predeterminada.
Por lo general, se trata de una función nueva propuesta, pero en este caso es una función que dejará de estar disponible.
Un desarrollador puede registrarse en la consola de prueba de origen
y reciben un token, que puede incorporarse en una página y habilitar la función sin que el usuario tenga que usar una marca.
(para obtener más detalles, consulta la guía vinculada). La prueba está programada para durar hasta Chrome 78, aproximadamente hasta diciembre de 2019.
Este cambio no afecta a NaCl o PNaCl en extensiones o Apps de Chrome, y al parámetro "enable-nacl"
La función experimental de chrome://flags también se puede usar para habilitar PNaCl localmente para realizar pruebas
(esta marca también conserva su función actual de habilitar NaCl “nativo” que no es de PNaCl en cualquier página).
Recientemente, también anunciamos que, en el 1ᵉʳ trimestre de 2018, se darán de baja las Apps de Chrome fuera de ChromeOS.
Para la mayoría de los casos de uso de (P)NaCl, recomendamos la transición
del SDK de NaCl a Emscripten.
Es probable que la migración sea bastante sencilla si tu aplicación es portátil a Linux, usa SDL o APIs de POSIX.
Si bien la asistencia directa para las APIs de NaCl / Pepper no está disponible,
intentamos enumerar los equivalentes de la API web.
Para casos de portabilidad más complejos, comunícate con
native-client-discuss@googlegroups.com
Migración de API
Aquí describimos el estado de los sustitutos de las plataformas web para cada uno de ellos
de las APIs expuestas a (P)NaCl.
Además, la tabla enumera la biblioteca o la opción en Emscripten que ofrece el sustituto más cercano.
Esperamos agregar compatibilidad con subprocesos de memoria compartida a WebAssembly en 2017.
ya que los subprocesos son cruciales para hacer coincidir el uso más interesante de (P)NaCl
diferentes. Los elementos de migración que suponen que los subprocesos futuros son compatibles se marcan a continuación. Si el control de flujo de tu aplicación depende en gran medida de las APIs de bloqueo, es posible que también debas admitir subprocesos para realizar una portabilidad conveniente.
Si bien tratamos de ser precisos en esta tabla,
no hay dudas de que hay omisiones o errores.
Si encuentras uno, comunícate con nosotros en
native-client-discuss@googlegroups.com
PPAPI
PPB_Audio
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
x |
SDL (parcial) |
GAP (parcial): AudioWorkletNode es APROXIMADAMENTE equivalente |
AudioWorkletSpec está listo, pero AudioDeviceClient puede ser una mejor opción para esta API. La comunidad aún está especificando AudioDeviceClient. Es posible que la worklet no sea el equivalente aproximado de esta API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera la configuración pasada) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parámetro) |
Se pasan en cada ocasión en lugar de adjuntarse al búfer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parámetro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio solo usa números de punto flotante de 32 bits, mientras que PPAPI usa números enteros de 16 bits. |
En teoría, la PPAPI admite varios tamaños de muestreo. En la práctica, solo admite muestras de 16 bits. Lamentablemente, los desarrolladores solicitaron tamaños de muestra de 16 bits para ahorrar en el uso de memoria. La próxima versión de la especificación de Web Audio implementará la compatibilidad con muestras de 16 bits. Se podría implementar una optimización para AudioBuffer similar a la de Firefox usando un búfer de 16 bits para el audio que proviene de decodeAudioData. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
CreateStereo16Bit |
|
GAP |
GAP: solo se admiten muestras de número de punto flotante de 32 bits |
La próxima versión de la especificación de Web Audio implementará la compatibilidad con muestras de 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (de la construcción predeterminada) |
De forma predeterminada, un AudioContext tendrá la tasa de muestreo preferida que coincida con la tasa de muestreo real del dispositivo de audio de hardware. |
RecommendSampleFrameCount |
|
GAP |
GAP: Se controlaría con el AudioDeviceClient planificado. |
Hay un problema abierto para permitir un tamaño especificado por el usuario, pero aún se está definiendo. Lo más probable es que esto se maneje mejor con AudioDeviceClient, que puede indicarte cuál sería el tamaño adecuado para el hardware determinado. |
PPB_Console
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Registro |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Se considera que la API de Console es un reemplazo lo suficientemente completo, a menos que se presenten casos de uso específicos de los desarrolladores para la funcionalidad que proporciona LogWithSource. Los mapas de origen de Herramientas para desarrolladores se pueden usar para depurar JavaScript transpilado en su idioma fuente original. |
PPB_Core
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
getTime |
|
utime |
Fecha().getTime() nueva |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== no definido |
|
CallOnMainThread |
|
GAP |
Worker.postMessage y Atomics.wait |
Se puede crear una sincronización equivalente. |
PPB_FileIO
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
window.chooseFileSystemEntries() |
Crear y abrir se usan de manera diferente, pero las piezas tienen el mismo poder. |
Abrir |
|
FS (parcial) |
window.chooseFileSystemEntries() |
|
Consulta |
|
FS (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial): Blob.type también se puede usar para verificar el tipo de MIME. No se pueden determinar el tipo de sistema de archivos, la hora de creación y la hora del último acceso con la API de Native File System. |
Pantalla táctil |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Leer |
|
FS (parcial) |
Blob.slice().arrayBuffer() |
|
Escribir |
|
FS (parcial) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parcial) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (parcial) |
GAP (parcial): Los archivos se borran cuando se llama a FileSystemWrite.close(). |
El diseño está pensado, ya que los archivos de la API de Native File System están expuestos al SO. Por lo tanto, se debe realizar una verificación de la Navegación segura antes de que se muestren los datos al SO. |
Cerrar |
|
FS (parcial) |
FileSystemWriter.close() |
No cancela las operaciones pendientes, pero borra los datos escritos hasta el momento en el disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() o Blob.arrayBuffer() |
Permite varias lecturas de subrangos en paralelo. |
PPB_FileRef
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parcial) |
FileSystem.type |
|
GetName |
|
FS (parcial) |
File.name |
|
GetPath |
|
FS (parcial) |
GAP (parcial): Con la API de Native File System, la ruta de acceso relativa de un archivo se puede determinar a partir de la referencia a un directorio que contiene el archivo con FileSystemHandle.resolve(FileSystemHandle). |
No se puede determinar la ruta de acceso absoluta de un archivo, y el usuario debe otorgar permiso para acceder al directorio que contiene el archivo. |
GetParent |
|
FS (parcial) |
GAP (parcial): con la API de Native File System, se puede determinar la ruta de acceso relativa de un archivo a partir de la referencia a un directorio que contenga el archivo mediante FileSystemHandle.resolve(FileSystemHandle) |
El usuario debe otorgar permiso para acceder al directorio que contiene el archivo. |
MakeDirectory |
|
FS (parcial) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Pantalla táctil |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Se puede modificar el tiempo de modificación mediante la escritura. |
Borrar |
|
FS (parcial) |
FileSystemDirectoryHandle.removeEntry() |
A diferencia de la PPAPI, los directorios no tienen que estar vacíos. |
Cambiar nombre |
|
FS (parcial) |
GAP (parcial): con la API de Native File System, el archivo se puede escribir con el nuevo nombre utilizando una combinación de FileSystemFileHandle.getFile() para el nombre nuevo y FileSystemFileHandle.createWriter().write() con el contenido del archivo anterior. Luego, usa FileSystemDirectoryHandle.removeEntry() para borrar el archivo anterior. |
No existe una API directa que haga esto en un solo paso en la API de Native File System. |
Consulta |
|
GAP (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial): Blob.type también se puede usar para verificar el tipo de MIME. No se pueden determinar el tipo de sistema de archivos, la hora de creación y la hora del último acceso con la API de Native File System. |
ReadDirectoryEntries |
|
FS (parcial) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
window.requestFileSystem |
La API de JS hace ambas cosas en un solo paso |
Abrir |
|
GAP |
window.requestFileSystem |
La API de JS hace ambas acciones en un solo paso. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Muestra |
|
SDL |
Gamepad.* |
El objeto Gamepad expone una marca de tiempo relativa a navigationStart. Se actualiza cuando se reciben datos del hardware: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
Canvas.getContext('2d') |
|
Describe |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Desplazamiento |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parcial): Se puede implementar dibujando el lienzo sobre sí mismo, con un desplazamiento, usandodrawImage y, luego, rellenando el resto. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Sin equivalente directo |
GAP (parcial) -
Siempre hay una limpieza implícita al final del código de dibujo. esto es poco probable
cambiar. Sin embargo, la combinación de OffscreenCanvas y ImageBitmapRenderingContext proporciona una funcionalidad similar. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parcial): la exposición de OpenGL ES 3.0 de WebGL 2.0 y Emscripten admite búferes de fotogramas multimuestras definidos por el usuario, en los que se pueden establecer todos los parámetros configurables a través de PPAPI. |
Crear |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Sin equivalente directo |
GAP (parcial): Siempre hay una limpieza implícita al final del código de dibujo, y es poco probable que cambie. Sin embargo, la combinación de OffscreenCanvas y ImageBitmapRenderingContext proporciona una funcionalidad similar. |
PPB_ImageData
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetNativeImageDataFormat |
|
SDL |
ImageData exige el orden RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData impone el orden RGBA |
|
Crear |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Describir |
|
SDL |
ImageData nunca tiene un stride. |
|
Mapa |
|
SDL |
ImageData.data |
|
Dejar de asignar |
|
SDL |
ImageData.data |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
RequestInputEvents |
|
SDL |
Sin equivalente directo |
La falta de esta función probablemente sea menos relevante, ya que JS/Wasm se ejecuta en el subproceso principal y puede filtrar eventos de forma más económica sin incurrir en un recorrido de ida y vuelta entre procesos. |
RequestFilteringInputEvents |
|
SDL |
mouse* tecla* rueda* toque* composición* eventos |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendientes de la clase de evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
"dblclick" frente a "mousedown" Eventos |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP: deltaMode contiene esta información, pero de forma incompleta. |
Hay un debate sobre la implementación de una API de WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
GetScrollByPage |
|
GAP |
GAP: deltaMode contiene esta información, pero de forma incompleta. |
Hay un debate sobre la implementación de una API de WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (para averiguarlo por tu cuenta) |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP: Sin equivalente directo |
Estos datos se pueden recuperar desde CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP: Sin equivalente directo |
|
GetTargetSegment |
|
GAP |
GAP: Sin equivalente directo |
|
GetSelection |
|
GAP |
GAP: Sin equivalente directo |
|
PPB_Instance
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
BindGraphics |
|
SDL |
Canvas.getContext (no sucede ya que la vinculación es automática). |
|
IsFullFrame |
|
GAP |
GAP: No hay equivalentes a los controladores de tipos MIME. |
Las aplicaciones de NaCl se pueden registrar para manejar un tipo de MIME concreto y poseer todo el documento. |
DidCreate |
|
N/A |
<Element>[key] |
El acceso general al DOM te permite extraer atributos de etiqueta. |
DidDestroy |
|
N/A |
N/A |
No activado para NaCl |
DidChangeView |
|
N/A |
"Cambio de tamaño" del elemento Evento |
|
DidChangeFocus |
|
N/A |
Eventos "focus", "focusin" y "focusout" del elemento |
|
HandleDocumentLoad |
|
N/A |
GAP: No hay forma de registrarse como controlador de tipo MIME. |
Los módulos de NaCl a través de apps y una entrada de manifiesto se pueden configurar para controlar tipos mime específicos. |
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Configurar |
|
GAP |
getUserMedia() |
Las restricciones de getUserMedia() pueden proporcionar los valores de configuración que se usarán en MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: Sin equivalente |
|
RecycleBuffer |
|
GAP |
GAP: Sin equivalente |
|
Cerrar |
|
GAP |
MediaStreamTrack.stop() |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
Captura de lienzo |
Canvas Capture permite introducir fotogramas de video de forma programática. |
Configurar |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parcial): El alcance de las configuraciones disponibles en la API web puede diferir de la PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP: no equivale a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream no se puede precargar, por lo que nunca se almacenará en búfer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: no equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: Sin equivalente |
|
RecycleFrame |
|
GAP |
GAP: Sin equivalente |
|
Cerrar |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP: Sin equivalente |
|
PutFrame |
|
GAP |
GAP: Sin equivalente |
|
PPB_MessageLoop
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
N/A |
En su mayoría, los trabajadores obtienen un bucle de eventos implícito. |
|
GetForMainThread |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
GetCurrent |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
AttachToCurrentThread |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
Ejecutar |
|
N/A |
La mayoría es discutible, los trabajadores obtienen un bucle de eventos implícitos. |
|
PostWork |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
PostQuit |
|
N/A |
En su mayoría, los trabajadores obtienen un bucle de eventos implícito. |
|
PPB_Messaging
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
SetCursor |
|
SDL |
Element.style.cursor |
Se admite el mismo conjunto de cursores de archivo.
Puedes usar cursores personalizados con url(..).
Los cursores personalizados dinámicos se pueden hacer con URI de datos.
CSS3 admite la especificación del hotspot. |
PPB_MouseLock
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Varios métodos |
|
OpenGLES |
Cerca de WebGL 1.0 en funcionalidad. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
SetTextInputType |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
A algunos desarrolladores les gustaría poder dar pistas de esta manera o, preferentemente, la capacidad de interceptar y mostrar eventos o resultados de IME intercalados dentro de un lienzo. |
UpdateCaretPosition |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
new XMLHttpRequest(); |
|
Abrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: Sin equivalente XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
XMLHttpRequest "progreso" Evento |
|
|
|
GAP |
FetchObserver |
Aún no se especifica ni se implementa; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest "progreso" Evento |
|
|
|
GAP |
FetchObserver |
Aún no se especifica ni se implementa; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Recuperar respuesta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Cuerpo.* (La respuesta es un cuerpo) |
|
FinishStreamingToFile |
|
embind |
GAP: Sin equivalente directo |
XMLHttpRequest y Fetch suponen la transmisión a la memoria, en lugar de directamente a un almacenamiento. |
Cerrar |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API de Fetch: AbortSignal y AbortController |
|
PPB_URLRequestInfo
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Solicitud de recuperación |
|
SetProperty |
|
GAP |
GAP: No hay un equivalente directo para XMLHttpRequest. |
XMLHttpRequest no proporciona formas directas de limitar por solicitud los siguientes redireccionamientos, transmitir a un archivo, establecer URL de referencia o políticas de credenciales. |
|
|
embind |
Solicitud.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: Ambas deben tener el cuerpo completo, en lugar de un fragmento. |
|
|
embind |
recuperar(.., opciones:cuerpo) |
|
AppendFileToBody |
|
GAP |
transmisión de carga de fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
También puedes leer con FileReader y subir, pero eso es más como AppendDataToBody. |
PPB_URLResponseInfo
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + otros |
|
|
|
embind |
Recuperar respuesta.* |
|
GetBodyAsFileRef |
|
embind |
Recuperar respuesta (cuerpo) .blob() |
Supone que la capa de almacenamiento optimiza la transferencia. |
PPB_Var
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Obtener |
|
embind |
Arreglo[i] |
|
Establecer |
|
embind |
Arreglo[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Longitud de la matriz = n |
|
PPB_VarArrayBuffer
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
nuevo ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP: Sin equivalente directo |
Los módulos Asm.js / Wasm no pueden asignar regiones de un ArrayBuffer que no sean su montón de memoria lineal único.
Es posible que, en el futuro, varios recuerdos o la asignación de memoria mejoren esta situación. |
Dejar de asignar |
|
GAP |
GAP: Sin equivalente directo |
|
PPB_VarDictionary
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
{} |
|
Obtener |
|
embind |
<Object>[i] |
|
Establecer |
|
embind |
<Object>[i] = x |
|
Borrar |
|
embind |
borrar <Object>[i] |
|
HasKey |
|
embind |
x en <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
No tiene un equivalente literal, pero se puede compilar. |
PPB_VideoDecoder
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante el uso de VideoDecoder(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inicialización |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta mediante los parámetros de inicialización de VideoDecoder() (VideoDecoderInitParameters). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante ReadableStream.pipeThrough(VideoDecoder). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. El diseño actual reciclará automáticamente las imágenes y mantendrá el proceso de decodificación en curso. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. Se llamará a la API Flush(), sin embargo, aún se está analizando cómo se secuenciará en relación con las llamadas de decodificación. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Restablecer |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs destruyendo la instancia de VideoDecoder y creando una nueva. Esto no será tan eficiente como un método de restablecimiento dedicado, pero todavía se está analizando la semántica de una API de Reset(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta a través de VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (parcial): navigator.mediaCapabilities.encodingInfo() |
Los perfiles compatibles se deben verificar uno por uno. |
Inicialización |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs usando los parámetros de inicialización de VideoEncoder(). |
|
GetFramesRequired |
|
GAP |
GAP: Sin equivalente |
Es poco probable que se exponga el grupo de marcos que usa internamente la API de Web Codecs. |
GetFrameCodedSize |
|
GAP |
GAP: Sin equivalente |
Es poco probable que se exponga el grupo de fotogramas que usa internamente la API de Web Codecs. |
GetVideoFrame |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs mediante ReadableStream.pipeThrough(VideoEncoder). Esto codificaría directamente los datos en la transmisión Readable, en lugar de tomar un solo fotograma para completarlos con datos antes de la codificación. |
|
Codifica |
|
GAP |
GAP: se controlaría con la API propuesta de WebCodecs mediante ReadableStream.pipeThrough(VideoEncoder). |
|
GetBitstreamBuffer |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. El diseño actual pasará automáticamente por el búfer de flujo de bits codificado que se canaliza. |
Actualmente, la API de WebCodecs supone que el búfer de flujo de bits se puede copiar en lugar de agruparse, por lo que no será necesario reciclarlo. |
RecycleBitstreamBuffer |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. El diseño actual reciclará automáticamente el búfer para mantener activo el proceso de codificación. |
Es poco probable que esto cambie en el futuro, ya que las implicaciones de rendimiento son menores. |
RequestEncodingParametersChange |
|
GAP |
GAP: se administraría mediante la API de Web Codecs propuesta. Algunos parámetros se podrán cambiar sobre la marcha, mientras que otros requerirán que se elimine el codificador. |
|
Cerrar |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante el uso de VideoEncoder.Close(). |
|
PPB_VideoFrame
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetTimestamp |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. |
|
SetTimestamp |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. |
|
GetFormat |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetSize |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetDataBuffer |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetDataBufferSize |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
PPB_View
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Se refiere al documento en lugar de a un solo elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
WebSocket.WebSocket |
|
Conectar |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" de WebSocket |
|
Cerrar |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Evento "message" de WebSocket
Evento "error" de WebSocket
Evento "close" de WebSocket |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Gráficos3DContexto perdido |
|
SDL |
Evento "webglcontextlost" del lienzo |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
DidCreate |
|
N/A |
<Element>[key] |
El acceso general al DOM te permite extraer atributos de etiqueta. |
DidDestroy |
|
N/A |
N/A |
No activado para NaCl |
DidChangeView |
|
N/A |
"Cambio de tamaño" del elemento Evento |
|
DidChangeFocus |
|
N/A |
Eventos "focus", "focusin" y "focusout" del elemento |
|
HandleDocumentLoad |
|
N/A |
GAP: No hay forma de registrarse como controlador de tipo MIME. |
Módulos de NaCl a través de aplicaciones + una entrada de manifiesto pueden configurarse para manejar determinados tipos de MIME. |
PPP_MessageHandler
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleMessage |
|
embind |
Evento "message" de MessagePort
Evento "message" de Window |
|
HandleBlockingMessage |
|
N/A |
GAP: Sin equivalente directo |
Se puede realizar una sincronización similar fuera del subproceso principal con Atomics.wait. Esto se agregó para admitir la emulación de APIs de complementos síncronas. |
PPP_Messaging
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleMessage |
|
embind |
Evento "message" de MessagePort
Evento "message" de Window |
|
PPP_MouseLock
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
MouseLockLost |
|
SDL |
Eventos "pointerlockchange" y "pointerlockerror" del elemento |
|
IRT
PPB_Audio
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
x |
SDL (parcial) |
GAP (parcial): AudioWorkletNode es APROXIMADAMENTE equivalente |
AudioWorkletSpec está listo, pero AudioDeviceClient puede ser una mejor opción para esta API. La comunidad aún está especificando AudioDeviceClient. Es posible que la worklet no sea el equivalente aproximado de esta API. |
GetCurrentConfig |
|
SDL |
AudioContext.* (recupera la configuración pasada) |
|
StartPlayback |
|
SDL |
AudioBufferSourceNode.start |
|
StopPlayback |
|
SDL |
AudioBufferSourceNode.stop |
|
PPB_AudioBuffer
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parámetro) |
Se pasan en cada ocasión en lugar de adjuntarse al búfer. |
SetTimestamp |
|
SDL |
AudioBufferSourceNode.start (parámetro) |
|
GetSampleRate |
|
SDL |
AudioBuffer.sampleRate |
|
GetSampleSize |
|
GAP |
GAP: WebAudio solo usa números de punto flotante de 32 bits, mientras que PPAPI usa números enteros de 16 bits. |
En teoría, la PPAPI admite varios tamaños de muestreo. En la práctica, solo admite muestras de 16 bits. Lamentablemente, los desarrolladores solicitaron tamaños de muestra de 16 bits para ahorrar en el uso de memoria. La próxima versión de la especificación de Web Audio implementará la compatibilidad con muestras de 16 bits. Se podría implementar una optimización para AudioBuffer similar a la de Firefox usando un búfer de 16 bits para el audio que proviene de decodeAudioData. |
GetNumberOfChannels |
|
SDL |
AudioBuffer.numberOfChannels |
|
GetDataBuffer |
|
SDL |
AudioBuffer.getChannelData |
|
GetBufferSize |
|
SDL |
AudioBuffer.length |
|
PPB_AudioConfig
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
CreateStereo16Bit |
|
GAP |
GAP: solo se admiten muestras de número de punto flotante de 32 bits |
La próxima versión de la especificación de Web Audio implementará la compatibilidad con muestras de 16 bits. |
GetSampleRate |
|
SDL |
AudioContext.sampleRate |
|
GetSampleFrameCount |
|
SDL |
AudioBuffer.length |
|
RecommendSampleRate |
|
SDL |
AudioContext.sampleRate (de la construcción predeterminada) |
De forma predeterminada, un AudioContext tendrá la tasa de muestreo preferida que coincida con la tasa de muestreo real del dispositivo de audio de hardware. |
RecommendSampleFrameCount |
|
GAP |
GAP: Se controlaría con el AudioDeviceClient planificado. |
Hay un problema abierto para permitir un tamaño especificado por el usuario, pero aún se está definiendo. Lo más probable es que esto se maneje mejor con AudioDeviceClient, que puede indicarte cuál sería el tamaño adecuado para el hardware determinado. |
PPB_Console
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Registro |
|
utime |
console.log/warn/error/... |
|
LogWithSource |
|
GAP |
GAP |
Se considera que la API de Console es un reemplazo lo suficientemente completo, a menos que se presenten casos de uso específicos de los desarrolladores para la funcionalidad que proporciona LogWithSource. Los mapas de origen de Herramientas para desarrolladores se pueden usar para depurar JavaScript transpilado en su idioma fuente original. |
PPB_Core
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
getTime |
|
utime |
Fecha().getTime() nueva |
|
getTimeTicks |
|
utime |
new Date().getTime() |
|
IsMainThread |
|
GAP |
window.document !== no definido |
|
CallOnMainThread |
|
GAP |
Worker.postMessage y Atomics.wait |
Se puede crear una sincronización equivalente. |
PPB_FileIO
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
window.chooseFileSystemEntries() |
Crear y abrir se usan de manera diferente, pero las piezas tienen el mismo poder. |
Abrir |
|
FS (parcial) |
window.chooseFileSystemEntries() |
|
Consulta |
|
FS (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial): Blob.type también se puede usar para verificar el tipo de MIME. No se pueden determinar el tipo de sistema de archivos, la hora de creación y la hora del último acceso con la API de Native File System. |
Pantalla táctil |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
Leer |
|
FS (parcial) |
Blob.slice().arrayBuffer() |
|
Escribir |
|
FS (parcial) |
FileSystemWriter.write() |
|
SetLength |
|
FS (parcial) |
FileSystemWriter.truncate() |
|
Flush |
|
GAP (parcial) |
GAP (parcial): Los archivos se borran cuando se llama a FileSystemWrite.close(). |
El diseño está pensado, ya que los archivos de la API de Native File System están expuestos al SO. Por lo tanto, se debe realizar una verificación de la Navegación segura antes de que se muestren los datos al SO. |
Cerrar |
|
FS (parcial) |
FileSystemWriter.close() |
No cancela las operaciones pendientes, pero borra los datos escritos hasta el momento en el disco. |
ReadToArray |
|
GAP |
Blob.slice().arrayBuffer() o Blob.arrayBuffer() |
Permite varias lecturas de subrangos en paralelo. |
PPB_FileRef
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
|
GetFileSystemType |
|
FS (parcial) |
FileSystem.type |
|
GetName |
|
FS (parcial) |
File.name |
|
GetPath |
|
FS (parcial) |
GAP (parcial): Con la API de Native File System, la ruta de acceso relativa de un archivo se puede determinar a partir de la referencia a un directorio que contiene el archivo con FileSystemHandle.resolve(FileSystemHandle). |
No se puede determinar la ruta de acceso absoluta de un archivo, y el usuario debe otorgar permiso para acceder al directorio que contiene el archivo. |
GetParent |
|
FS (parcial) |
GAP (parcial): con la API de Native File System, se puede determinar la ruta de acceso relativa de un archivo a partir de la referencia a un directorio que contenga el archivo mediante FileSystemHandle.resolve(FileSystemHandle) |
El usuario debe otorgar permiso para acceder al directorio que contiene el archivo. |
MakeDirectory |
|
FS (parcial) |
FileSystemHandle.getDirectory(..., {createIfNotExists: true}) |
|
Pantalla táctil |
|
FS (parcial) |
FileSystemDirectoryHandle.getFile("name", {create: true}) |
Se puede modificar el tiempo de modificación mediante la escritura. |
Borrar |
|
FS (parcial) |
FileSystemDirectoryHandle.removeEntry() |
A diferencia de la PPAPI, los directorios no tienen que estar vacíos. |
Cambiar nombre |
|
FS (parcial) |
GAP (parcial): con la API de Native File System, el archivo se puede escribir con el nuevo nombre utilizando una combinación de FileSystemFileHandle.getFile() para el nombre nuevo y FileSystemFileHandle.createWriter().write() con el contenido del archivo anterior. Luego, usa FileSystemDirectoryHandle.removeEntry() para borrar el archivo anterior. |
No existe una API directa que haga esto en un solo paso en la API de Native File System. |
Consulta |
|
GAP (parcial) |
Blob.size, FileSystemHandle.getFile(), FileSystemHandle.getDirectory(), File.lastModified |
GAP (parcial): Blob.type también se puede usar para verificar el tipo de MIME. No se pueden determinar el tipo de sistema de archivos, la hora de creación y la hora del último acceso con la API de Native File System. |
ReadDirectoryEntries |
|
FS (parcial) |
FileSystemDirectoryHandle.getEntries() |
|
PPB_FileSystem
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
FS (parcial) |
window.requestFileSystem |
La API de JS hace ambas cosas en un solo paso |
Abrir |
|
GAP |
window.requestFileSystem |
La API de JS hace ambas acciones en un solo paso. |
GetType |
|
GAP |
FileSystem.type |
|
PPB_Fullscreen
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
IsFullScreen |
|
html5.h |
Document.fullscreenEnabled |
|
SetFullscreen |
|
html5.h |
Document.requestFullscreen |
|
GetScreenSize |
|
html5.h |
Document.exitFullscreen |
|
PPB_Gamepad
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Muestra |
|
SDL |
Gamepad.* |
El objeto Gamepad expone una marca de tiempo relativa a navigationStart. Se actualiza cuando se reciben datos del hardware: https://www.w3.org/TR/gamepad/#gamepad-interface |
PPB_Graphics2D
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
Canvas.getContext('2d') |
|
Describe |
|
SDL |
Canvas.clientWidth + Canvas.clientHeight |
|
PaintImageData |
|
SDL |
CanvasRenderingContext2D.putImageData |
|
Desplazamiento |
|
GAP |
CanvasRenderingContext2D.scrollIntoView, CanvasRenderingContext2D.drawImage |
GAP (parcial): Se puede implementar dibujando el lienzo sobre sí mismo, con un desplazamiento, usandodrawImage y, luego, rellenando el resto. |
ReplaceContents |
|
SDL |
CanvasRenderingContext2D.drawImage |
|
Flush |
|
GAP |
Sin equivalente directo |
GAP (parcial): Siempre hay una limpieza implícita al final del código de dibujo, y es poco probable que cambie. Sin embargo, la combinación de
OffscreenCanvas
y
ImageBitmapRenderingContext
proporcionan una funcionalidad similar. |
SetScale |
|
SDL |
CanvasRenderingContext2D.scale |
|
GetScale |
|
SDL |
CanvasRenderingContext2D.currentTransform |
|
SetLayerTransform |
|
SDL |
CanvasRenderingContext2D.setTransform
CanvasRenderingContext2D.scale
CanvasRenderingContext2D.translate |
|
PPB_Graphics3D
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetAttribMaxValue |
|
OpenGL ES 3.0 |
WebGL 2.0 |
GAP (parcial): la exposición de OpenGL ES 3.0 de WebGL 2.0 y Emscripten admite búferes de fotogramas multimuestras definidos por el usuario, en los que se pueden establecer todos los parámetros configurables a través de PPAPI. |
Crear |
|
SDL |
Canvas.getContext |
|
GetAttribs |
|
SDL |
WebGLRenderingContext.getContextAttributes |
|
SetAttribs |
|
SDL |
Canvas.getContext(.., OPTIONS) |
|
GetError |
|
SDL |
WebGLRenderingContext.getError |
|
ResizeBuffers |
|
SDL |
Canvas.width = w; Canvas.height = h; |
|
SwapBuffers |
|
GAP |
Sin equivalente directo |
GAP (parcial) -
Siempre hay una limpieza implícita al final del código de dibujo. esto es poco probable
cambiar. Sin embargo, la combinación de OffscreenCanvas y ImageBitmapRenderingContext proporciona una funcionalidad similar. |
PPB_ImageData
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetNativeImageDataFormat |
|
SDL |
ImageData exige el orden RGBA |
|
IsImageDataFormatSupported |
|
SDL |
ImageData impone el orden RGBA |
|
Crear |
|
SDL |
CanvasRenderingContext2d.createImageData |
|
Describir |
|
SDL |
ImageData nunca tiene un stride. |
|
Mapa |
|
SDL |
ImageData.data |
|
Dejar de asignar |
|
SDL |
ImageData.data |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
RequestInputEvents |
|
SDL |
Sin equivalente directo |
La falta de esta función probablemente sea menos relevante, ya que JS/Wasm se ejecuta en el subproceso principal y puede filtrar eventos de forma más económica sin incurrir en un recorrido de ida y vuelta entre procesos. |
RequestFilteringInputEvents |
|
SDL |
mouse* tecla* rueda* toque* composición* eventos |
|
|
|
SDL |
Element.addEventListener |
|
ClearInputEventRequest |
|
SDL |
Element.removeEventListener |
|
GetType |
|
SDL |
Descendientes de la clase de evento |
|
GetTimeStamp |
|
SDL |
Event.timeStamp |
|
GetModifiers |
|
SDL |
*Event.altKey/shiftKey/metaKey/ctrlKey |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
MouseEvent |
|
GetButton |
|
SDL |
MouseEvent.button |
|
GetPosition |
|
SDL |
MouseEvent.client*/page*/offset* |
|
GetClickCount |
|
SDL |
"dblclick" frente a "mousedown" Eventos |
|
GetMovement |
|
SDL |
MouseEvent.movement* |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
WheelEvent |
|
GetDelta |
|
SDL |
WheelEvent.delta* |
|
GetTicks |
|
GAP |
GAP: deltaMode contiene esta información, pero de forma incompleta. |
Hay un debate sobre la implementación de una API de WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
GetScrollByPage |
|
GAP |
GAP: deltaMode contiene esta información, pero de forma incompleta. |
Hay un debate sobre la implementación de una API de WheelEvent.deltaMode: https://github.com/w3c/uievents/issues/181#issuecomment-537811017. |
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
KeyboardEvent |
|
GetKeyCode |
|
SDL |
KeyboardEvent.keyCode |
|
GetCharacterText |
|
SDL |
KeyboardEvent.key |
|
GetCode |
|
SDL |
KeyboardEvent.code |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
SDL |
TouchEvent |
|
AddTouchPoint |
|
SDL |
TouchEvent.touches.push |
|
GetTouchCount |
|
SDL |
TouchEvent.touches.length |
|
GetTouchByIndex |
|
SDL |
TouchEvent.touches[i] |
|
GetTouchById |
|
SDL |
Touch.indentifer (para averiguarlo por tu cuenta) |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
CompositionEvent |
|
GetText |
|
GAP |
CompositionEvent.data |
|
GetSegmentNumber |
|
GAP |
GAP: Sin equivalente directo |
Estos datos se pueden recuperar desde CompositionEvent.data. |
GetSegmentOffset |
|
GAP |
GAP: Sin equivalente directo |
|
GetTargetSegment |
|
GAP |
GAP: Sin equivalente directo |
|
GetSelection |
|
GAP |
GAP: Sin equivalente directo |
|
PPB_Instance
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
BindGraphics |
|
SDL |
Canvas.getContext (no sucede ya que la vinculación es automática). |
|
IsFullFrame |
|
GAP |
GAP: No hay equivalentes a los controladores de tipos MIME. |
Las aplicaciones de NaCl se pueden registrar para manejar un tipo de MIME concreto y poseer todo el documento. |
DidCreate |
|
N/A |
<Element>[key] |
El acceso general al DOM te permite extraer atributos de etiqueta. |
DidDestroy |
|
N/A |
N/A |
No activado para NaCl |
DidChangeView |
|
N/A |
"Cambio de tamaño" del elemento Evento |
|
DidChangeFocus |
|
N/A |
Eventos "focus", "focusin" y "focusout" del elemento |
|
HandleDocumentLoad |
|
N/A |
GAP: No hay forma de registrarse como controlador de tipo MIME. |
Los módulos de NaCl a través de apps y una entrada de manifiesto se pueden configurar para controlar tipos mime específicos. |
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Configurar |
|
GAP |
getUserMedia() |
Las restricciones de getUserMedia() pueden proporcionar los valores de configuración que se usarán en MediaStreamTrack. |
GetAttrib |
|
GAP |
MediaStreamTrack.getSettings() |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetBuffer |
|
GAP |
GAP: Sin equivalente |
|
RecycleBuffer |
|
GAP |
GAP: Sin equivalente |
|
Cerrar |
|
GAP |
MediaStreamTrack.stop() |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
Captura de lienzo |
Canvas Capture permite introducir fotogramas de video de forma programática. |
Configurar |
|
GAP |
applyConstraints(), getUserMedia() |
GAP (parcial): El alcance de las configuraciones disponibles en la API web puede diferir de la PPAPI. |
GetAttrib |
|
GAP |
MediaStreamSettings.width |
|
|
|
GAP |
MediaStreamSettings.height |
|
|
|
GAP |
GAP: no equivale a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_BUFFERED_FRAMES |
MediaStream no se puede precargar, por lo que nunca se almacenará en búfer: https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements |
|
|
GAP |
GAP: no equivalente a PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT |
|
GetId |
|
GAP |
MediaStreamTrack.id |
|
HasEnded |
|
GAP |
MediaStreamTrack.readyState |
|
GetFrame |
|
GAP |
GAP: Sin equivalente |
|
RecycleFrame |
|
GAP |
GAP: Sin equivalente |
|
Cerrar |
|
GAP |
MediaStreamTrack.stop() |
|
GetEmptyFrame |
|
GAP |
GAP: Sin equivalente |
|
PutFrame |
|
GAP |
GAP: Sin equivalente |
|
PPB_MessageLoop
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
N/A |
En su mayoría, los trabajadores obtienen un bucle de eventos implícito. |
|
GetForMainThread |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
GetCurrent |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
AttachToCurrentThread |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
Ejecutar |
|
N/A |
La mayoría es discutible, los trabajadores obtienen un bucle de eventos implícitos. |
|
PostWork |
|
N/A |
En general, los trabajadores obtienen un bucle de eventos implícito. |
|
PostQuit |
|
N/A |
En su mayoría, los trabajadores obtienen un bucle de eventos implícito. |
|
PPB_Messaging
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
PostMessage |
|
N/A |
Window.postMessage |
|
RegisterMessageHandler |
|
N/A |
Window.addEventListener |
|
UnregisterMessageHandler |
|
N/A |
Window.removeEventListener |
|
PPB_MouseCursor
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
SetCursor |
|
SDL |
Element.style.cursor |
Se admite el mismo conjunto de cursores de archivo.
Puedes usar cursores personalizados con url(..).
Los cursores personalizados dinámicos se pueden hacer con URI de datos.
CSS3 admite la especificación del hotspot. |
PPB_MouseLock
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
LockMouse |
|
SDL |
Element.requestPointerLock |
|
UnlockMouse |
|
SDL |
Element.exitPointerLock |
|
PPB_OpenGLES2
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Varios métodos |
|
OpenGLES |
Cerca de WebGL 1.0 en funcionalidad. |
|
|
x |
|
OffscreenCanvas |
|
PPB_TextInputController
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
SetTextInputType |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
A algunos desarrolladores les gustaría poder dar pistas de esta manera o, preferentemente, la capacidad de interceptar y mostrar eventos o resultados de IME intercalados dentro de un lienzo. |
UpdateCaretPosition |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
CancelCompositionText |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
UpdateSurroundingText |
|
GAP |
GAP: Posiblemente se completó con la API de Input Method Editor. |
https://www.w3.org/TR/ime-api/ |
PPB_URLLoader
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
new XMLHttpRequest(); |
|
Abrir |
|
embind |
XMLHttpRequest.open |
|
FollowRedirect |
|
embind |
Request.redirect |
|
|
|
GAP |
GAP: Sin equivalente XMLHTTPRequest |
|
GetUploadProgress |
|
embind |
XMLHttpRequest "progreso" Evento |
|
|
|
GAP |
FetchObserver |
Aún no se especifica ni se implementa; https://github.com/whatwg/fetch/issues/607 |
GetDownloadProgress |
|
embind |
XMLHttpRequest "progreso" Evento |
|
|
|
GAP |
FetchObserver |
Aún no se especifica ni se implementa; https://github.com/whatwg/fetch/issues/607 |
GetResponseInfo |
|
embind |
XMLHttpRequest.getAllResponseHeaders |
|
|
|
embind |
Recuperar respuesta.* |
|
ReadResponseBody |
|
embind |
XMLHttpRequest.response |
|
|
|
embind |
Cuerpo.* (La respuesta es un cuerpo) |
|
FinishStreamingToFile |
|
embind |
GAP: Sin equivalente directo |
XMLHttpRequest y Fetch suponen la transmisión a la memoria, en lugar de directamente a un almacenamiento. |
Cerrar |
|
embind |
XMLHttpRequest.abort |
|
|
|
GAP |
API de Fetch: AbortSignal y AbortController |
|
PPB_URLRequestInfo
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
XMLHttpRequest |
|
|
|
embind |
Solicitud de recuperación |
|
SetProperty |
|
GAP |
GAP: No hay un equivalente directo para XMLHttpRequest. |
XMLHttpRequest no proporciona formas directas de limitar por solicitud los siguientes redireccionamientos, transmitir a un archivo, establecer URL de referencia o políticas de credenciales. |
|
|
embind |
Solicitud.* |
|
AppendDataToBody |
|
embind |
XMLHttpRequest.send |
GAP: Ambas deben tener el cuerpo completo, en lugar de un fragmento. |
|
|
embind |
recuperar(.., opciones:cuerpo) |
|
AppendFileToBody |
|
GAP |
transmisión de carga de fetch() |
https://www.chromestatus.com/features/5274139738767360 |
|
|
N/A |
<form> |
También puedes leer con FileReader y subir, pero eso es más como AppendDataToBody. |
PPB_URLResponseInfo
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetProperty |
|
embind |
XMLHttpRequest.getAllResponseHeaders + otros |
|
|
|
embind |
Recuperar respuesta.* |
|
GetBodyAsFileRef |
|
embind |
Recuperar respuesta (cuerpo) .blob() |
Supone que la capa de almacenamiento optimiza la transferencia. |
PPB_Var
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
VarFromUtf8 |
|
embind |
TextDecoder.decode |
|
VarToUtf8 |
|
embind |
TextEncoder.encode |
|
VarFromResource |
|
N/A |
N/A |
|
VarToResource |
|
N/A |
N/A |
|
PPB_VarArray
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Obtener |
|
embind |
Arreglo[i] |
|
Establecer |
|
embind |
Arreglo[i] = x |
|
GetLength |
|
embind |
Array.length |
|
SetLength |
|
embind |
Longitud de la matriz = n |
|
PPB_VarArrayBuffer
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
nuevo ArrayBuffer(n) |
|
ByteLength |
|
embind |
ArrayBuffer.byteLength |
|
Mapa |
|
GAP |
GAP: Sin equivalente directo |
Los módulos Asm.js / Wasm no pueden asignar regiones de un ArrayBuffer que no sean su montón de memoria lineal único.
Es posible que, en el futuro, varios recuerdos o la asignación de memoria mejoren esta situación. |
Dejar de asignar |
|
GAP |
GAP: Sin equivalente directo |
|
PPB_VarDictionary
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
embind |
{} |
|
Obtener |
|
embind |
<Object>[i] |
|
Establecer |
|
embind |
<Object>[i] = x |
|
Borrar |
|
embind |
borrar <Object>[i] |
|
HasKey |
|
embind |
x en <Object> |
|
GetKeys |
|
embind |
for (k in <Object>) {} |
No tiene un equivalente literal, pero se puede compilar. |
PPB_VideoDecoder
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante el uso de VideoDecoder(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Inicialización |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta mediante los parámetros de inicialización de VideoDecoder() (VideoDecoderInitParameters). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Decode |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante ReadableStream.pipeThrough(VideoDecoder). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
GetPicture |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
RecyclePicture |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. El diseño actual reciclará automáticamente las imágenes y mantendrá el proceso de decodificación en curso. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Flush |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. Se llamará a la API Flush(), sin embargo, aún se está analizando cómo se secuenciará en relación con las llamadas de decodificación. |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
Restablecer |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs destruyendo la instancia de VideoDecoder y creando una nueva. Esto no será tan eficiente como un método de restablecimiento dedicado, pero todavía se está analizando la semántica de una API de Reset(). |
https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming |
PPB_VideoEncoder
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta a través de VideoEncoder(). |
|
GetSupportedProfiles |
|
GAP |
GAP (parcial): navigator.mediaCapabilities.encodingInfo() |
Los perfiles compatibles se deben verificar uno por uno. |
Inicialización |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs usando los parámetros de inicialización de VideoEncoder(). |
|
GetFramesRequired |
|
GAP |
GAP: Sin equivalente |
Es poco probable que se exponga el grupo de marcos que usa internamente la API de Web Codecs. |
GetFrameCodedSize |
|
GAP |
GAP: Sin equivalente |
Es poco probable que se exponga el grupo de fotogramas que usa internamente la API de Web Codecs. |
GetVideoFrame |
|
GAP |
GAP: Se controlaría con la API propuesta de WebCodecs mediante ReadableStream.pipeThrough(VideoEncoder). Esto codificaría directamente los datos en la transmisión Readable, en lugar de tomar un solo fotograma para completarlos con datos antes de la codificación. |
|
Codifica |
|
GAP |
GAP: se controlaría con la API propuesta de WebCodecs mediante ReadableStream.pipeThrough(VideoEncoder). |
|
GetBitstreamBuffer |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. El diseño actual pasará automáticamente por el búfer de flujo de bits codificado que se canaliza. |
Actualmente, la API de WebCodecs supone que el búfer de flujo de bits se puede copiar en lugar de agruparse, por lo que no será necesario reciclarlo. |
RecycleBitstreamBuffer |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. El diseño actual reciclará automáticamente el búfer para mantener activo el proceso de codificación. |
Es poco probable que esto cambie en el futuro, ya que las implicaciones de rendimiento son menores. |
RequestEncodingParametersChange |
|
GAP |
GAP: se administraría mediante la API de Web Codecs propuesta. Algunos parámetros se podrán cambiar sobre la marcha, mientras que otros requerirán que se elimine el codificador. |
|
Cerrar |
|
GAP |
GAP: se controlaría con la API de WebCodecs propuesta mediante el uso de VideoEncoder.Close(). |
|
PPB_VideoFrame
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetTimestamp |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. |
|
SetTimestamp |
|
GAP |
GAP: Se controlará con la API propuesta de WebCodecs. |
|
GetFormat |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetSize |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetDataBuffer |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
GetDataBufferSize |
|
GAP |
GAP: Se controlaría con la API de WebCodecs propuesta. |
|
PPB_View
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetRect |
|
embind |
Element.getBoundingClientRect |
|
IsFullscreen |
|
embind |
Document.fullScreenEnabled |
Se refiere al documento en lugar de a un solo elemento. |
IsVisible |
|
embind |
IntersectionObserver |
|
IsPageVisible |
|
embind |
document.visibilityState |
|
GetClipRect |
|
embind |
IntersectionObserver |
|
GetDeviceScale |
|
embind |
window.devicePixelRatio |
|
GetCSSScale |
|
embind |
<Element>.getBoundingClientRect().width / <Element>.offsetWidth |
|
GetScrollOffset |
|
embind |
<Element>.scrollTop/<Element>.scrollLeft |
|
PPB_WebSocket
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
|
GAP |
WebSocket.WebSocket |
|
Conectar |
|
GAP |
WebSocket.WebSocket(url, ...)
Evento "open" de WebSocket |
|
Cerrar |
|
GAP |
WebSocket.close |
|
ReceiveMessage |
|
GAP |
Evento "message" de WebSocket
Evento "error" de WebSocket
Evento "close" de WebSocket |
|
SendMessage |
|
GAP |
WebSocket.send |
|
GetBufferedAmount |
|
GAP |
WebSocket.bufferedAmount |
|
GetCloseCode |
|
GAP |
CloseEvent.code |
|
GetCloseReason |
|
GAP |
CloseEvent.reason |
|
GetCloseWasClean |
|
GAP |
CloseEvent.wasClean |
|
GetExtensions |
|
GAP |
WebSocket.extensions |
|
GetProtocol |
|
GAP |
WebSocket.protocol |
|
GetReadyState |
|
GAP |
WebSocket.readyState |
|
GetURL |
|
GAP |
WebSocket.url |
|
PPP_Graphics3D
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Gráficos3DContexto perdido |
|
SDL |
Evento "webglcontextlost" del lienzo |
|
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleInputEvent |
|
SDL |
Element.addEventListener |
|
PPP_Instance
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
DidCreate |
|
N/A |
<Element>[key] |
El acceso general al DOM te permite extraer atributos de etiqueta. |
DidDestroy |
|
N/A |
N/A |
No activado para NaCl |
DidChangeView |
|
N/A |
"Cambio de tamaño" del elemento Evento |
|
DidChangeFocus |
|
N/A |
Eventos "focus", "focusin" y "focusout" del elemento |
|
HandleDocumentLoad |
|
N/A |
GAP: No hay forma de registrarse como controlador de tipo MIME. |
Módulos de NaCl a través de aplicaciones + una entrada de manifiesto pueden configurarse para manejar determinados tipos de MIME. |
PPP_MessageHandler
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleMessage |
|
embind |
Evento "message" de MessagePort
Evento "message" de Window |
|
HandleBlockingMessage |
|
N/A |
GAP: Sin equivalente directo |
Se puede realizar una sincronización similar fuera del subproceso principal con Atomics.wait. Esto se agregó para admitir la emulación de APIs de complementos síncronas. |
PPP_Messaging
Método de la PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
HandleMessage |
|
embind |
Evento "message" de MessagePort
Evento "message" de Window |
|
PPP_MouseLock
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
MouseLockLost |
|
SDL |
Eventos "pointerlockchange" y "pointerlockerror" del elemento |
|
PPAPI (aplicaciones)
PPB_HostResolver
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
x |
GAP |
GAP (parcial): sin equivalente directo |
|
Resolver |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
GetCanonicalName |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
GetNetAddressCount |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
GetNetAddress |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
PPB_NetAddress
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
CreateFromIPv4Address |
x |
GAP |
GAP (parcial): sin equivalente directo |
|
CreateFromIPv6Address |
x |
GAP |
GAP (parcial): sin equivalente directo |
|
GetFamily |
x |
GAP |
GAP (parcial): sin equivalente directo |
|
DescribeAsString |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
DescribeAsIPv4Address |
x |
GAP |
GAP (parcial): Sin equivalente directo |
|
DescribeAsIPv6Address |
x |
GAP |
GAP (parcial): sin equivalente directo |
|
PPB_NetworkList
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetCount |
x |
GAP |
GAP: Sin equivalente directo |
|
GetName |
x |
GAP |
GAP: Sin equivalente directo |
|
GetType |
x |
GAP |
GAP: Sin equivalente directo |
|
GetState |
x |
GAP |
GAP: Sin equivalente directo |
|
GetIpAddress |
x |
GAP |
GAP: Sin equivalente directo |
|
GetDisplayName |
x |
GAP |
GAP: Sin equivalente directo |
|
GetMTU |
x |
GAP |
GAP: Sin equivalente directo |
|
PPB_NetworkMonitor
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
Crear |
x |
GAP |
GAP: Sin equivalente directo |
|
UpdateNetworkList |
x |
GAP |
GAP: Sin equivalente directo |
|
PPB_NetworkProxy
Método de PPAPI |
Asume subprocesos |
Emscripten |
API web |
Limitaciones |
GetProxyForURL |
x |
GAP |
GAP: Sin equivalente directo |
|
PPB_TCPSocket y PPB_UDPSocket
No hay una asignación directa 1:1 para la migración. En cambio, hemos esbozado algunas
de usuario a continuación y cuál es la ruta de migración recomendada.
Caso de uso |
Recomendaciones |
Compartir pantalla |
getDisplayMedia y
WebRTC (
demo)
|
Carga desde un servidor local para minimizar el uso del ancho de banda |
XHR, Fetch, Streams, Service Worker y Cache APIs |
Cargando desde un
instancia local de una app web / Conéctate a una instancia local de una app web |
WebRTC |
Chat |
WebSocket*
|
Comunicación de audio y video en tiempo real |
WebRTC |
Colaboración |
WebSocket*
|
Tiempo real
juegos multijugador |
WebTransport**, a menos que sea P2P, en cuyo caso WebRTC (o WebTransport a través de RTCIceTransport)
|
Tiempo real
transmisión interactiva |
WebTransport**
|
Cómo comunicarse con el servidor heredado |
Servidor proxy o middleware para realizar la conversión de protocolos Comentarios para
bit.ly/network-api-gaps
|
*: O WebTransport en el futuro
**: Consulta chromestatus para conocer la disponibilidad