webgl
This commit is contained in:
parent
d934743ff8
commit
ee77d92c4a
Binary file not shown.
@ -1159,26 +1159,26 @@ var tempDouble;
|
|||||||
var tempI64;
|
var tempI64;
|
||||||
|
|
||||||
var ASM_CONSTS = {
|
var ASM_CONSTS = {
|
||||||
4093944: function() {
|
4107288: function() {
|
||||||
Module["emscripten_get_now_backup"] = performance.now;
|
Module["emscripten_get_now_backup"] = performance.now;
|
||||||
},
|
},
|
||||||
4093999: function($0) {
|
4107343: function($0) {
|
||||||
performance.now = function() {
|
performance.now = function() {
|
||||||
return $0;
|
return $0;
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
4094047: function($0) {
|
4107391: function($0) {
|
||||||
performance.now = function() {
|
performance.now = function() {
|
||||||
return $0;
|
return $0;
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
4094095: function() {
|
4107439: function() {
|
||||||
performance.now = Module["emscripten_get_now_backup"];
|
performance.now = Module["emscripten_get_now_backup"];
|
||||||
},
|
},
|
||||||
4094150: function() {
|
4107494: function() {
|
||||||
return Module.webglContextAttributes.premultipliedAlpha;
|
return Module.webglContextAttributes.premultipliedAlpha;
|
||||||
},
|
},
|
||||||
4094211: function() {
|
4107555: function() {
|
||||||
return Module.webglContextAttributes.preserveDrawingBuffer;
|
return Module.webglContextAttributes.preserveDrawingBuffer;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -2711,6 +2711,252 @@ function _JS_UnityEngineShouldQuit() {
|
|||||||
return !!Module.shouldQuit;
|
return !!Module.shouldQuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var videoInstances = {};
|
||||||
|
|
||||||
|
var jsSupportedVideoFormats = [];
|
||||||
|
|
||||||
|
var jsUnsupportedVideoFormats = [];
|
||||||
|
|
||||||
|
function _JS_Video_CanPlayFormat(format) {
|
||||||
|
format = UTF8ToString(format);
|
||||||
|
if (jsSupportedVideoFormats.indexOf(format) != -1) return true;
|
||||||
|
if (jsUnsupportedVideoFormats.indexOf(format) != -1) return false;
|
||||||
|
var video = document.createElement("video");
|
||||||
|
var canPlay = video.canPlayType(format);
|
||||||
|
if (canPlay) jsSupportedVideoFormats.push(format); else jsUnsupportedVideoFormats.push(format);
|
||||||
|
return !!canPlay;
|
||||||
|
}
|
||||||
|
|
||||||
|
var videoInstanceIdCounter = 0;
|
||||||
|
|
||||||
|
function jsVideoEnded() {
|
||||||
|
if (this.onendedCallback) {
|
||||||
|
dynCall_vi(this.onendedCallback, this.onendedRef);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var hasSRGBATextures = null;
|
||||||
|
|
||||||
|
function _JS_Video_Create(url) {
|
||||||
|
var str = UTF8ToString(url);
|
||||||
|
var video = document.createElement("video");
|
||||||
|
video.style.display = "none";
|
||||||
|
video.src = str;
|
||||||
|
video.muted = true;
|
||||||
|
video.setAttribute("muted", "");
|
||||||
|
video.setAttribute("playsinline", "");
|
||||||
|
video.crossOrigin = "anonymous";
|
||||||
|
videoInstances[++videoInstanceIdCounter] = video;
|
||||||
|
if (hasSRGBATextures == null) hasSRGBATextures = Module.SystemInfo.browser == "Chrome" || Module.SystemInfo.browser == "Edge";
|
||||||
|
return videoInstanceIdCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsVideoPendingBlockedVideos = {};
|
||||||
|
|
||||||
|
function jsVideoPlayPendingBlockedVideo(video) {
|
||||||
|
jsVideoPendingBlockedVideos[video].play().then(function() {
|
||||||
|
jsVideoRemovePendingBlockedVideo(video);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function jsVideoAttemptToPlayBlockedVideos() {
|
||||||
|
for (var i in jsVideoPendingBlockedVideos) {
|
||||||
|
if (jsVideoPendingBlockedVideos.hasOwnProperty(i)) jsVideoPlayPendingBlockedVideo(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function jsVideoRemovePendingBlockedVideo(video) {
|
||||||
|
delete jsVideoPendingBlockedVideos[video];
|
||||||
|
if (Object.keys(jsVideoPendingBlockedVideos).length == 0) {
|
||||||
|
window.removeEventListener("mousedown", jsVideoAttemptToPlayBlockedVideos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Destroy(video) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
if (v.loopEndPollInterval) {
|
||||||
|
clearInterval(v.loopEndPollInterval);
|
||||||
|
}
|
||||||
|
jsVideoRemovePendingBlockedVideo(video);
|
||||||
|
v.src = "";
|
||||||
|
delete v.onendedCallback;
|
||||||
|
v.onended = v.onerror = v.oncanplay = v.onseeked = null;
|
||||||
|
delete videoInstances[video];
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Duration(video) {
|
||||||
|
return videoInstances[video].duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_EnableAudioTrack(video, trackIndex, enabled) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
if (!v.enabledTracks) v.enabledTracks = [];
|
||||||
|
while (v.enabledTracks.length <= trackIndex) v.enabledTracks.push(true);
|
||||||
|
v.enabledTracks[trackIndex] = enabled;
|
||||||
|
var tracks = v.audioTracks;
|
||||||
|
if (!tracks) return;
|
||||||
|
var track = tracks[trackIndex];
|
||||||
|
if (track) track.enabled = enabled ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_GetAudioLanguageCode(video, trackIndex) {
|
||||||
|
var tracks = videoInstances[video].audioTracks;
|
||||||
|
if (!tracks) return "";
|
||||||
|
var track = tracks[trackIndex];
|
||||||
|
return track ? track.language : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_GetNumAudioTracks(video) {
|
||||||
|
var tracks = videoInstances[video].audioTracks;
|
||||||
|
return tracks ? tracks.length : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Height(video) {
|
||||||
|
return videoInstances[video].videoHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_IsPlaying(video) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
return !v.paused && !v.ended;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_IsReady(video) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
var targetReadyState = /(iPhone|iPad)/i.test(navigator.userAgent) ? v.HAVE_METADATA : v.HAVE_ENOUGH_DATA;
|
||||||
|
if (!v.isReady && v.readyState >= targetReadyState) v.isReady = true;
|
||||||
|
return v.isReady;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Pause(video) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
v.pause();
|
||||||
|
jsVideoRemovePendingBlockedVideo(video);
|
||||||
|
if (v.loopEndPollInterval) {
|
||||||
|
clearInterval(v.loopEndPollInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetLoop(video, loop) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
if (v.loopEndPollInterval) {
|
||||||
|
clearInterval(v.loopEndPollInterval);
|
||||||
|
}
|
||||||
|
v.loop = loop;
|
||||||
|
if (loop) {
|
||||||
|
v.loopEndPollInterval = setInterval(function() {
|
||||||
|
if (v.currentTime < v.lastSeenPlaybackTime) {
|
||||||
|
jsVideoEnded.apply(v);
|
||||||
|
}
|
||||||
|
v.lastSeenPlaybackTime = v.currentTime;
|
||||||
|
}, 1e3 / 30);
|
||||||
|
v.lastSeenPlaybackTime = v.currentTime;
|
||||||
|
v.onended = null;
|
||||||
|
} else {
|
||||||
|
v.onended = jsVideoEnded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function jsVideoAllAudioTracksAreDisabled(v) {
|
||||||
|
if (!v.enabledTracks) return false;
|
||||||
|
for (var i = 0; i < v.enabledTracks.length; ++i) {
|
||||||
|
if (v.enabledTracks[i]) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function jsVideoAddPendingBlockedVideo(video, v) {
|
||||||
|
if (Object.keys(jsVideoPendingBlockedVideos).length == 0) window.addEventListener("mousedown", jsVideoAttemptToPlayBlockedVideos);
|
||||||
|
jsVideoPendingBlockedVideos[video] = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Play(video, muted) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
v.muted = muted || jsVideoAllAudioTracksAreDisabled(v);
|
||||||
|
var promise = v.play();
|
||||||
|
if (promise) promise.catch(function(e) {
|
||||||
|
if (e.name == "NotAllowedError") jsVideoAddPendingBlockedVideo(video, v);
|
||||||
|
});
|
||||||
|
_JS_Video_SetLoop(video, v.loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Seek(video, time) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
v.lastSeenPlaybackTime = v.currentTime = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetEndedHandler(video, ref, onended) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
v.onendedCallback = onended;
|
||||||
|
v.onendedRef = ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetErrorHandler(video, ref, onerror) {
|
||||||
|
videoInstances[video].onerror = function(evt) {
|
||||||
|
dynCall_vii(onerror, ref, evt.target.error.code);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetMute(video, muted) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
v.muted = muted || jsVideoAllAudioTracksAreDisabled(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetPlaybackRate(video, rate) {
|
||||||
|
videoInstances[video].playbackRate = rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetReadyHandler(video, ref, onready) {
|
||||||
|
videoInstances[video].oncanplay = function() {
|
||||||
|
dynCall_vi(onready, ref);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetSeekedOnceHandler(video, ref, onseeked) {
|
||||||
|
videoInstances[video].onseeked = function() {
|
||||||
|
dynCall_vi(onseeked, ref);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_SetVolume(video, volume) {
|
||||||
|
videoInstances[video].volume = volume;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Time(video) {
|
||||||
|
return videoInstances[video].currentTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_UpdateToTexture(video, tex, adjustToLinearspace) {
|
||||||
|
var v = videoInstances[video];
|
||||||
|
if (!(v.videoWidth > 0 && v.videoHeight > 0)) return false;
|
||||||
|
if (v.lastUpdateTextureTime === v.currentTime) return false;
|
||||||
|
v.lastUpdateTextureTime = v.currentTime;
|
||||||
|
GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, true);
|
||||||
|
var internalFormat = adjustToLinearspace ? hasSRGBATextures ? GLctx.SRGB8_ALPHA8 : GLctx.SRGB8 : GLctx.RGBA;
|
||||||
|
var format = adjustToLinearspace ? hasSRGBATextures ? GLctx.RGBA : GLctx.RGB : GLctx.RGBA;
|
||||||
|
if (v.previousUploadedWidth != v.videoWidth || v.previousUploadedHeight != v.videoHeight) {
|
||||||
|
GLctx.deleteTexture(GL.textures[tex]);
|
||||||
|
var t = GLctx.createTexture();
|
||||||
|
t.name = tex;
|
||||||
|
GL.textures[tex] = t;
|
||||||
|
GLctx.bindTexture(GLctx.TEXTURE_2D, t);
|
||||||
|
GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_S, GLctx.CLAMP_TO_EDGE);
|
||||||
|
GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_WRAP_T, GLctx.CLAMP_TO_EDGE);
|
||||||
|
GLctx.texParameteri(GLctx.TEXTURE_2D, GLctx.TEXTURE_MIN_FILTER, GLctx.LINEAR);
|
||||||
|
GLctx.texImage2D(GLctx.TEXTURE_2D, 0, internalFormat, format, GLctx.UNSIGNED_BYTE, v);
|
||||||
|
v.previousUploadedWidth = v.videoWidth;
|
||||||
|
v.previousUploadedHeight = v.videoHeight;
|
||||||
|
} else {
|
||||||
|
GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[tex]);
|
||||||
|
GLctx.texImage2D(GLctx.TEXTURE_2D, 0, internalFormat, format, GLctx.UNSIGNED_BYTE, v);
|
||||||
|
}
|
||||||
|
GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _JS_Video_Width(video) {
|
||||||
|
return videoInstances[video].videoWidth;
|
||||||
|
}
|
||||||
|
|
||||||
var wr = {
|
var wr = {
|
||||||
requests: {},
|
requests: {},
|
||||||
responses: {},
|
responses: {},
|
||||||
@ -13358,6 +13604,30 @@ var asmLibraryArg = {
|
|||||||
"JS_SystemInfo_HasWebGL": _JS_SystemInfo_HasWebGL,
|
"JS_SystemInfo_HasWebGL": _JS_SystemInfo_HasWebGL,
|
||||||
"JS_SystemInfo_IsMobile": _JS_SystemInfo_IsMobile,
|
"JS_SystemInfo_IsMobile": _JS_SystemInfo_IsMobile,
|
||||||
"JS_UnityEngineShouldQuit": _JS_UnityEngineShouldQuit,
|
"JS_UnityEngineShouldQuit": _JS_UnityEngineShouldQuit,
|
||||||
|
"JS_Video_CanPlayFormat": _JS_Video_CanPlayFormat,
|
||||||
|
"JS_Video_Create": _JS_Video_Create,
|
||||||
|
"JS_Video_Destroy": _JS_Video_Destroy,
|
||||||
|
"JS_Video_Duration": _JS_Video_Duration,
|
||||||
|
"JS_Video_EnableAudioTrack": _JS_Video_EnableAudioTrack,
|
||||||
|
"JS_Video_GetAudioLanguageCode": _JS_Video_GetAudioLanguageCode,
|
||||||
|
"JS_Video_GetNumAudioTracks": _JS_Video_GetNumAudioTracks,
|
||||||
|
"JS_Video_Height": _JS_Video_Height,
|
||||||
|
"JS_Video_IsPlaying": _JS_Video_IsPlaying,
|
||||||
|
"JS_Video_IsReady": _JS_Video_IsReady,
|
||||||
|
"JS_Video_Pause": _JS_Video_Pause,
|
||||||
|
"JS_Video_Play": _JS_Video_Play,
|
||||||
|
"JS_Video_Seek": _JS_Video_Seek,
|
||||||
|
"JS_Video_SetEndedHandler": _JS_Video_SetEndedHandler,
|
||||||
|
"JS_Video_SetErrorHandler": _JS_Video_SetErrorHandler,
|
||||||
|
"JS_Video_SetLoop": _JS_Video_SetLoop,
|
||||||
|
"JS_Video_SetMute": _JS_Video_SetMute,
|
||||||
|
"JS_Video_SetPlaybackRate": _JS_Video_SetPlaybackRate,
|
||||||
|
"JS_Video_SetReadyHandler": _JS_Video_SetReadyHandler,
|
||||||
|
"JS_Video_SetSeekedOnceHandler": _JS_Video_SetSeekedOnceHandler,
|
||||||
|
"JS_Video_SetVolume": _JS_Video_SetVolume,
|
||||||
|
"JS_Video_Time": _JS_Video_Time,
|
||||||
|
"JS_Video_UpdateToTexture": _JS_Video_UpdateToTexture,
|
||||||
|
"JS_Video_Width": _JS_Video_Width,
|
||||||
"JS_WebRequest_Abort": _JS_WebRequest_Abort,
|
"JS_WebRequest_Abort": _JS_WebRequest_Abort,
|
||||||
"JS_WebRequest_Create": _JS_WebRequest_Create,
|
"JS_WebRequest_Create": _JS_WebRequest_Create,
|
||||||
"JS_WebRequest_GetResponseMetaData": _JS_WebRequest_GetResponseMetaData,
|
"JS_WebRequest_GetResponseMetaData": _JS_WebRequest_GetResponseMetaData,
|
||||||
@ -14266,6 +14536,8 @@ var dynCall_fiifii = Module["dynCall_fiifii"] = createExportWrapper("dynCall_fii
|
|||||||
|
|
||||||
var dynCall_iifffi = Module["dynCall_iifffi"] = createExportWrapper("dynCall_iifffi");
|
var dynCall_iifffi = Module["dynCall_iifffi"] = createExportWrapper("dynCall_iifffi");
|
||||||
|
|
||||||
|
var dynCall_viidi = Module["dynCall_viidi"] = createExportWrapper("dynCall_viidi");
|
||||||
|
|
||||||
var dynCall_viiidii = Module["dynCall_viiidii"] = createExportWrapper("dynCall_viiidii");
|
var dynCall_viiidii = Module["dynCall_viiidii"] = createExportWrapper("dynCall_viiidii");
|
||||||
|
|
||||||
var dynCall_ijiiiiiiiii = Module["dynCall_ijiiiiiiiii"] = createExportWrapper("dynCall_ijiiiiiiiii");
|
var dynCall_ijiiiiiiiii = Module["dynCall_ijiiiiiiiii"] = createExportWrapper("dynCall_ijiiiiiiiii");
|
||||||
@ -14306,8 +14578,6 @@ var dynCall_fdi = Module["dynCall_fdi"] = createExportWrapper("dynCall_fdi");
|
|||||||
|
|
||||||
var dynCall_jjiiii = Module["dynCall_jjiiii"] = createExportWrapper("dynCall_jjiiii");
|
var dynCall_jjiiii = Module["dynCall_jjiiii"] = createExportWrapper("dynCall_jjiiii");
|
||||||
|
|
||||||
var dynCall_viidi = Module["dynCall_viidi"] = createExportWrapper("dynCall_viidi");
|
|
||||||
|
|
||||||
var dynCall_ddi = Module["dynCall_ddi"] = createExportWrapper("dynCall_ddi");
|
var dynCall_ddi = Module["dynCall_ddi"] = createExportWrapper("dynCall_ddi");
|
||||||
|
|
||||||
var dynCall_vidiii = Module["dynCall_vidiii"] = createExportWrapper("dynCall_vidiii");
|
var dynCall_vidiii = Module["dynCall_vidiii"] = createExportWrapper("dynCall_vidiii");
|
||||||
@ -14676,6 +14946,8 @@ var dynCall_iiiiiifffiiifiii = Module["dynCall_iiiiiifffiiifiii"] = createExport
|
|||||||
|
|
||||||
var dynCall_fiiiif = Module["dynCall_fiiiif"] = createExportWrapper("dynCall_fiiiif");
|
var dynCall_fiiiif = Module["dynCall_fiiiif"] = createExportWrapper("dynCall_fiiiif");
|
||||||
|
|
||||||
|
var dynCall_vidd = Module["dynCall_vidd"] = createExportWrapper("dynCall_vidd");
|
||||||
|
|
||||||
var dynCall_iiiiiff = Module["dynCall_iiiiiff"] = createExportWrapper("dynCall_iiiiiff");
|
var dynCall_iiiiiff = Module["dynCall_iiiiiff"] = createExportWrapper("dynCall_iiiiiff");
|
||||||
|
|
||||||
var dynCall_viid = Module["dynCall_viid"] = createExportWrapper("dynCall_viid");
|
var dynCall_viid = Module["dynCall_viid"] = createExportWrapper("dynCall_viid");
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user