Optimize Emscripten SDL handwritten JS-implemented SDL_LockSurface() and SDL_UnlockSurface() by adding an option to perform discarding locks that are fast no-ops and to avoid the screen-is-always-opaque emulation which fills alpha=0xFF bytes to each pixel on lock and unlock. Call something like EM_ASM("SDL.defaults.copyOnLock = false; SDL.defaults.discardOnLock = true; SDL.defaults.opaqueFrontBuffer = false;"); at startup to enable these.
improve TOTAL_MEMORY adjustment message; #2860
Add WebGL 2.0 support to createContext().
Pass major/minorVersion from init_context_attributes().
Merge pull request #2865 from dvander/support-webgl2-contexts

Support WebGL2 contexts.
Merge pull request #2870 from juj/sdl_surface_lock_opts

Sdl surface lock optimizations.
docs improvement
Add a USE_WEBGL2 pref.
Merge pull request #2873 from dvander/add-use-webgl2-pref

Add a USE_WEBGL2 pref.
Use WebGL2 native drawBuffers() when possible.
Merge pull request #2874 from dvander/webgl2-drawbuffers

Use WebGL2 native drawBuffers() when possible.
Fix typo in assertion in sdl_audio test.
Implement Mix_SetPanning in SDL library bindings.

Mix_SetPanning changes the volume of the left/right channel for stereo
audio. Unfortunately, there's no direct mapping for this API, but
WebAudio provides a "createPanner" API which can simulate it.