'use strict'; require("webglPlus.js"); conch["platCallBack"] = function (ret) { var objid, m, rs, c, rJSON; if (ret == null) return; objid = ret.objId; m = ret.mName; c = ret.cName; rs = ret.v; var platC; if (objid != -1) { platC = PlatformObj.objMap[objid]; } else { platC = PlatformClass.clsMap[c]; } if (platC) { var callback = platC.callBackList[m]; callback && callback(rs); } }; class PlatformBase { call(methodName, p1, p2, p3, p4, p5, p6, p7, p8, p9) { var a = Array.prototype.slice.call(arguments); a.shift(); try { var rs = JSON.parse(conch.callMethod(this.objid, true, this.className, methodName, JSON.stringify(a)) || "{}"); return rs.v; } catch (e) { return null; } } callWithBack(callback, methodName, p1, p2, p3, p4, p5, p6, p7, p8, p9) { this.callBackList[methodName] = callback; var a = Array.prototype.slice.call(arguments); a.splice(0, 2); try { var rs = JSON.parse(conch.callMethod(this.objid, false, this.className, methodName, JSON.stringify(a)) || "{}"); return rs.v; } catch (e) { return null; } } } class PlatformClass extends PlatformBase { constructor(clsName) { super(); this.objid = -1; this.className = clsName; this.callBackList = {}; PlatformClass.clsMap[clsName] = this; } static createClass(clsName) { return PlatformClass.clsMap[clsName] || new PlatformClass(clsName); } newObject(p1, p2, p3, p4, p5, p6, p7, p8, p9) { var a = Array.prototype.slice.call(arguments); a.splice(0, 0, ""); var rs = new PlatformObj(this); rs.init.apply(rs, a); return rs; } } PlatformClass.clsMap = {}; class PlatformObj extends PlatformBase { constructor(cls) { super(); this.cls = cls; this.className = cls.className; this.callBackList = {}; } init() { this.objid = PlatformObj.objNum++; this.call.apply(this, arguments) || -1; PlatformObj.objMap[this.objid] = this; } } PlatformObj.objMap = {}; PlatformObj.objNum = 0; window["PlatformClass"] = PlatformClass; window["PlatformObj"] = PlatformObj; function loadRawCache(cache, relUrl, encode) { var cpath = cache.getCachePath(); var relFile = relUrl; var id = new Uint32Array([cache.hashstr(relFile)])[0].toString(16); var fn = cpath + '/files/' + id.substr(0, 2) + '/' + id.substr(2); var ab = fs_readFileSync(fn); if (ab) { var content = new Uint8Array(ab, 48); if (encode === 'utf8') { var strCont = String.fromCharCode.apply(null, content); return strCont; } else return content.buffer; } return null; } class textBitmap { constructor(obj) { this._nativeObj = obj; this._data = null; } get width() { return this._nativeObj.width; } get height() { return this._nativeObj.height; } get data() { return this._data; } set data(value) { this._data = value; } } window["textBitmap"] = textBitmap; class measureText { constructor() { this.width = 0; this.height = 0; } ; ; } class conchTextCanvas { constructor() { this.charSizeMap = new Map(); this._currentFont = null; this._nativeObj = window["_conchTextCanvas"]; } scale(x, y) { this._nativeObj.scale(x, y); } get font() { this._currentFont = this._nativeObj.font; return this._currentFont; } set font(value) { this._currentFont = value; this._nativeObj.font = value; } setFontInfo(font) { this._nativeObj.setFontInfo(font); } measureText(text) { if (!this._currentFont) { return null; } var measure = new measureText(); var widthCount = 0; var maxHeight = 0; var charCode = 0; var char = ""; var size = null; var dic = null; if (!text) { return this.measureText('undefined'); } for (var i = 0; i < text.length; i++) { char = text.charAt(i); charCode = text.charCodeAt(i); dic = this.charSizeMap.get(this._currentFont); if (!dic) { dic = new Map(); this.charSizeMap.set(this._currentFont.slice(0), dic); } if (charCode >= 0x4E00 && charCode <= 0x9FFF) { size = dic.get("国"); if (!size) { size = this._nativeObj.measureChar("国".charCodeAt(0)); dic.set("国", size); } } else { size = dic.get(char); if (!size) { size = this._nativeObj.measureChar(charCode); dic.set(char.slice(0), size); } } widthCount += size.width; maxHeight = size.height > maxHeight ? size.height : maxHeight; } measure.width = widthCount; measure.height = maxHeight; return measure; } initFreeTypeDefaultFontFromFile(defaultTTFs) { return this._nativeObj.initFreeTypeDefaultFontFromFile(defaultTTFs); } initFreeTypeDefaultFontFromBuffer(ab) { return this._nativeObj.initFreeTypeDefaultFontFromBuffer(ab); } setFontFaceFromUrl(fontFamily, TTFFileName) { return this._nativeObj.setFontFaceFromUrl(fontFamily, TTFFileName); } setFontFaceFromBuffer(fontFamily, ab) { return this._nativeObj.setFontFaceFromBuffer(fontFamily, ab); } removeFont(fontFamily) { return this._nativeObj.removeFont(fontFamily); } getTextBitmapData(sText, nColor, nBorderSize, nBorderColor) { var nativeObj = this._nativeObj._getTextBitmapData(sText, nColor, nBorderSize, nBorderColor); var pTextBitmap = new textBitmap(nativeObj); pTextBitmap.data = nativeObj.data; return pTextBitmap; } } window["conchTextCanvas"] = new conchTextCanvas; class WindowBase64 { constructor() { this.atob = function () { return null; }; this.btoa = function () { return null; }; } } window["WindowBase64"] = WindowBase64; function _process() { this.pid = 0; this.cwd = function () { return 'd:/temp'; }; this.mainModule = 'index.js'; this.argv = ['conch.exe', 'index.js']; this.version = '1.3.1'; this._require = function (f) { console.log('process require(' + f + ')'); return function nop() { }; }; this._debugObject = {}; } window.process = new _process(); class SubtleCrypto { decrypt(algorithm, key, data) { } deriveBits(algorithm, baseKey, length) { } deriveKey(algorithm, baseKey, derivedKeyType, extractable, keyUsages) { } digest(algorithm, data) { } encrypt(algorithm, key, data) { } exportKey(format, key) { } generateKey(algorithm, extractable, keyUsages) { } importKey(format, keyData, algorithm, extractable, keyUsages) { } sign(algorithm, key, data) { } unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages) { } verify(algorithm, key, signature, data) { } wrapKey(format, key, wrappingKey, wrapAlgorithm) { } } class Crypto { constructor() { this.subtle = new SubtleCrypto(); } getRandomValues(array) { return null; } } var LogLevel; (function (LogLevel) { LogLevel[LogLevel["Warn"] = 0] = "Warn"; LogLevel[LogLevel["Error"] = 1] = "Error"; LogLevel[LogLevel["Debug"] = 2] = "Debug"; LogLevel[LogLevel["Info"] = 3] = "Info"; LogLevel[LogLevel["Runtime"] = 4] = "Runtime"; })(LogLevel || (LogLevel = {})); class Console { constructor() { } assert(test, message) { var c = _console; if (test) { c.log(3, message); } ; } clear() { } count(countTitle) { } debug(message) { var c = _console; c.log(LogLevel.Debug, message); } dir(value) { } dirxml(value) { } error(message) { var c = _console; c.log(LogLevel.Error, message); } group(groupTitle) { } groupCollapsed(groupTitle) { } groupEnd() { } info(message) { var c = _console; c.log(LogLevel.Info, message); } log(message) { var c = _console; c.log(LogLevel.Info, message); } profile(reportName) { } profileEnd() { } select(element) { } time(timerName) { } timeEnd(timerName) { } trace(message) { } warn(message) { var c = _console; c.log(LogLevel.Warn, message); } } class GlobalEventHandlers { constructor() { } onpointercancel(ev) { return null; } onpointerdown(ev) { return null; } onpointerenter(ev) { return null; } onpointerleave(ev) { return null; } onpointermove(ev) { return null; } onpointerout(ev) { return null; } onpointerover(ev) { return null; } onpointerup(ev) { return null; } } class ErrorEvent { constructor() { } initErrorEvent(typeArg, canBubbleArg, cancelableArg, messageArg, filenameArg, linenoArg) { } } class Event { constructor(type, eventInitDict) { this._propagationStopped = false; this.type = type; this.timeStamp = Date.now(); this.bubbles = false; this.cancelable = false; this.eventPhase = Event.AT_TARGET; if (eventInitDict) { this.bubbles = eventInitDict.bubbles; this.cancelable = eventInitDict.cancelable; } } initEvent(eventTypeArg, canBubbleArg, cancelableArg) { this.type = eventTypeArg; this.bubbles = canBubbleArg; this.cancelable = cancelableArg; } preventDefault() { if (!this.cancelable) return; this.defaultPrevented = true; } stopImmediatePropagation() { } stopPropagation() { this._propagationStopped = true; } } Event.AT_TARGET = 2; Event.BUBBLING_PHASE = 3; Event.CAPTURING_PHASE = 1; var _lbEvent = window['Event'] = Event; var _lbMap = Map; class EventTarget { constructor() { this._evtMaps = new _lbMap(); this.removeEventListener = (type, listener, useCapture) => { var listeners = this._evtMaps.get(type); if (!listeners) return; var newlisteners = []; for (var i = 0, sz = listeners.length; i < sz; i++) { if (listeners[i].listener != listener || listeners[i].useCapture != useCapture) { newlisteners.push(listeners[i]); } } this._evtMaps.set(type, newlisteners); }; this.dispatchEvent = this._dispatchEvent.bind(this); this.fireEventListeners = this._fireEventListeners.bind(this); } addEventListener(type, listener, useCapture) { var listeners = this._evtMaps.get(type) || []; listeners.push({ obj: this, listener: listener, useCapture: useCapture }); this._evtMaps.set(type, listeners); } _dispatchEvent(evt) { this.fireEventListeners(evt); return !evt.defaultPrevented; } _fireEventListeners(evt) { var listeners = this._evtMaps.get(evt.type); if (listeners) { listeners.forEach(function (listener) { switch (evt.eventPhase) { case Event.CAPTURING_PHASE: if (listener.useCapture && listener.listener) listener.listener.call(listener.obj, evt); break; case Event.AT_TARGET: if (listener.listener) listener.listener.call(listener.obj, evt); break; case Event.BUBBLING_PHASE: if (!listener.useCapture && listener.listener) listener.listener.call(listener.obj, evt); break; } }); } } } class UIEvent extends Event { constructor(type, eventInitDict) { super(type); this.bubbles = true; if (eventInitDict) { this.initUIEvent(type, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.view, eventInitDict.detail); } } initUIEvent(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg) { this.type = typeArg; this.cancelable = canBubbleArg; this.cancelable = cancelableArg; this.view = viewArg; this.detail = detailArg; } } class PointerEvent { constructor(typeArg, eventInitDict) { } } class MouseEvent extends UIEvent { constructor(typeArg, eventInitDict) { super(typeArg, eventInitDict); if (eventInitDict) { for (var v in eventInitDict) { this[v] = eventInitDict[v]; } } } getModifierState(keyArg) { return false; } initMouseEvent(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, relatedTargetArg) { var args = arguments; ['type', 'bubbles', 'cancelable', 'view', 'detail', 'screenX', 'screenY', 'clientX', 'clientY', 'ctrlKey', 'altKey', 'shiftKey', 'metaKey', 'button', 'relatedTarget'].forEach((v, i, a) => { this[v] = args[i]; }); } } var _lbMouseEvent = window['MouseEvent'] = MouseEvent; class MouseWheelEvent extends MouseEvent { constructor() { super("mousewheel"); } initMouseWheelEvent(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, buttonArg, relatedTargetArg, modifiersListArg, wheelDeltaArg) { } } class WheelEvent extends MouseEvent { constructor(typeArg, eventInitDict) { super(typeArg, eventInitDict); if (eventInitDict) { this.deltaMode = eventInitDict.deltaMode; this.deltaX = eventInitDict.deltaX; this.deltaY = eventInitDict.deltaY; this.deltaZ = eventInitDict.deltaZ; } } getCurrentPoint(element) { } initWheelEvent(typeArg, canBubbleArg, cancelableArg, viewArg, detailArg, screenXArg, screenYArg, clientXArg, clientYArg, buttonArg, relatedTargetArg, modifiersListArg, deltaXArg, deltaYArg, deltaZArg, deltaMode) { } } WheelEvent.DOM_DELTA_LINE = 1; WheelEvent.DOM_DELTA_PAGE = 2; WheelEvent.DOM_DELTA_PIXEL = 0; class Touch { constructor() { } } class TouchList extends Array { item(index) { return this[index]; } } class DeviceMotionEvent extends Event { constructor() { super('devicemotion'); } initDeviceMotionEvent(type, bubbles, cancelable, acceleration, accelerationIncludingGravity, rotationRate, interval) { } } window["DeviceMotionEvent"] = DeviceMotionEvent; class DeviceOrientationEvent extends Event { constructor() { super('deviceorientation'); } initDeviceOrientationEvent(type, bubbles, cancelable, alpha, beta, gamma, absolute) { } } window["DeviceOrientationEvent"] = DeviceOrientationEvent; class DocumentEvent { constructor() { } createEvent(eventInterface) { return null; } } class ProgressEvent extends Event { constructor(type) { super(type); } initProgressEvent(typeArg, canBubbleArg, cancelableArg, lengthComputableArg, loadedArg, totalArg) { this.type = typeArg; this.cancelBubble = canBubbleArg; this.cancelable = cancelableArg; this.lengthComputable = lengthComputableArg; this.loaded = loadedArg; this.total = totalArg; } } var _lbProgressEvent = window["ProgressEvent"] = ProgressEvent; var VendorIDSource; (function (VendorIDSource) { VendorIDSource[VendorIDSource["bluetooth"] = 0] = "bluetooth"; VendorIDSource[VendorIDSource["usb"] = 1] = "usb"; })(VendorIDSource || (VendorIDSource = {})); ; class BluetoothDevice { connectGATT() { return null; } } class Bluetooth extends EventTarget { requestDevice(options) { return null; } } class Gamepad { } class GamepadEvent extends Event { } class Storage { constructor() { this.storagePath = conchConfig.getStoragePath(); this.filename = ''; this.db = {}; this._len = 0; } get length() { return this._len; } getItem(key) { return this.db[key] || null; } key(index) { var keys = Object.keys(this.db); keys.sort(); return keys[index] || null; } removeItem(key) { if (this.db[key]) this._len--; delete this.db[key]; this.savedb(); } _setItem(key, data) { if (this.db[key] == null) this._len++; this.db[key] = data; Object.defineProperty(this, key, { get: function () { return this.db[key]; }, enumerable: true, configurable: true }); } setItem(key, data) { this._setItem(key, data); this.savedb(); } create(url) { url = location.fullpath; if (location.protocol == "file:") { this.filename = url.substring(8).replace(/:/g, '_').replace(/[\\\/]/g, '__'); this.fileNamePre = this.storagePath + '/' + this.filename; } else { this.fileNamePre = this.storagePath + '/' + url.split('/')[2].replace(':', '_'); } this.filename = this.fileNamePre + '.txt'; var strdb = readFileSync(this.filename, 'utf8') || '{}'; var db = JSON.parse(strdb); for (var v in db) { this._setItem(v, db[v]); } return this; } onChange(changes) { if (changes && changes.length) { } } clear() { this.db = {}; this.savedb(); } savedb() { writeStrFileSync(this.filename, JSON.stringify(this.db)); } } window["Storage"] = Storage; class WindowLocalStorage { constructor() { this.localStorage = new Storage(); } } class WindowSessionStorage { getItem(i) { return this[i] || null; } setItem(i, b) { this[i] = b; } } window.loadLocalStorage = function (url) { return new Storage().create(url); }; class _Cookie { constructor() { this.domain = ""; } static addCookie(s) { var result = _Cookie.sreg.exec(s); if (result == null) { console.warn("设置cookie无效"); return null; } else { var temp = new _Cookie(); temp.key = result[1]; temp.value = result[2]; if (result[4]) { temp.expires = new Date(result[4]); } return temp; } } static pushCookie(c) { if (!c.isValid()) return false; for (var i = 0, len = _Cookie.cookies.length; i < len; i++) { var temp = _Cookie.cookies[i]; if (temp.key == c.key) { _Cookie.cookies[i] = c; return true; } } _Cookie.cookies.push(c); return true; } static flush() { writeStrFileSync(document._cookiePath, _Cookie.getString("in", "\"")); } static getString(type, joinstr) { var a = []; for (var i = 0, len = _Cookie.cookies.length; i < len; i++) { var temp = _Cookie.cookies[i]; if (temp.isValid()) { a.push(temp.toLocalString(type)); } else { _Cookie.cookies.slice(i, 1); i--; len--; } } return a.join(joinstr); } static toLocalString() { return _Cookie.getString("out", "; "); } isValid() { if (this.expires && (this.expires.getTime() < Date.now())) { return false; } return true; } static init(s) { if (s) { var temp = s.split("\""); for (var i = 0, len = temp.length; i < len; i++) { var t = _Cookie.addCookie(temp[i]); console.warn(">>>>>>>>>>addCookie" + temp[i]); if (t) { t.value = decodeURIComponent(t.value); t.domain = decodeURIComponent(t.domain); } _Cookie.pushCookie(t); } } } toLocalString(type) { switch (type) { case "in": return this.key + "=" + encodeURIComponent(this.value) + "; expires=" + this.expires.toGMTString() + "; domain=" + encodeURIComponent(this.domain); case "out": return this.key + "=" + this.value; default: return null; } } } _Cookie.cookies = []; _Cookie.sreg = new RegExp("([^=]*)\\s*=\\s*([^;]*)\\s*;\\s*(expires\\s*=\\s*(.{23,26}GMT)|)"); class KeyboardEvent extends UIEvent { constructor(typeArg, eventInitDict) { super(typeArg); if (eventInitDict) { var ini = eventInitDict; this.altKey = eventInitDict.altKey; this.initKeyboardEvent(typeArg, ini.bubbles, ini.cancelable, ini.view, ini.key, ini.location, null, ini.repeat, null); } } initKeyboardEvent(typeArg, canBubbleArg, cancelableArg, viewArg, keyArg, locationArg, modifiersListArg, repeat, locale) { this.type = typeArg; this.cancelable = canBubbleArg; this.cancelable = cancelableArg; this.key = keyArg; this.location = locationArg; this.locale = locale; } } KeyboardEvent.DOM_KEY_LOCATION_LEFT = 1; KeyboardEvent.DOM_KEY_LOCATION_NUMPAD = 3; KeyboardEvent.DOM_KEY_LOCATION_RIGHT = 2; KeyboardEvent.DOM_KEY_LOCATION_STANDARD = 0; var _lbKeyboardEvent = window["KeyboardEvent"] = KeyboardEvent; (function (layaDoc) { 'use strict'; var APP_TOUCH_DOWN = 0; var APP_TOUCH_UP = 1; var APP_TOUCH_MOV = 2; var APP_TOUCH_PT_DOWN = 5; var APP_TOUCH_PT_UP = 6; var m_vTouchs = []; class touchEvt extends UIEvent { constructor(type, id, name, x, y) { super(''); this.changedTouches = []; this.touches = []; this.targetTouches = this.changedTouches; var touch = new Touch(); touch.identifier = id; touch.pageX = touch.screenX = touch.clientX = x; touch.pageY = touch.screenY = touch.clientY = y; this.changedTouches.push(touch); switch (type) { case APP_TOUCH_DOWN: case APP_TOUCH_PT_DOWN: m_vTouchs.push(touch); break; case APP_TOUCH_PT_UP: { var epos = 0; var tnum = m_vTouchs.length; while (epos < tnum) { var ce = m_vTouchs[epos]; if (ce.identifier == id) { break; } epos++; } if (epos >= tnum) { } else { m_vTouchs.splice(epos, 1); } } break; case APP_TOUCH_MOV: { var tnum = m_vTouchs.length; var ti = 0; while (ti < tnum) { var ce = m_vTouchs[ti]; if (ce.identifier == id) { m_vTouchs[ti] = touch; break; } ti++; } } break; case APP_TOUCH_UP: m_vTouchs = []; break; } this.touches = m_vTouchs; switch (type) { case 0: case 5: this.type = "touchstart"; break; case 1: case 6: this.type = "touchend"; break; case 2: this.type = "touchmove"; break; } } } var joystickEvt = function (TL_xOffset, TL_yOffset, TR_xOffset, TR_yOffset, LT_Offset, RT_Offset) { this.THUMBL_xOffset = TL_xOffset; this.THUMBL_yOffset = TL_yOffset; this.THUMBR_xOffset = TR_xOffset; this.THUMBR_yOffset = TR_yOffset; this.LT_Offset = LT_Offset; this.RT_Offset = RT_Offset; }; var keyEvt = function (name, code, keychar, flag) { this.type = name; this.keyCode = code; this.keyChar = keychar; this.altKey = flag & 0x1; this.shiftKey = (flag & 0x2) != 0; this.ctrlKey = (flag & 0x4) != 0; this.preventDefault = function () { }; }; conch.setTouchEvtFunction((touchtype, id, etype, x, y) => { if (conch.disableMultiTouch && id != 0) return; var doc = window.document; if (!doc) { console.log('touch event cant dispatch!'); return; } var evt = new touchEvt(touchtype, id, etype, x, y); evt.target = doc.pickElement(x, y); doc.dispatchEvent(evt); }); function keyEventHandle() { var ke = new _lbKeyboardEvent(''); return function (type, keycode, keychar, AltShiftCtrl) { var doc = window.document; if (!doc) return; var keyinit = {}; var kc = String.fromCharCode(keycode); ke.defaultPrevented = false; ke._propagationStopped = false; ke.type = type; ke.key = kc; ke.keyCode = keycode; ke.altKey = (AltShiftCtrl & 0x4) != 0; ke.shiftKey = (AltShiftCtrl & 0x2) != 0; ke.ctrlKey = (AltShiftCtrl & 0x1) != 0; ke.target = doc._topElement; doc.dispatchEvent(ke); if (!ke.defaultPrevented) { var f = doc['on' + type]; if (f) { f.call(doc, ke); } } }; } conch.setKeyEvtFunction(keyEventHandle()); conch.setMouseEvtFunction(function (touchtype, type, x, y, wheel) { var doc = window.document; if (!doc) { console.log('mouse event cant dispatch!'); return; } var target = doc.pickElement(x, y); if (wheel != 0) { var evt1 = new MouseWheelEvent(); evt1.clientX = evt1.pageX = evt1.screenX = x; evt1.clientY = evt1.pageY = evt1.screenY = y; evt1.target = target; evt1.wheelDelta = wheel; doc.dispatchEvent(evt1); } else { var evt; switch (touchtype) { case 10: evt = new _lbMouseEvent("mousedown"); evt.button = 1; break; case 11: evt = new _lbMouseEvent("mouseup"); evt.button = 1; break; default: evt = new _lbMouseEvent(type); evt.button = 0; break; } evt.clientX = evt.pageX = evt.screenX = x; evt.clientY = evt.pageY = evt.screenY = y; evt.target = target; doc.dispatchEvent(evt); } }); conch.otherBuffer = new ArrayBuffer(40); conch.otherDataView = new DataView(conch.otherBuffer); conch.setBuffer(conch.otherBuffer); conch.setDeviceMotionEvtFunction(function (type, ra, rb, rg) { if ((typeof ra) != "undefined") { var e = new DeviceOrientationEvent(); e.alpha = ra; e.beta = rb; e.gamma = rg; window.dispatchEvent(e); } else { var d = conch.otherDataView; var evt = new DeviceMotionEvent(); evt.acceleration = { x: d.getFloat32(0, true), y: d.getFloat32(4, true), z: d.getFloat32(8, true) }; evt.accelerationIncludingGravity = { x: d.getFloat32(12, true), y: d.getFloat32(16, true), z: d.getFloat32(20, true) }; evt.rotationRate = { alpha: d.getFloat32(24, true), beta: d.getFloat32(28, true), gamma: d.getFloat32(32, true) }; evt.interval = d.getFloat32(36, true); window.dispatchEvent(evt); } }); setJoystickEvtFunction(function (type, thumbL_xoff, thumbL_yoff, thumbR_xoff, thumbR_yoff, LT_offset, RT_offset) { }); conch.setNetworkEvtFunction(function (type) { var event = new Event("network"); event["code"] = type; document.dispatchEvent(event); }); })(window.document); class Navigator { constructor() { } get appName() { return 'Netscape'; } get appVersion() { return this.userAgent; } ; get platform() { return window.layabox.devinfo.os; } ; get userAgent() { var os = window.layabox.devinfo.os; if (os == "ios") return "LayaBox(iPhone; CPU iPhone OS Mac OS X)"; else if (os == "android") return "LayaBox Android"; else return 'LayaBox/2.1'; } ; get sv() { var v = window.layabox.devinfo.osversion; var t = parseFloat(v); if (isNaN(t)) { t = v.charCodeAt(0) - 71; } return t; } ; get appCodeName() { return 'Mozilla'; } get language() { return 'zh-CN'; } ; get userLanguage() { return 'zh-CN'; } getGamepads() { return null; } javaEnabled() { return false; } vibrate(pattern) { return false; } addEventListener(type, listener, useCapture) { } } class Node extends EventTarget { constructor() { super(); this._childs = []; this._zip = 0; this._z = 0; this.nodeType = 1; this._zip = Node._nodeid++; } get firstChild() { return this._childs ? this._childs[0] : null; } set firstChild(node) { } get childNodes() { return this._childs; } set childNodes(nodes) { } insertBefore(newChild, oldChild) { this.appendChild(newChild); } appendChild(newChild) { if (newChild == null) return null; if (newChild == this) return; if (this._childs.indexOf(newChild) < 0) { this._childs.push(newChild); } newChild.parentNode = this; newChild._z = this._z + 1; var doc = newChild.ownerDocument || this.ownerDocument; if (doc && newChild._z >= doc._topElement._z && newChild instanceof HTMLCanvasElement && !(window.document._topElement instanceof HTMLCanvasElement)) { var ele = newChild; if (ele.__visible) { window.document._topElement = newChild; } } return newChild; } cloneNode(deep) { if (deep) { deep = false; } function clone(obj) { if (typeof (obj) != 'object' || obj == null) return obj; var newObj = Object.create(obj.__proto__); for (var i in obj) { if (!deep) newObj[i] = obj[i]; else newObj[i] = clone(obj[i]); } return newObj; } return clone(this); } removeChild(oldChild) { var p = this._childs.indexOf(oldChild); if (p >= 0) { this._childs.splice(p, 1); if (window.document._topElement == oldChild) window.document._topElement = oldChild.parentElement; oldChild.parentNode = null; oldChild.parentElement = null; return oldChild; } else return null; } getAncestorsNode() { var ret = new Array(); var obj = this; while (obj.parentNode) { ret.push(obj.parentNode); obj = obj.parentNode; } return ret; } } Node._nodeid = 0; class NodeSelector { querySelector(selectors) { return null; } querySelectorAll(selectors) { return []; } } class ChildNode { constructor() { } remove() { } } class ElementTraversal { constructor() { } } class Element extends Node { constructor() { super(); this.__visible = true; } set id(s) { this._id = s; document.all.push(this); } get id() { return this._id; } setAttribute(name, value) { if (!this._attribs) this._attribs = []; this._attribs[name] = value; } getAttribute(name) { return this._attribs ? this._attribs[name] : null; } } applyMixins(Element, [Node, GlobalEventHandlers, ElementTraversal, NodeSelector, ChildNode]); var ns_Timer; (function (ns_Timer) { class timerobj { constructor(curtm, interval, obj, func, args, num) { this.del = false; this.interval = (interval < 18) ? -1 : interval; if (Math.abs(conch.maxInterval - interval) < 1) this.interval = -1; this.tm = curtm + interval; this.obj = obj; this.func = func; this.args = args; this.num = num; } } var timerqueue = function () { this.AniFrame = []; this.tmq = new Array(); this.addTimer = function (tm, obj, func, args, num) { var tmobj = new timerobj(Date.now(), tm, obj, func, args, num); this.tmq.push(tmobj); return tmobj; }; this.delTimer = function (obj) { for (var i = 0, sz = this.tmq.length; i < sz; i++) { if (this.tmq[i] === obj) { this.tmq[i].del = true; break; } } }; this.update = function () { this.curtm = Date.now(); var i = 0; var btmq = []; for (var sz = this.tmq.length; i < sz; i++) { var ctm = this.tmq[i]; if (ctm.del) continue; var dt = ctm.tm - this.curtm; if (dt < 0 || ctm.interval < 0 || Math.abs(conch.maxInterval - ctm.interval) < 1) { if (typeof (ctm.func) === 'function') { ctm.func.apply(null, ctm.obj); } else { eval(ctm.func); } if (ctm.num < 0 || --ctm.num > 0) { if (dt < 0) dt = 0; ctm.tm = dt + this.curtm + ctm.interval; btmq.push(ctm); } } else { btmq.push(ctm); } } this.tmq.splice(0, sz); this.tmq = this.tmq.concat(btmq); }; }; var gTimerQueue = new timerqueue(); class _WindowTimersExtension { clearImmediate(handle) { } setImmediate(expression) { return 0; } } ns_Timer._WindowTimersExtension = _WindowTimersExtension; class _WindowTimers extends _WindowTimersExtension { constructor() { super(); } clearInterval(handle) { gTimerQueue.delTimer(handle); } clearTimeout(handle) { gTimerQueue.delTimer(handle); } setInterval(handler, timeout, parm) { var b = _WindowTimers.ET; if (arguments.length > 2) { b = Array.prototype.slice.call(arguments); b.splice(0, 2); handler.arg = b; } return gTimerQueue.addTimer(timeout, b, handler, null, -1); } setTimeout(handler, timeout, parm) { if (!timeout) timeout = 0; var b = _WindowTimers.ET; if (arguments.length > 2) { b = Array.prototype.slice.call(arguments); b.splice(0, 2); handler.arg = b; } return gTimerQueue.addTimer(timeout, b, handler, null, 1); } } _WindowTimers.ET = []; ns_Timer._WindowTimers = _WindowTimers; var animfrm = 0; function requestAnimationFrame(callback) { var id = animfrm++; gTimerQueue.AniFrame.push({ id: id, func: callback }); if (!gTimerQueue.AniFrameStTm) gTimerQueue.AniFrameStTm = Date.now(); return id; } ns_Timer.requestAnimationFrame = requestAnimationFrame; function cancelAnimationFrame(handle) { } ns_Timer.cancelAnimationFrame = cancelAnimationFrame; var framCount = 0; var fpsTimeout = 0; conch.setOnFrame(function () { if (framCount % 30 == 0) { var cur = Date.now(); var space = (cur - fpsTimeout) / 30; fpsTimeout = cur; window["conchFps"] && window["conchFps"].render(Math.round(1000 / space)); } framCount++; gTimerQueue.update(); if (document) document.onframeend(); }); conch.setOnDraw((vsync) => { var curAnimFrms = gTimerQueue.AniFrame; gTimerQueue.AniFrame = []; curAnimFrms.forEach(function (af) { if (af.del) return; af.func(vsync); }); }); })(ns_Timer || (ns_Timer = {})); var WindowTimers = ns_Timer._WindowTimers; var requestAnimationFrame = ns_Timer.requestAnimationFrame; var cancelAnimationFrame = ns_Timer.cancelAnimationFrame; class Location { constructor() { this._nativeObj = conch; this.setHref = (url) => { if (!url || url.length < 8) { alert("您的地址不符合要求"); return; } var s = new RegExp("(http|file|https)://([^/:]*)(:(\\d+)|)([^?]+)(.*|)", "g"); var result; if ((result = s.exec(url)) != null) { this._href = result[0]; this._hostname = result[2]; this._host = result[2] + result[3]; this._pathname = result[5]; this._port = result[4]; this._search = result[6]; this._protocol = result[1] + ":"; this._origin = this._protocol + "//" + this._host; var i = this._pathname ? this._pathname.lastIndexOf("/") : -1; if (i != -1) { var temp = this._pathname.substring(0, i); this._fullpath = this._origin + temp; } else { this._fullpath = this._origin + this._pathname; } } else { alert("您的地址不符合要求"); } this.bk_setHref(url); window.localStorage.create(this._fullpath + '/'); }; this.bk_setHref = this._nativeObj.setHref.bind(this._nativeObj); } get hostname() { return this._hostname; } get host() { return this._host; } get fullpath() { return this._fullpath; } get pathname() { return this._pathname; } get protocol() { return this._protocol; } get search() { return this._search; } get port() { return this._port; } get origin() { return this._origin; } get href() { return this._href; } set href(url) { url = this.normalizeUrl(url); var oldhref = this._href; if (url != oldhref) { this.setHref(url); if (this._href != oldhref) reloadJS(true); } } setBaseHref(basehref) { } getBaseHref() { return ""; } assign(url) { } reload(forcedReload) { reloadJS(forcedReload); } replace(url) { } toString() { return this._href; } normalizeUrl(url) { url = url.replace(/\\/g, '/'); if (url[0] === '/') url = 'file://' + url; else if (url[1] === ':') url = 'file:///' + url; return url.trim(); } parseQuery(url) { var ret = {}; var p1 = url.indexOf('?'); if (p1 < 0) return null; var q = url.substr(p1 + 1); q && q.split('&').forEach((v, i, a) => { var kv = v.split('='); if (kv.length === 2) { ret[kv[0].trim()] = kv[1].trim(); } }); return ret; } resolve(fileName) { var urlcache = Location.__urlCache__[fileName]; if (urlcache != null) return urlcache; if (fileName == null) { return ""; } if (fileName.indexOf("//") == 0) { return this.protocol + fileName; } if (fileName.indexOf("file:///") == 0 || fileName.indexOf("http://") == 0 || fileName.indexOf("https://") == 0) return fileName; if ((fileName.charAt(1) == ':' && fileName.charAt(2) == '/')) fileName = "file://" + fileName; if (fileName.charAt(0) == "/") { return this._origin + fileName; } var basePath = this._fullpath; var urlfull = basePath + "/" + fileName; urlcache = Location.__urlCache__[urlfull]; if (urlcache != null) return urlcache; if (fileName.indexOf("://") < 0) fileName = basePath + "/" + fileName; var urls = fileName.split("/"); urls[1] = ""; var str, i = 2, size = urls.length; while (i < size) { str = urls[i]; if (str == null) break; if (str == '' || str == '.') { urls.splice(i, 1); continue; } if (str == "..") { if (i <= 3 && this._protocol != "file:") { urls.splice(i, 1); } else { urls.splice(i - 1, 2); i -= 1; } continue; } i += 1; } fileName = urls.join("/"); Location.__urlCache__[fileName] = fileName; Location.__urlCache__[urlfull] = fileName; return fileName; } } Location.__urlCache__ = {}; function applyMixins(derivedCtor, baseCtors) { baseCtors.forEach(baseCtor => { Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { if (name !== 'constructor') { derivedCtor.prototype[name] = baseCtor.prototype[name]; } }); }); } class IDBEnvironment { } class _Window extends EventTarget { constructor() { super(); this.timer = new WindowTimers(); this.clearInterval = this.timer.clearInterval; this.clearTimeout = this.timer.clearTimeout; this.setInterval = this.timer.setInterval; this.setTimeout = this.timer.setTimeout; this._removeEventListener = this.removeEventListener; this.removeEventListener = this.removeEventListenernew; } addEventListener(type, listener, useCapture) { if (type == "devicemotion" || type == "deviceorientation") { conch.setSensorAble(true); } super.addEventListener(type, listener, useCapture); } removeEventListenernew(type, listener, useCapture) { this._removeEventListener(type, listener, useCapture); if (type == "devicemotion" || type == "deviceorientation") { var de = this._evtMaps.get("devicemotion"); var deo = this._evtMaps.get("deviceorientation"); if ((!de || de.length == 0) && (!deo || deo.length == 0)) { conch.setSensorAble(false); } } } } class XMLHttpRequest extends EventTarget { constructor() { super(); this._hasReqHeader = false; this.withCredentials = false; this.setResponseHeader = function (name, value) { this._head = value; }; this.xhr = new _XMLHttpRequest(); this._readyState = 0; this._responseText = this._response = this._responseType = this._url = ""; this._responseType = "text"; this._method = "GET"; this.xhr._t = this; this.xhr.set_onreadystatechange(function (r) { var _t = this._t; if (r == 1) { _t._readyState = 1; } if (_t._onrchgcb) { var e = new _lbEvent("readystatechange"); e.target = _t; _t._onrchgcb(e); } var ev; if (_t._status == 200) { ev = new _lbEvent("load"); ev.target = _t; _t.dispatchEvent(ev); } else if (_t._status == 404) { ev = new _lbEvent("error"); ev.target = _t; _t.dispatchEvent(ev); } }); } setRequestHeader(name, value) { this.xhr.setRequestHeader(name, value); this._hasReqHeader = true; } getAllResponseHeaders() { return this._head; } get responseText() { return this._responseText; } get response() { return this._response; } get responseType() { return this._responseType; } set responseType(type) { this._responseType = type; if (type == 'blob') { this.xhr.responseTypeCode = 4; } else if (type == 'arraybuffer') { this.xhr.responseTypeCode = 5; } else { this.xhr.responseTypeCode = 1; } } get url() { return this._url; } get async() { return this._async; } get readyState() { return this._readyState; } get status() { return this._status; } _loadsus() { var e = new _lbEvent("load"); e.target = this; this._onloadcb(e); } set onreadystatechange(listen) { this._onrchgcb = listen; if (listen == null) return; if (this._readyState != 0) { var e = new _lbEvent("readystatechange"); e.target = this; this._onrchgcb(e); } } get onreadystatechange() { return this._onrchgcb; } set onload(listen) { this._onloadcb = listen; if (listen == null) return; if (this._readyState == 4 && this._status == 200) { this._loadsus(); } } get onload() { return this._onloadcb; } getResponseHeader() { return this._head; } open(type, url, async) { console.log('xhr.' + type + ' url=' + url); if (!url) return; type = type.toUpperCase(); async = true; url = location.resolve(url); this._method = (type === 'POST' ? 'POST' : 'GET'); this._url = url; this._async = (async == null || async == undefined || async == true) ? true : false; this.xhr._open(this._method, this._url, this._async); } overrideMimeType(mime) { if (this._responseType == "text" || this._responseText == "") this._responseType = "arraybuffer"; this.xhr.mimeType = "1"; } send(body) { if (body) { if (body instanceof ArrayBuffer || ArrayBuffer.isView(body) || body instanceof DataView) this._responseType = 'arraybuffer'; else if (body instanceof Object) { body = JSON.stringify(body); } } this.xhr._t = this; var onPostLoad = function (buf, strbuf) { var _t = this._t; if (_t.responseType == 'arraybuffer') { _t._response = buf; _t._responseText = strbuf; } else { _t._response = _t._responseText = buf; } _t._readyState = 4; _t._status = 200; _t.xhr._changeState(4); if (_t._onloadcb) { _t._loadsus(); } onPostLoad.ref = onPostError.ref = null; }; var onPostError = function (e1, e2) { var _t = this._t; _t._readyState = 4; _t._status = 404; _t.xhr._changeState(4); if (_t.onerror) { var ev = new _lbEvent("error"); ev.target = _t; ev['ecode1'] = e1; ev['ecode2'] = e2; _t.onerror(ev); } onPostLoad.ref = onPostError.ref = null; }; if (this._method == 'POST' && body) { onPostLoad.ref = onPostError.ref = this.xhr; this.xhr.setPostCB(onPostLoad, onPostError); this.xhr.postData(this.url, body); } else if (this._hasReqHeader) { onPostLoad.ref = onPostError.ref = this.xhr; this.xhr.setPostCB(onPostLoad, onPostError); this.xhr.getData(this.url); } else { var file = new conch_File(this.url); var fileRead = new FileReader(); fileRead.sync = !this.async; if (this._responseType == "text" || this._responseType == "TEXT") { fileRead.responseType = 0; } else if (this._responseType == "arraybuffer") { fileRead.responseType = 1; } else { console.log("XMLhttpRequest 暂不支持的类型 responseType=" + this.responseType); } fileRead._t = this; fileRead.onload = function () { var _t = this._t; if (_t._responseType == "arraybuffer") { _t._response = this.result; } else { _t._response = _t._responseText = this.result; if (_t._responseType == "json") { _t._response = JSON.parse(this.result); } } if (_t.xhr.mimeType) { var u8arr = new Uint8Array(_t._response); var strret = ""; u8arr.forEach((v, i, arr) => { if (v >= 0x80) { strret += String.fromCharCode(0xf700 | v); } else if (v == 0) { strret += '\0'; } else { strret += String.fromCharCode(v); } }); _t._responseText = strret; } _t._readyState = 4; _t._status = 200; _t.xhr._changeState(4); if (_t._onloadcb) { _t._loadsus(); } fileRead.onload = null; fileRead.onerror = null; }; fileRead.onerror = function () { var _t = this._t; _t._readyState = 4; _t._status = 404; _t.xhr._changeState(4); if (_t.onerror) { var ev = new _lbEvent("error"); ev.target = _t; _t.onerror(ev); } fileRead.onload = null; fileRead.onerror = null; }; if (this.onerror) { fileRead.setIgnoreError(true); } if (this.responseType == "arraybuffer") fileRead.readAsArrayBuffer(file); else fileRead.readAsText(file); } } } XMLHttpRequest.UNSENT = 0; XMLHttpRequest.OPENED = 1; XMLHttpRequest.HEADERS_RECEIVED = 2; XMLHttpRequest.LOADING = 3; XMLHttpRequest.DONE = 4; window.XMLHttpRequest = XMLHttpRequest; class CanvasRenderingContext { constructor(c) { this.canvas = c; this.gl = LayaGLContext.instance; } setSize(w, h) { if (this._width != w || this._height != h) { this._width = w; this._height = h; if (this.canvas._isFirst) { this.gl.setMainContextSize(this._width, this._height); } } } clear() { this.gl.clearColor(0, 0, 0, 0); this.gl.clear(LayaGLContext.COLOR_BUFFER_BIT | LayaGLContext.DEPTH_BUFFER_BIT | LayaGLContext.STENCIL_BUFFER_BIT); } toBase64(type, encoderOptions, callback) { } getImageData(x, y, w, h, callBack) { } drawImage(...args) { } destroy() { this.canvas = null; this.gl = null; } set font(fontName) { window["_conchTextCanvas"].font = fontName; } get font() { return window["_conchTextCanvas"].font; } } window["CanvasRenderingContext"] = CanvasRenderingContext; class ColorUtil { static getColorNum(str) { if (!str) return 0; if (typeof (str) == "number") { if (str >= 0xFFFFFF) return str; return str | 0xFF000000; } var len; if (str[0] == "#") { var r = ColorUtil.getRGBByRGBStr(str); if (r) { return parseInt(r, 16); } else return NaN; } else if (str.indexOf("rgb") != -1) { return ColorUtil.getColNum(str, true); } else if (str.indexOf("hsl") != -1) { return ColorUtil.getColNum(str, false); } else { var c = ColorUtil._COLOR_MAP[str]; return c ? ColorUtil.getColorNum(c) : NaN; } } static getColNum(c, isRgb) { var temp, i, s, result = [], st; var t = isRgb ? ColorUtil.RGBReg.exec(c) : ColorUtil.HSLReg.exec(c); if (t) { var r = t[2].split(","); i = 0; s = r.length; while (i < s) { result[i] = parseFloat(r[i]); i++; } var ta = result; if (!isRgb) { ta = ColorUtil.hsl2rgb(result[0] / 360, result[1] / 100, result[2] / 100); } if (i == 3 && !t[1]) { return 0xff000000 + (ta[0] << 16) + (ta[1] << 8) + ta[2]; } else if (i == 4 && t[1]) { return parseInt(Math.floor(0xff * result[3]).toString(16) + "000000", 16) + (ta[0] << 16) + (ta[1] << 8) + ta[2]; } return NaN; } else return NaN; } static getRGBByRGBStr(str) { str = str.substr(1); var i, len = str.length, result; switch (len) { case 3: result = "ff"; for (i = 0; i < len; i++) { result += str[i] + str[i]; } break; case 6: result = "ff" + str; default: break; } return result; } static toHexColor(color) { if (color < 0 || isNaN(color)) return null; if (color > 0xff000000) { color -= 0xff000000; } else { return "rgba(" + (color >> 16 & 0xff) + "," + (color >> 8 & 0xff) + "," + (color & 0xff) + "," + ((color >> 24 & 0xff) / 0xff) + ")"; } var str = color.toString(16); while (str.length < 6) str = "0" + str; return "#" + str; } static hsl2rgb(h, s, l) { var r, g, b; if (s == 0) { r = g = b = l; } else { function hue2rgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1 / 6) return p + (q - p) * 6 * t; if (t < 1 / 2) return q; if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; return p; } var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1 / 3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1 / 3); } return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; } } ColorUtil._COLOR_MAP = { "white": '#FFFFFF', "red": '#FF0000', "green": '#00FF00', "blue": '#0000FF', "black": '#000000', "yellow": '#FFFF00', 'gray': '#AAAAAA' }; ColorUtil.RGBReg = new RegExp("rgb([a]{0,1})\\s*[(]([\\d,.\\s-]*)?[)]"); ColorUtil.HSLReg = new RegExp("hsl([a]{0,1})\\s*[(]([\\d,.\\s-%]*)?[)]"); class ProgramLocationTable { constructor() { this._fakeLocationNum = 0; this._map = {}; } getFakeLocation(fakeProgramID, name) { var key = fakeProgramID + "-" + name; var fakeID = this._map[key]; if (!fakeID) { fakeID = this._fakeLocationNum++; this._map[key] = fakeID; } return fakeID; } } var FUNCTION_ID; (function (FUNCTION_ID) { FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX2FVEX"] = 0] = "UNIFORMMATRIX2FVEX"; FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX3FVEX"] = 1] = "UNIFORMMATRIX3FVEX"; FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX4FVEX"] = 2] = "UNIFORMMATRIX4FVEX"; FUNCTION_ID[FUNCTION_ID["ADDSHADERUNIFORM"] = 3] = "ADDSHADERUNIFORM"; FUNCTION_ID[FUNCTION_ID["UPLOADSHADERUNIFORMS"] = 4] = "UPLOADSHADERUNIFORMS"; FUNCTION_ID[FUNCTION_ID["UPLOADSHADERUNIFORMS_BUFFER"] = 5] = "UPLOADSHADERUNIFORMS_BUFFER"; FUNCTION_ID[FUNCTION_ID["USECOMMANDENCODER"] = 6] = "USECOMMANDENCODER"; FUNCTION_ID[FUNCTION_ID["LOADDATATOREG"] = 7] = "LOADDATATOREG"; FUNCTION_ID[FUNCTION_ID["LOADDATATOREGEX"] = 8] = "LOADDATATOREGEX"; FUNCTION_ID[FUNCTION_ID["IFLESS0"] = 9] = "IFLESS0"; FUNCTION_ID[FUNCTION_ID["IFEQUAL0"] = 10] = "IFEQUAL0"; FUNCTION_ID[FUNCTION_ID["IFGREATER0"] = 11] = "IFGREATER0"; FUNCTION_ID[FUNCTION_ID["IFLEQUAL0"] = 12] = "IFLEQUAL0"; FUNCTION_ID[FUNCTION_ID["IFGEQUAL0"] = 13] = "IFGEQUAL0"; FUNCTION_ID[FUNCTION_ID["IFGNOTEQUAL0"] = 14] = "IFGNOTEQUAL0"; FUNCTION_ID[FUNCTION_ID["OPERATEREG"] = 15] = "OPERATEREG"; FUNCTION_ID[FUNCTION_ID["STORE"] = 16] = "STORE"; FUNCTION_ID[FUNCTION_ID["CREATEIMAGEONRENDERTHREAD"] = 64] = "CREATEIMAGEONRENDERTHREAD"; FUNCTION_ID[FUNCTION_ID["DELETE_IMAGE_ON_RENDER_THREAD"] = 65] = "DELETE_IMAGE_ON_RENDER_THREAD"; FUNCTION_ID[FUNCTION_ID["RELEASE_IMAGE_ON_RENDER_THREAD"] = 66] = "RELEASE_IMAGE_ON_RENDER_THREAD"; FUNCTION_ID[FUNCTION_ID["SET_IMAGE_RELEASE_SPACE_TIME"] = 67] = "SET_IMAGE_RELEASE_SPACE_TIME"; FUNCTION_ID[FUNCTION_ID["SET_PREMULTIPLY_ALPHA"] = 68] = "SET_PREMULTIPLY_ALPHA"; FUNCTION_ID[FUNCTION_ID["PERFADDDATA"] = 69] = "PERFADDDATA"; FUNCTION_ID[FUNCTION_ID["PERFUPDATEDT"] = 70] = "PERFUPDATEDT"; FUNCTION_ID[FUNCTION_ID["SET_MAIN_CONTEXT_SIZE"] = 71] = "SET_MAIN_CONTEXT_SIZE"; FUNCTION_ID[FUNCTION_ID["GETCONTEXTATTRIBUTES"] = 128] = "GETCONTEXTATTRIBUTES"; FUNCTION_ID[FUNCTION_ID["ISCONTEXTLOST"] = 129] = "ISCONTEXTLOST"; FUNCTION_ID[FUNCTION_ID["GETSUPPORTEDEXTENSIONS"] = 130] = "GETSUPPORTEDEXTENSIONS"; FUNCTION_ID[FUNCTION_ID["GETEXTENSION"] = 131] = "GETEXTENSION"; FUNCTION_ID[FUNCTION_ID["ACTIVETEXTURE"] = 132] = "ACTIVETEXTURE"; FUNCTION_ID[FUNCTION_ID["ATTACHSHADER"] = 133] = "ATTACHSHADER"; FUNCTION_ID[FUNCTION_ID["BINDATTRIBLOCATION"] = 134] = "BINDATTRIBLOCATION"; FUNCTION_ID[FUNCTION_ID["BINDBUFFER"] = 135] = "BINDBUFFER"; FUNCTION_ID[FUNCTION_ID["BINDFRAMEBUFFER"] = 136] = "BINDFRAMEBUFFER"; FUNCTION_ID[FUNCTION_ID["BINDRENDERBUFFER"] = 137] = "BINDRENDERBUFFER"; FUNCTION_ID[FUNCTION_ID["BINDTEXTURE"] = 138] = "BINDTEXTURE"; FUNCTION_ID[FUNCTION_ID["USETEXTURE"] = 139] = "USETEXTURE"; FUNCTION_ID[FUNCTION_ID["BLENDCOLOR"] = 140] = "BLENDCOLOR"; FUNCTION_ID[FUNCTION_ID["BLENDEQUATION"] = 141] = "BLENDEQUATION"; FUNCTION_ID[FUNCTION_ID["BLENDEQUATIONSEPARATE"] = 142] = "BLENDEQUATIONSEPARATE"; FUNCTION_ID[FUNCTION_ID["BLENDFUNC"] = 143] = "BLENDFUNC"; FUNCTION_ID[FUNCTION_ID["BLENDFUNCSEPARATE"] = 144] = "BLENDFUNCSEPARATE"; FUNCTION_ID[FUNCTION_ID["BUFFERDATA_SIZE"] = 145] = "BUFFERDATA_SIZE"; FUNCTION_ID[FUNCTION_ID["BUFFERDATA_ARRAYBUFFER"] = 146] = "BUFFERDATA_ARRAYBUFFER"; FUNCTION_ID[FUNCTION_ID["BUFFERSUBDATA"] = 147] = "BUFFERSUBDATA"; FUNCTION_ID[FUNCTION_ID["CHECKFRAMEBUFFERSTATUS"] = 148] = "CHECKFRAMEBUFFERSTATUS"; FUNCTION_ID[FUNCTION_ID["CLEAR"] = 149] = "CLEAR"; FUNCTION_ID[FUNCTION_ID["CLEARCOLOR"] = 150] = "CLEARCOLOR"; FUNCTION_ID[FUNCTION_ID["CLEARDEPTH"] = 151] = "CLEARDEPTH"; FUNCTION_ID[FUNCTION_ID["CLEARSTENCIL"] = 152] = "CLEARSTENCIL"; FUNCTION_ID[FUNCTION_ID["COLORMASK"] = 153] = "COLORMASK"; FUNCTION_ID[FUNCTION_ID["COMPILESHADER"] = 154] = "COMPILESHADER"; FUNCTION_ID[FUNCTION_ID["COPYTEXIMAGE2D"] = 155] = "COPYTEXIMAGE2D"; FUNCTION_ID[FUNCTION_ID["COPYTEXSUBIMAGE2D"] = 156] = "COPYTEXSUBIMAGE2D"; FUNCTION_ID[FUNCTION_ID["CREATEBUFFER"] = 157] = "CREATEBUFFER"; FUNCTION_ID[FUNCTION_ID["CREATEFRAMEBUFFER"] = 158] = "CREATEFRAMEBUFFER"; FUNCTION_ID[FUNCTION_ID["CREATEPROGRAM"] = 159] = "CREATEPROGRAM"; FUNCTION_ID[FUNCTION_ID["CREATERENDERBUFFER"] = 160] = "CREATERENDERBUFFER"; FUNCTION_ID[FUNCTION_ID["CREATESHADER"] = 161] = "CREATESHADER"; FUNCTION_ID[FUNCTION_ID["CREATETEXTURE"] = 162] = "CREATETEXTURE"; FUNCTION_ID[FUNCTION_ID["CULLFACE"] = 163] = "CULLFACE"; FUNCTION_ID[FUNCTION_ID["DELETEBUFFER"] = 164] = "DELETEBUFFER"; FUNCTION_ID[FUNCTION_ID["DELETEFRAMEBUFFER"] = 165] = "DELETEFRAMEBUFFER"; FUNCTION_ID[FUNCTION_ID["DELETEPROGRAM"] = 166] = "DELETEPROGRAM"; FUNCTION_ID[FUNCTION_ID["DELETERENDERBUFFER"] = 167] = "DELETERENDERBUFFER"; FUNCTION_ID[FUNCTION_ID["DELETESHADER"] = 168] = "DELETESHADER"; FUNCTION_ID[FUNCTION_ID["DELETETEXTURE"] = 169] = "DELETETEXTURE"; FUNCTION_ID[FUNCTION_ID["DEPTHFUNC"] = 170] = "DEPTHFUNC"; FUNCTION_ID[FUNCTION_ID["DEPTHMASK"] = 171] = "DEPTHMASK"; FUNCTION_ID[FUNCTION_ID["DEPTHRANGE"] = 172] = "DEPTHRANGE"; FUNCTION_ID[FUNCTION_ID["DETACHSHADER"] = 173] = "DETACHSHADER"; FUNCTION_ID[FUNCTION_ID["DISABLE"] = 174] = "DISABLE"; FUNCTION_ID[FUNCTION_ID["DISABLEVERTEXATTRIBARRAY"] = 175] = "DISABLEVERTEXATTRIBARRAY"; FUNCTION_ID[FUNCTION_ID["DRAWARRAYS"] = 176] = "DRAWARRAYS"; FUNCTION_ID[FUNCTION_ID["DRAWELEMENTS"] = 177] = "DRAWELEMENTS"; FUNCTION_ID[FUNCTION_ID["ENABLE"] = 178] = "ENABLE"; FUNCTION_ID[FUNCTION_ID["ENABLEVERTEXATTRIBARRAY"] = 179] = "ENABLEVERTEXATTRIBARRAY"; FUNCTION_ID[FUNCTION_ID["FINISH"] = 180] = "FINISH"; FUNCTION_ID[FUNCTION_ID["FLUSH"] = 181] = "FLUSH"; FUNCTION_ID[FUNCTION_ID["FRAMEBUFFERRENDERBUFFER"] = 182] = "FRAMEBUFFERRENDERBUFFER"; FUNCTION_ID[FUNCTION_ID["FRAMEBUFFERTEXTURE2D"] = 183] = "FRAMEBUFFERTEXTURE2D"; FUNCTION_ID[FUNCTION_ID["FRONTFACE"] = 184] = "FRONTFACE"; FUNCTION_ID[FUNCTION_ID["GENERATEMIPMAP"] = 185] = "GENERATEMIPMAP"; FUNCTION_ID[FUNCTION_ID["GETACTIVEATTRIB"] = 186] = "GETACTIVEATTRIB"; FUNCTION_ID[FUNCTION_ID["GETACTIVEUNIFORM"] = 187] = "GETACTIVEUNIFORM"; FUNCTION_ID[FUNCTION_ID["GETATTRIBLOCATION"] = 188] = "GETATTRIBLOCATION"; FUNCTION_ID[FUNCTION_ID["GETPARAMETER"] = 189] = "GETPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETBUFFERPARAMETER"] = 190] = "GETBUFFERPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETERROR"] = 191] = "GETERROR"; FUNCTION_ID[FUNCTION_ID["GETFRAMEBUFFERATTACHMENTPARAMETER"] = 192] = "GETFRAMEBUFFERATTACHMENTPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETPROGRAMPARAMETER"] = 193] = "GETPROGRAMPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETPROGRAMINFOLOG"] = 194] = "GETPROGRAMINFOLOG"; FUNCTION_ID[FUNCTION_ID["GETRENDERBUFFERPARAMETER"] = 195] = "GETRENDERBUFFERPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETSHADERPRECISIONFORMAT"] = 196] = "GETSHADERPRECISIONFORMAT"; FUNCTION_ID[FUNCTION_ID["GETSHADERPARAMETER"] = 197] = "GETSHADERPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETSHADERINFOLOG"] = 198] = "GETSHADERINFOLOG"; FUNCTION_ID[FUNCTION_ID["GETSHADERSOURCE"] = 199] = "GETSHADERSOURCE"; FUNCTION_ID[FUNCTION_ID["GETTEXPARAMETER"] = 200] = "GETTEXPARAMETER"; FUNCTION_ID[FUNCTION_ID["GETUNIFORM"] = 201] = "GETUNIFORM"; FUNCTION_ID[FUNCTION_ID["GETUNIFORMLOCATION"] = 202] = "GETUNIFORMLOCATION"; FUNCTION_ID[FUNCTION_ID["GETVERTEXATTRIB"] = 203] = "GETVERTEXATTRIB"; FUNCTION_ID[FUNCTION_ID["GETVERTEXATTRIBOFFSET"] = 204] = "GETVERTEXATTRIBOFFSET"; FUNCTION_ID[FUNCTION_ID["HINT"] = 205] = "HINT"; FUNCTION_ID[FUNCTION_ID["ISBUFFER"] = 206] = "ISBUFFER"; FUNCTION_ID[FUNCTION_ID["ISENABLED"] = 207] = "ISENABLED"; FUNCTION_ID[FUNCTION_ID["ISFRAMEBUFFER"] = 208] = "ISFRAMEBUFFER"; FUNCTION_ID[FUNCTION_ID["ISPROGRAM"] = 209] = "ISPROGRAM"; FUNCTION_ID[FUNCTION_ID["ISRENDERBUFFER"] = 210] = "ISRENDERBUFFER"; FUNCTION_ID[FUNCTION_ID["ISSHADER"] = 211] = "ISSHADER"; FUNCTION_ID[FUNCTION_ID["ISTEXTURE"] = 212] = "ISTEXTURE"; FUNCTION_ID[FUNCTION_ID["LINEWIDTH"] = 213] = "LINEWIDTH"; FUNCTION_ID[FUNCTION_ID["LINKPROGRAM"] = 214] = "LINKPROGRAM"; FUNCTION_ID[FUNCTION_ID["PIXELSTOREI"] = 215] = "PIXELSTOREI"; FUNCTION_ID[FUNCTION_ID["POLYGONOFFSET"] = 216] = "POLYGONOFFSET"; FUNCTION_ID[FUNCTION_ID["READPIXELS"] = 217] = "READPIXELS"; FUNCTION_ID[FUNCTION_ID["RENDERBUFFERSTORAGE"] = 218] = "RENDERBUFFERSTORAGE"; FUNCTION_ID[FUNCTION_ID["SAMPLECOVERAGE"] = 219] = "SAMPLECOVERAGE"; FUNCTION_ID[FUNCTION_ID["SCISSOR"] = 220] = "SCISSOR"; FUNCTION_ID[FUNCTION_ID["SHADERSOURCE"] = 221] = "SHADERSOURCE"; FUNCTION_ID[FUNCTION_ID["STENCILFUNC"] = 222] = "STENCILFUNC"; FUNCTION_ID[FUNCTION_ID["STENCILFUNCSEPARATE"] = 223] = "STENCILFUNCSEPARATE"; FUNCTION_ID[FUNCTION_ID["STENCILMASK"] = 224] = "STENCILMASK"; FUNCTION_ID[FUNCTION_ID["STENCILMASKSEPARATE"] = 225] = "STENCILMASKSEPARATE"; FUNCTION_ID[FUNCTION_ID["STENCILOP"] = 226] = "STENCILOP"; FUNCTION_ID[FUNCTION_ID["STENCILOPSEPARATE"] = 227] = "STENCILOPSEPARATE"; FUNCTION_ID[FUNCTION_ID["TEXIMAGE2D"] = 228] = "TEXIMAGE2D"; FUNCTION_ID[FUNCTION_ID["TEXPARAMETERF"] = 229] = "TEXPARAMETERF"; FUNCTION_ID[FUNCTION_ID["TEXPARAMETERI"] = 230] = "TEXPARAMETERI"; FUNCTION_ID[FUNCTION_ID["TEXSUBIMAGE2D"] = 231] = "TEXSUBIMAGE2D"; FUNCTION_ID[FUNCTION_ID["UNIFORM1F"] = 232] = "UNIFORM1F"; FUNCTION_ID[FUNCTION_ID["UNIFORM1FV"] = 233] = "UNIFORM1FV"; FUNCTION_ID[FUNCTION_ID["UNIFORM1I"] = 234] = "UNIFORM1I"; FUNCTION_ID[FUNCTION_ID["UNIFORM1IV"] = 235] = "UNIFORM1IV"; FUNCTION_ID[FUNCTION_ID["UNIFORM2F"] = 236] = "UNIFORM2F"; FUNCTION_ID[FUNCTION_ID["UNIFORM2FV"] = 237] = "UNIFORM2FV"; FUNCTION_ID[FUNCTION_ID["UNIFORM2I"] = 238] = "UNIFORM2I"; FUNCTION_ID[FUNCTION_ID["UNIFORM2IV"] = 239] = "UNIFORM2IV"; FUNCTION_ID[FUNCTION_ID["UNIFORM3F"] = 240] = "UNIFORM3F"; FUNCTION_ID[FUNCTION_ID["UNIFORM3FV"] = 241] = "UNIFORM3FV"; FUNCTION_ID[FUNCTION_ID["UNIFORM3I"] = 242] = "UNIFORM3I"; FUNCTION_ID[FUNCTION_ID["UNIFORM3IV"] = 243] = "UNIFORM3IV"; FUNCTION_ID[FUNCTION_ID["UNIFORM4F"] = 244] = "UNIFORM4F"; FUNCTION_ID[FUNCTION_ID["UNIFORM4FV"] = 245] = "UNIFORM4FV"; FUNCTION_ID[FUNCTION_ID["UNIFORM4I"] = 246] = "UNIFORM4I"; FUNCTION_ID[FUNCTION_ID["UNIFORM4IV"] = 247] = "UNIFORM4IV"; FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX2FV"] = 248] = "UNIFORMMATRIX2FV"; FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX3FV"] = 249] = "UNIFORMMATRIX3FV"; FUNCTION_ID[FUNCTION_ID["UNIFORMMATRIX4FV"] = 250] = "UNIFORMMATRIX4FV"; FUNCTION_ID[FUNCTION_ID["USEPROGRAM"] = 251] = "USEPROGRAM"; FUNCTION_ID[FUNCTION_ID["VALIDATEPROGRAM"] = 252] = "VALIDATEPROGRAM"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB1F"] = 253] = "VERTEXATTRIB1F"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB1FV"] = 254] = "VERTEXATTRIB1FV"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB2F"] = 255] = "VERTEXATTRIB2F"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB2FV"] = 256] = "VERTEXATTRIB2FV"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB3F"] = 257] = "VERTEXATTRIB3F"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB3FV"] = 258] = "VERTEXATTRIB3FV"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB4F"] = 259] = "VERTEXATTRIB4F"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIB4FV"] = 260] = "VERTEXATTRIB4FV"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIBPOINTER"] = 261] = "VERTEXATTRIBPOINTER"; FUNCTION_ID[FUNCTION_ID["VIEWPORT"] = 262] = "VIEWPORT"; FUNCTION_ID[FUNCTION_ID["CONFIGUREBACKBUFFER"] = 263] = "CONFIGUREBACKBUFFER"; FUNCTION_ID[FUNCTION_ID["COMPRESSEDTEXIMAGE2D"] = 264] = "COMPRESSEDTEXIMAGE2D"; FUNCTION_ID[FUNCTION_ID["TEXIMAGE2D_PIXEL"] = 265] = "TEXIMAGE2D_PIXEL"; FUNCTION_ID[FUNCTION_ID["TEXSUBIMAGE2D_PIXEL"] = 266] = "TEXSUBIMAGE2D_PIXEL"; FUNCTION_ID[FUNCTION_ID["CREATEVERTEXARRAY"] = 267] = "CREATEVERTEXARRAY"; FUNCTION_ID[FUNCTION_ID["BINDVERTEXARRAY"] = 268] = "BINDVERTEXARRAY"; FUNCTION_ID[FUNCTION_ID["DELETEVERTEXARRAYS"] = 269] = "DELETEVERTEXARRAYS"; FUNCTION_ID[FUNCTION_ID["READPIXELS_ASYNC"] = 270] = "READPIXELS_ASYNC"; FUNCTION_ID[FUNCTION_ID["COMPRESSEDTEXSUBIMAGE2D"] = 271] = "COMPRESSEDTEXSUBIMAGE2D"; FUNCTION_ID[FUNCTION_ID["VERTEXATTRIBDIVISOR"] = 272] = "VERTEXATTRIBDIVISOR"; FUNCTION_ID[FUNCTION_ID["DRAWARRAYSINSTANCED"] = 273] = "DRAWARRAYSINSTANCED"; FUNCTION_ID[FUNCTION_ID["DRAWELEMENTSINSTANCED"] = 274] = "DRAWELEMENTSINSTANCED"; FUNCTION_ID[FUNCTION_ID["TEXIMAGE2DCANVAS"] = 275] = "TEXIMAGE2DCANVAS"; FUNCTION_ID[FUNCTION_ID["TEXSTORAGE2D"] = 276] = "TEXSTORAGE2D"; })(FUNCTION_ID || (FUNCTION_ID = {})); var UNIFORM_TYPE; (function (UNIFORM_TYPE) { UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM1F"] = 0] = "INTERIOR_UNIFORM1F"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM1FV"] = 1] = "INTERIOR_UNIFORM1FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM1I"] = 2] = "INTERIOR_UNIFORM1I"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM1IV"] = 3] = "INTERIOR_UNIFORM1IV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM2F"] = 4] = "INTERIOR_UNIFORM2F"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM2FV"] = 5] = "INTERIOR_UNIFORM2FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM2I"] = 6] = "INTERIOR_UNIFORM2I"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM2IV"] = 7] = "INTERIOR_UNIFORM2IV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM3F"] = 8] = "INTERIOR_UNIFORM3F"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM3FV"] = 9] = "INTERIOR_UNIFORM3FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM3I"] = 10] = "INTERIOR_UNIFORM3I"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM3IV"] = 11] = "INTERIOR_UNIFORM3IV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM4F"] = 12] = "INTERIOR_UNIFORM4F"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM4FV"] = 13] = "INTERIOR_UNIFORM4FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM4I"] = 14] = "INTERIOR_UNIFORM4I"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORM4IV"] = 15] = "INTERIOR_UNIFORM4IV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORMMATRIX2FV"] = 16] = "INTERIOR_UNIFORMMATRIX2FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORMMATRIX3FV"] = 17] = "INTERIOR_UNIFORMMATRIX3FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORMMATRIX4FV"] = 18] = "INTERIOR_UNIFORMMATRIX4FV"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORMSAMPLER_2D"] = 19] = "INTERIOR_UNIFORMSAMPLER_2D"; UNIFORM_TYPE[UNIFORM_TYPE["INTERIOR_UNIFORMSAMPLER_CUBE"] = 20] = "INTERIOR_UNIFORMSAMPLER_CUBE"; })(UNIFORM_TYPE || (UNIFORM_TYPE = {})); class BindInfo { constructor() { this.m_bindMap = {}; } setBind(pname, buffer) { this.m_bindMap[pname] = buffer; } getBind(pname) { var buffer = this.m_bindMap[pname]; if (!buffer) return null; if (buffer.id == -1) { this.m_bindMap[pname] = null; return null; } return buffer; } } class ANGLEInstancedArrays { constructor(encoder) { this.encoder = encoder; } vertexAttribDivisorANGLE(index, divisor) { this.encoder.vertexAttribDivisor(index, divisor); } drawArraysInstancedANGLE(mode, first, count, instanceCount) { this.encoder.drawArraysInstanced(mode, first, count, instanceCount); } drawElementsInstancedANGLE(mode, count, type, offset, instanceCount) { this.encoder.drawElementsInstanced(mode, count, type, offset, instanceCount); } } class OESVertexArrayObject { constructor(encoder) { this.encoder = encoder; } createVertexArrayOES() { return this.encoder.createVertexArray(); } deleteVertexArrayOES(arrayObject) { this.encoder.deleteVertexArray(arrayObject); } isVertexArrayOES(arrayObject) { return this.encoder.isVertexArray(arrayObject); } bindVertexArrayOES(arrayObject) { this.encoder.bindVertexArray(arrayObject); } } class OESTextureHalfFloatLinear { } class EXTColorBufferFloat { } class WebGLBuffer { constructor(id) { this.id = id; } } class WebGLFrameBuffer { constructor(id) { this.id = id; this.m_bindInfo = new BindInfo(); } setBind(pname, buffer) { this.m_bindInfo.setBind(pname, buffer); } getBind(pname) { return this.m_bindInfo.getBind(pname); } } class WebGLRenderBuffer { constructor(id) { this.id = id; } } class WebGLShader { constructor(id, type) { this.id = id; this.type = type; this.compileStatus = 0; this.src = ""; } } class WebGLProgram { constructor(id) { this.id = id; this.linkStatus = 0; this.vsShader = null; this.psShader = null; this.attachedShaderCount = 0; this.m_localMap = {}; } addLocationPair(fakeLoc, name) { this.m_localMap[fakeLoc] = name; } getLocationName(fakeLoc) { return this.m_localMap[fakeLoc]; } } class WebGLTexture { constructor(id) { this.id = id; } } class WebGLVertextArray { constructor(id) { this.id = id; } } class CallbackFuncObj { constructor() { this._vFunc = new Map(); this.id = CallbackFuncObj.s_nID++; this._nativeObj = new _callbackFuncObj(this.id); } addCallbackFunc(index, func) { this._vFunc[index] = func; this._nativeObj.addCallbackFunc(index, func); } } CallbackFuncObj.s_nID = 0; class fakeIDObj { constructor(id = 0, frame = 0) { this.id = id; this.frameCount = frame; } } class GLCommandEncoder { constructor(layagl, reserveSize, adjustSize, isSyncToRenderThread) { this._adjustSize = 0; this._byteLen = 0; this._isSyncToRenderThread = false; this._readPixelsAsyncCallbackFuncObj = new CallbackFuncObj(); this._isSyncToRenderThread = isSyncToRenderThread; this._layagl = layagl; this._byteLen = reserveSize; this._adjustSize = adjustSize; this._init(isSyncToRenderThread); } _init(isSyncToRenderThread) { this._buffer = new ArrayBuffer(this._byteLen); this._idata = new Int32Array(this._buffer); this._fdata = new Float32Array(this._buffer); this._byteArray = new Uint8Array(this._buffer); this._layagl.createArrayBufferRef(this._buffer, LayaGLContext.ARRAY_BUFFER_TYPE_CMD, isSyncToRenderThread); this._idata[0] = 1; } getPtrID() { return this._buffer["_ptrID"]; } beginEncoding() { this._layagl.beginCommandEncoding(this); } endEncoding() { this._layagl.endCommandEncoding(); } clearEncoding() { this._idata[0] = 1; } getCount() { return this._idata[0]; } _need(sz) { if ((this._byteLen - (this._idata[0] << 2)) >= sz) return; this._byteLen += (sz > this._adjustSize) ? sz : this._adjustSize; var pre = this._idata; var preConchRef = this._buffer["conchRef"]; var prePtrID = this._buffer["_ptrID"]; this._buffer = new ArrayBuffer(this._byteLen); this._idata = new Int32Array(this._buffer); this._fdata = new Float32Array(this._buffer); this._byteArray = new Uint8Array(this._buffer); this._buffer["conchRef"] = preConchRef; this._buffer["_ptrID"] = prePtrID; pre && this._idata.set(pre, 0); webglPlus.updateArrayBufferRef(this._buffer["_ptrID"], preConchRef.isSyncToRender(), this._buffer); } add_i(i) { this._need(4); this._idata[this._idata[0]++] = i; } add_f(a) { this._need(4); this._fdata[this._idata[0]++] = a; } add_ff(a, b) { this._need(8); var i = this._idata[0]; this._fdata[i++] = a; this._fdata[i++] = b; this._idata[0] = i; } add_fff(a, b, c) { this._need(12); var i = this._idata[0]; this._fdata[i++] = a; this._fdata[i++] = b; this._fdata[i++] = c; this._idata[0] = i; } add_ii(a, b) { this._need(8); var i = this._idata[0]; this._idata[i++] = a; this._idata[i++] = b; this._idata[0] = i; } add_if(a, b) { this._need(8); var i = this._idata[0]; this._idata[i++] = a; this._fdata[i++] = b; this._idata[0] = i; } add_iii(a, b, c) { this._need(12); var idata = this._idata; var i = this._idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; this._idata[0] = i; } add_iif(a, b, c) { this._need(12); var idata = this._idata; var i = this._idata[0]; idata[i++] = a; idata[i++] = b; this._fdata[i++] = c; this._idata[0] = i; } add_ifi(a, b, c) { this._need(12); var idata = this._idata; var i = this._idata[0]; idata[i++] = a; this._fdata[i++] = b; idata[i++] = c; this._idata[0] = i; } add_iifi(a, b, c, d) { this._need(16); var idata = this._idata; var i = this._idata[0]; idata[i++] = a; idata[i++] = b; this._fdata[i++] = c; idata[i++] = d; this._idata[0] = i; } add_iiii(a, b, c, d) { this._need(16); var idata = this._idata; var i = this._idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[0] = i; } add_iiif(a, b, c, d) { this._need(16); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; this._fdata[i++] = d; idata[0] = i; } add_iiiif(a, b, c, d, e) { this._need(20); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; this._fdata[i++] = e; idata[0] = i; } add_iiiff(a, b, c, d, e) { this._need(20); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; this._fdata[i++] = d; this._fdata[i++] = e; idata[0] = i; } add_iiiiff(a, b, c, d, e, f) { this._need(24); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; this._fdata[i++] = e; this._fdata[i++] = f; idata[0] = i; } add_iiifff(a, b, c, d, e, f) { this._need(24); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; this._fdata[i++] = d; this._fdata[i++] = e; this._fdata[i++] = f; idata[0] = i; } add_iiiifff(a, b, c, d, e, f, g) { this._need(28); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; this._fdata[i++] = e; this._fdata[i++] = f; this._fdata[i++] = g; idata[0] = i; } add_iiiffff(a, b, c, d, e, f, g) { this._need(28); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; this._fdata[i++] = d; this._fdata[i++] = e; this._fdata[i++] = f; this._fdata[i++] = g; idata[0] = i; } add_iiiiffff(a, b, c, d, e, f, g, h) { this._need(32); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; this._fdata[i++] = e; this._fdata[i++] = f; this._fdata[i++] = g; this._fdata[i++] = h; idata[0] = i; } add_iiff(a, b, c, d) { this._need(16); var idata = this._idata; var fdata = this._fdata; var i = idata[0]; idata[i++] = a; idata[i++] = b; fdata[i++] = c; fdata[i++] = d; idata[0] = i; } add_iifff(a, b, c, d, e) { this._need(20); var idata = this._idata; var fdata = this._fdata; var i = idata[0]; idata[i++] = a; idata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; idata[0] = i; } add_iiffff(a, b, c, d, e, f) { this._need(24); var idata = this._idata; var fdata = this._fdata; var i = idata[0]; idata[i++] = a; idata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; fdata[i++] = f; idata[0] = i; } add_iiiii(a, b, c, d, e) { this._need(20); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[0] = i; } add_iiiiii(a, b, c, d, e, f) { this._need(24); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[0] = i; } add_iiiiiii(a, b, c, d, e, f, g) { this._need(28); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[0] = i; } add_iiiiiiiiiiii(a, b, c, d, e, f, g, h, j, k, l, m) { this._need(48); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[i++] = j; idata[i++] = k; idata[i++] = l; idata[i++] = m; idata[0] = i; } add_iiiiiiiiiiiii(a, b, c, d, e, f, g, h, j, k, l, m, n) { this._need(52); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[i++] = j; idata[i++] = k; idata[i++] = l; idata[i++] = m; idata[i++] = n; idata[0] = i; } add_iff(a, b, c) { this._need(12); var i = this._idata[0]; this._idata[i++] = a; this._fdata[i++] = b; this._fdata[i++] = c; this._idata[0] = i; } add_iffi(a, b, c, d) { this._need(16); var i = this._idata[0]; this._idata[i++] = a; this._fdata[i++] = b; this._fdata[i++] = c; this._idata[i++] = d; this._idata[0] = i; } add_ifffi(a, b, c, d, e) { this._need(20); var i = this._idata[0]; this._idata[i++] = a; this._fdata[i++] = b; this._fdata[i++] = c; this._fdata[i++] = d; this._idata[i++] = e; this._idata[0] = i; } add_iffff(a, b, c, d, e) { this._need(20); var i = this._idata[0]; var fdata = this._fdata; this._idata[i++] = a; fdata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; this._idata[0] = i; } add_iffffi(a, b, c, d, e, f) { this._need(24); var i = this._idata[0]; var fdata = this._fdata; this._idata[i++] = a; fdata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; this._idata[i++] = f; this._idata[0] = i; } add_ifffffi(a, b, c, d, e, f, g) { this._need(28); var i = this._idata[0]; var fdata = this._fdata; this._idata[i++] = a; fdata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; fdata[i++] = f; this._idata[i++] = g; this._idata[0] = i; } add_iffffiif(a, b, c, d, e, f, g, h) { this._need(28); var i = this._idata[0]; var fdata = this._fdata; this._idata[i++] = a; fdata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; this._idata[i++] = f; this._idata[i++] = g; fdata[i++] = h; this._idata[0] = i; } add_iffffiii(a, b, c, d, e, f, g, h) { this._need(32); var i = this._idata[0]; var fdata = this._fdata; this._idata[i++] = a; fdata[i++] = b; fdata[i++] = c; fdata[i++] = d; fdata[i++] = e; this._idata[i++] = f; this._idata[i++] = g; this._idata[i++] = h; this._idata[0] = i; } add_iiiiiiii(a, b, c, d, e, f, g, h) { this._need(32); var i = this._idata[0]; var idata = this._idata; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[0] = i; } add_iiiiiiiii(a, b, c, d, e, f, g, h, j) { this._need(36); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[i++] = j; idata[0] = i; } add_iiiiiiiiii(a, b, c, d, e, f, g, h, j, k) { this._need(40); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[i++] = j; idata[i++] = k; idata[0] = i; } add_iiiiiiiiiii(a, b, c, d, e, f, g, h, j, k, l) { this._need(44); var idata = this._idata; var i = idata[0]; idata[i++] = a; idata[i++] = b; idata[i++] = c; idata[i++] = d; idata[i++] = e; idata[i++] = f; idata[i++] = g; idata[i++] = h; idata[i++] = j; idata[i++] = k; idata[i++] = l; idata[0] = i; } add_String(str, len) { var ab = conch.strTobufer(str); this._need(len + 4); this._idata[this._idata[0]++] = len; if (len == 0) return; var uint8array = new Uint8Array(ab); this._byteArray.set(uint8array, this._idata[0] * 4); this._idata[0] += len / 4; } wab(arraybuffer, length, nAlignLength, offset) { offset = offset ? offset : 0; this._need(nAlignLength + 4); this._idata[this._idata[0]++] = length; var uint8array = null; if (arraybuffer instanceof Float32Array && offset == 0) { this._fdata.set(arraybuffer, this._idata[0]); } else { if (arraybuffer instanceof ArrayBuffer) { uint8array = new Uint8Array(arraybuffer, offset, length); } else if (arraybuffer.buffer) { uint8array = new Uint8Array(arraybuffer.buffer, offset + arraybuffer.byteOffset, length); } else { console.log("not arraybuffer/dataview"); return; } this._byteArray.set(uint8array, this._idata[0] * 4); } this._idata[0] += nAlignLength / 4; } copyBuffer(arraybuffer, length, offset) { offset = offset ? offset : 0; this._need(length); var ab = null; if (arraybuffer instanceof ArrayBuffer) { ab = arraybuffer; } else if (arraybuffer.buffer) { ab = arraybuffer.buffer; } else { console.log("not arraybuffer/dataview "); return; } var uint8array = new Uint8Array(ab, offset, length); this._byteArray.set(uint8array, this._idata[0] * 4); this._idata[0] += length / 4; } getContextAttributes() { return { alpha: false, antialias: false, depth: true, failIfMajorPerformanceCaveat: false, premultipliedAlpha: true, preserveDrawingBuffer: false, stencil: false }; } isContextLost() { console.log("isContextLost can't support"); return false; } getSupportedExtensions() { let extentions = this._layagl._nativeObj.getStringEx(0x1F03).split(' '); let version = this._layagl._nativeObj.getStringEx(0x1F02); function supports(extention) { for (let ext of extentions) { if (ext === extention) { return true; } } return false; } let result = []; if (supports("GL_EXT_blend_minmax")) result.push("EXT_blend_minmax"); if (supports("GL_EXT_sRGB")) result.push("EXT_sRGB"); if (supports("GL_EXT_frag_depth")) result.push("EXT_frag_depth"); if (supports("GL_OES_texture_float")) result.push("OES_texture_float"); if (supports("GL_OES_texture_float_linear")) result.push("OES_texture_float_linear"); if (supports("GL_OES_texture_half_float")) result.push("OES_texture_half_float"); if (supports("GL_OES_texture_half_float_linear")) result.push("OES_texture_half_float_linear"); if (supports("GL_OES_standard_derivatives")) result.push("OES_standard_derivatives"); if (supports("GL_EXT_shader_texture_lod") || supports("GL_ARB_shader_texture_lod")) result.push("EXT_shader_texture_lod"); if (supports("GL_EXT_texture_filter_anisotropic")) result.push("EXT_texture_filter_anisotropic"); if (supports("GL_OES_vertex_array_object")) result.push("OES_vertex_array_object"); if (supports("GL_OES_element_index_uint")) result.push("OES_element_index_uint"); if (supports("GL_ANGLE_translated_shader_source")) result.push("WEBGL_debug_shaders"); if (supports("GL_AMD_compressed_ATC_texture")) result.push("WEBGL_compressed_texture_atc"); if (supports("GL_IMG_texture_compression_pvrtc")) result.push("WEBGL_compressed_texture_pvrtc"); if (supports("GL_EXT_texture_compression_s3tc") || supports("GL_EXT_texture_compression_dxt1")) result.push("WEBGL_compressed_texture_s3tc"); if (supports("GL_OES_depth_texture") || supports("GL_ARB_depth_texture") || supports("GL_ANGLE_depth_texture")) result.push("WEBGL_depth_texture"); if (version.indexOf("OpenGL ES 3.") != -1) { result.push("WEBGL_compressed_texture_etc"); } if (supports("ANGLE_instanced_arrays")) result.push("ANGLE_instanced_arrays"); if (supports("GL_EXT_color_buffer_float")) result.push("EXT_color_buffer_float"); if (supports("GL_EXT_color_buffer_half_float")) result.push("EXT_color_buffer_half_float"); if (supports("GL_EXT_disjoint_timer_query")) result.push("EXT_disjoint_timer_query"); if (supports("GL_OES_compressed_ETC1_RGB8_texture")) result.push("WEBGL_compressed_texture_etc1"); if (supports("GL_EXT_texture_compression_s3tc")) result.push("WEBGL_compressed_texture_s3tc"); if (supports("GL_EXT_texture_compression_s3tc_srgb")) result.push("WEBGL_compressed_texture_s3tc_srgb"); result.push("WEBGL_debug_renderer_info"); result.push("WEBGL_lose_context"); return result; } getExtension(name) { var extention = this._layagl._nativeObj.getStringEx(0x1F03); let extentions = extention.split(' '); function supports(extention) { for (let ext of extentions) { if (ext === extention) { return true; } } return false; } if (name === 'EXT_blend_minmax' && extention.indexOf('GL_EXT_blend_minmax') != -1) { return { MAX_EXT: 32776, MIN_EXT: 32775, }; } else if (name === 'EXT_color_buffer_float' && extention.indexOf('GL_EXT_color_buffer_float') != -1) { return {}; } else if (name === 'EXT_color_buffer_half_float' && extention.indexOf('GL_EXT_color_buffer_half_float') != -1) { return {}; } else if (name === 'EXT_shader_texture_lod' && (extention.indexOf('GL_EXT_shader_texture_lod') != -1 || extention.indexOf('GL_ARB_shader_texture_lod') != -1)) { return {}; } else if (name === 'OES_element_index_uint' && extention.indexOf('GL_OES_element_index_uint') != -1) { return {}; } else if (name === 'EXT_sRGB' && extention.indexOf('GL_EXT_sRGB') != -1) { return { SRGB_EXT: 0x8C40, SRGB_ALPHA_EXT: 0x8C42, SRGB8_ALPHA8_EXT: 0x8C43, FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210 }; } else if (name === 'WEBGL_compressed_texture_pvrtc' && extention.indexOf('GL_IMG_texture_compression_pvrtc') != -1) { return { COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 35843, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 35842, COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 35841, COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 35840, }; } else if (name === 'WEBGL_compressed_texture_etc1' && extention.indexOf('GL_OES_compressed_ETC1_RGB8_texture') != -1) { return { COMPRESSED_RGB_ETC1_WEBGL: 36196 }; } else if (name === 'WEBGL_compressed_texture_s3tc' && supports('GL_EXT_texture_compression_s3tc')) { return { COMPRESSED_RGBA_S3TC_DXT1_EXT: 33777, COMPRESSED_RGBA_S3TC_DXT3_EXT: 33778, COMPRESSED_RGBA_S3TC_DXT5_EXT: 33779, COMPRESSED_RGB_S3TC_DXT1_EXT: 33776, }; } else if (name === 'WEBGL_compressed_texture_s3tc_srgb' && extention.indexOf('GL_EXT_texture_compression_s3tc_srgb') != -1) { return { COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 35917, COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 35918, COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 35919, COMPRESSED_SRGB_S3TC_DXT1_EXT: 35916, }; } else if (name === 'WEBGL_debug_renderer_info') { return { UNMASKED_RENDERER_WEBGL: 37446, UNMASKED_VENDOR_WEBGL: 37445, }; } else if (name === 'EXT_texture_filter_anisotropic' && extention.indexOf('GL_EXT_texture_filter_anisotropic') != -1) { return { MAX_TEXTURE_MAX_ANISOTROPY_EXT: 34047, TEXTURE_MAX_ANISOTROPY_EXT: 34046, }; } else if (name.indexOf('ANGLE_instanced_arrays') != -1 && (conchConfig.glCaps & GL_CAPS.INSTANCEING)) { return new ANGLEInstancedArrays(this); } else if (name.indexOf('OES_vertex_array_object') != -1 && extention.indexOf('GL_OES_vertex_array_object') != -1) { return new OESVertexArrayObject(this); } else if (name.indexOf('OES_texture_half_float') != -1 && extention.indexOf('GL_OES_texture_half_float') != -1) { return { HALF_FLOAT_OES: 36193 }; } else if (name.indexOf('OES_texture_half_float_linear') != -1 && extention.indexOf('GL_OES_texture_half_float_linear') != -1) { return new OESTextureHalfFloatLinear(); } else if (name.indexOf('EXT_color_buffer_float') != -1 && extention.indexOf('GL_EXT_color_buffer_float') != -1) { return new EXTColorBufferFloat(); } else if (name.indexOf('WEBGL_depth_texture') != -1 && ((supports("GL_OES_depth_texture") || supports("GL_ARB_depth_texture") || supports("GL_ANGLE_depth_texture")))) { return { UNSIGNED_INT_24_8_WEBGL: 34042 }; } else { console.log("getExtension " + name + " 尚未支持"); } return null; } activeTexture(texture) { this.add_ii(FUNCTION_ID.ACTIVETEXTURE, texture); } attachShader(program, shader) { if (shader.type == LayaGLContext.VERTEX_SHADER) { if (program.vsShader) return; program.vsShader = shader; program.attachedShaderCount++; } else if (shader.type == LayaGLContext.FRAGMENT_SHADER) { if (program.psShader) return; program.psShader = shader; program.attachedShaderCount++; } this.add_iii(FUNCTION_ID.ATTACHSHADER, program.id, shader.id); } bindAttribLocation(program, index, name) { var strLen = this.getStrLength(name); this.add_iii(FUNCTION_ID.BINDATTRIBLOCATION, program.id, index); this.add_String(name, strLen); } bindBuffer(target, buffer) { this.add_iii(FUNCTION_ID.BINDBUFFER, target, buffer ? buffer.id : 0); } bindFramebuffer(target, framebuffer) { this.add_iii(FUNCTION_ID.BINDFRAMEBUFFER, target, framebuffer ? framebuffer.id : 0); } bindRenderbuffer(target, renderbuffer) { this.add_iii(FUNCTION_ID.BINDRENDERBUFFER, target, renderbuffer ? renderbuffer.id : 0); } bindTexture(target, texture) { this.add_iii(FUNCTION_ID.BINDTEXTURE, target, texture ? texture.id : 0); } useTexture(texture) { this.add_ii(FUNCTION_ID.USETEXTURE, texture ? texture.id : 0); } blendColor(red, green, blue, alpha) { this.add_iffff(FUNCTION_ID.BLENDCOLOR, red, green, blue, alpha); } blendEquation(mode) { this.add_ii(FUNCTION_ID.BLENDEQUATION, mode); } blendEquationSeparate(modeRGB, modeAlpha) { this.add_iii(FUNCTION_ID.BLENDEQUATIONSEPARATE, modeRGB, modeAlpha); } blendFunc(sfactor, dfactor) { this.add_iii(FUNCTION_ID.BLENDFUNC, sfactor, dfactor); } blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) { this.add_iiiii(FUNCTION_ID.BLENDFUNCSEPARATE, srcRGB, dstRGB, srcAlpha, dstAlpha); } bufferData(target, sizeOrArray, usage) { if (ArrayBuffer.isView(sizeOrArray) || (sizeOrArray instanceof ArrayBuffer)) { var nAlignLength = this.getAlignLength(sizeOrArray); this.add_iii(FUNCTION_ID.BUFFERDATA_ARRAYBUFFER, target, usage); this.wab(sizeOrArray, sizeOrArray.byteLength, nAlignLength); } else { var size = sizeOrArray; this.add_iiii(FUNCTION_ID.BUFFERDATA_SIZE, target, size, usage); } } bufferSubData(target, offset, data) { var nAlignLength = this.getAlignLength(data); this.add_iii(FUNCTION_ID.BUFFERSUBDATA, target, offset); this.wab(data, data.byteLength, nAlignLength); } checkFramebufferStatus(target) { return this._layagl._nativeObj.checkFramebufferStatusEx(target); } clear(mask) { this.add_ii(FUNCTION_ID.CLEAR, mask); } clearColor(red, green, blue, alpha) { this.add_iffff(FUNCTION_ID.CLEARCOLOR, red, green, blue, alpha); } clearDepth(depth) { this.add_if(FUNCTION_ID.CLEARDEPTH, depth); } clearStencil(s) { this.add_ii(FUNCTION_ID.CLEARSTENCIL, s); } colorMask(red, green, blue, alpha) { this.add_iiiii(FUNCTION_ID.COLORMASK, red, green, blue, alpha); } compileShader(shader) { this.add_ii(FUNCTION_ID.COMPILESHADER, shader.id); shader.compileStatus = this._layagl._nativeObj.getShaderParameter(shader.src, shader.type, LayaGLContext.COMPILE_STATUS); } copyTexImage2D(target, level, internalformat, x, y, width, height, border) { this.add_iiiiiiiii(FUNCTION_ID.COPYTEXIMAGE2D, target, level, internalformat, x, y, width, height, border); } copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) { this.add_iiiiiiiii(FUNCTION_ID.COPYTEXSUBIMAGE2D, target, level, xoffset, yoffset, x, y, width, height); } createBuffer() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATEBUFFER, fakeID); return new WebGLBuffer(fakeID); } createFramebuffer() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATEFRAMEBUFFER, fakeID); return new WebGLFrameBuffer(fakeID); } createProgram() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATEPROGRAM, fakeID); return new WebGLProgram(fakeID); } createRenderbuffer() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATERENDERBUFFER, fakeID); return new WebGLRenderBuffer(fakeID); } createShader(type) { var fakeID = this.createFakeID(); this.add_iii(FUNCTION_ID.CREATESHADER, fakeID, type); return new WebGLShader(fakeID, type); } createTexture() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATETEXTURE, fakeID); return new WebGLTexture(fakeID); } cullFace(mode) { this.add_ii(FUNCTION_ID.CULLFACE, mode); } deleteBuffer(buffer) { this.deleteFakeID(buffer.id); this.add_ii(FUNCTION_ID.DELETEBUFFER, buffer.id); } deleteFramebuffer(framebuffer) { this.deleteFakeID(framebuffer.id); this.add_ii(FUNCTION_ID.DELETEFRAMEBUFFER, framebuffer.id); } deleteProgram(program) { this.deleteFakeID(program.id); this.add_ii(FUNCTION_ID.DELETEPROGRAM, program.id); } deleteRenderbuffer(renderbuffer) { this.deleteFakeID(renderbuffer.id); this.add_ii(FUNCTION_ID.DELETERENDERBUFFER, renderbuffer.id); } deleteShader(shader) { this.deleteFakeID(shader.id); this.add_ii(FUNCTION_ID.DELETESHADER, shader.id); } deleteTexture(texture) { this.deleteFakeID(texture.id); this.add_ii(FUNCTION_ID.DELETETEXTURE, texture.id); } depthFunc(func) { this.add_ii(FUNCTION_ID.DEPTHFUNC, func); } depthMask(flag) { this.add_ii(FUNCTION_ID.DEPTHMASK, flag); } depthRange(zNear, zFar) { this.add_iff(FUNCTION_ID.DEPTHRANGE, zNear, zFar); } detachShader(program, shader) { let shaderid = -1; if (program.vsShader && program.vsShader.id === shader.id) { shaderid = program.vsShader.id; program.vsShader = null; } else if (program.psShader && program.psShader.id === shader.id) { shaderid = program.psShader.id; program.psShader = null; } if (shaderid > 0) { program.attachedShaderCount--; this.add_iii(FUNCTION_ID.DETACHSHADER, program.id, shaderid); } } disable(cap) { this.add_ii(FUNCTION_ID.DISABLE, cap); } disableVertexAttribArray(index) { this.add_ii(FUNCTION_ID.DISABLEVERTEXATTRIBARRAY, index); } drawArrays(mode, first, count) { this.add_iiii(FUNCTION_ID.DRAWARRAYS, mode, first, count); } drawElements(mode, count, type, offset) { this.add_iiiii(FUNCTION_ID.DRAWELEMENTS, mode, count, type, offset); } enable(cap) { this.add_ii(FUNCTION_ID.ENABLE, cap); } enableVertexAttribArray(index) { this.add_ii(FUNCTION_ID.ENABLEVERTEXATTRIBARRAY, index); } finish() { this.add_i(FUNCTION_ID.FINISH); } flush() { this.add_i(FUNCTION_ID.FLUSH); } framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) { this.add_iiiii(FUNCTION_ID.FRAMEBUFFERRENDERBUFFER, target, attachment, renderbuffertarget, renderbuffer ? renderbuffer.id : 0); } framebufferTexture2D(target, attachment, textarget, texture, level) { this.add_iiiiii(FUNCTION_ID.FRAMEBUFFERTEXTURE2D, target, attachment, textarget, texture ? texture.id : 0, level); } frontFace(mode) { this.add_ii(FUNCTION_ID.FRONTFACE, mode); } generateMipmap(target) { this.add_ii(FUNCTION_ID.GENERATEMIPMAP, target); } getActiveAttrib(program, index) { return this._layagl._nativeObj.getActiveAttribEx(program.linkedVSSource, program.linkedPSSource, "", index); } getActiveUniform(program, index) { return this._layagl._nativeObj.getActiveUniformEx(program.linkedVSSource, program.linkedPSSource, "", index); } getAttribLocation(program, name) { return this._layagl._nativeObj.getAttribLocationEx(program.linkedVSSource, program.linkedPSSource, "", name); } getParameter(pname) { var gl = this._layagl; var result = 0; switch (pname) { case LayaGLContext.ACTIVE_TEXTURE: case LayaGLContext.ALPHA_BITS: case LayaGLContext.BLEND_DST_ALPHA: case LayaGLContext.BLEND_DST_RGB: case LayaGLContext.BLEND_EQUATION: case LayaGLContext.BLEND_EQUATION_ALPHA: case LayaGLContext.BLEND_EQUATION_RGB: case LayaGLContext.BLEND_SRC_ALPHA: case LayaGLContext.BLEND_SRC_RGB: case LayaGLContext.BLUE_BITS: case LayaGLContext.CULL_FACE_MODE: case LayaGLContext.DEPTH_BITS: case LayaGLContext.DEPTH_FUNC: case LayaGLContext.FRONT_FACE: case LayaGLContext.GENERATE_MIPMAP_HINT: case LayaGLContext.GREEN_BITS: case LayaGLContext.IMPLEMENTATION_COLOR_READ_FORMAT: case LayaGLContext.IMPLEMENTATION_COLOR_READ_TYPE: case LayaGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS: case LayaGLContext.MAX_CUBE_MAP_TEXTURE_SIZE: case LayaGLContext.MAX_FRAGMENT_UNIFORM_VECTORS: case LayaGLContext.MAX_RENDERBUFFER_SIZE: case LayaGLContext.MAX_TEXTURE_IMAGE_UNITS: case LayaGLContext.MAX_TEXTURE_SIZE: case LayaGLContext.MAX_VARYING_VECTORS: case LayaGLContext.MAX_VERTEX_ATTRIBS: case LayaGLContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS: case LayaGLContext.MAX_VERTEX_UNIFORM_VECTORS: case LayaGLContext.SAMPLE_BUFFERS: case LayaGLContext.SAMPLES: case LayaGLContext.STENCIL_BACK_FAIL: case LayaGLContext.STENCIL_BACK_FUNC: case LayaGLContext.STENCIL_BACK_PASS_DEPTH_FAIL: case LayaGLContext.STENCIL_BACK_PASS_DEPTH_PASS: case LayaGLContext.STENCIL_BACK_REF: case LayaGLContext.STENCIL_BACK_VALUE_MASK: case LayaGLContext.STENCIL_BACK_WRITEMASK: case LayaGLContext.STENCIL_BITS: case LayaGLContext.STENCIL_CLEAR_VALUE: case LayaGLContext.STENCIL_FAIL: case LayaGLContext.STENCIL_FUNC: case LayaGLContext.STENCIL_PASS_DEPTH_FAIL: case LayaGLContext.STENCIL_PASS_DEPTH_PASS: case LayaGLContext.STENCIL_REF: case LayaGLContext.STENCIL_VALUE_MASK: case LayaGLContext.STENCIL_WRITEMASK: case LayaGLContext.SUBPIXEL_BITS: case LayaGLContext.UNPACK_ALIGNMENT: result = gl._nativeObj.getIntegerv(pname); break; case LayaGLContext.CURRENT_PROGRAM: gl._nativeObj.flushCommand(); result = this._layagl.getBind(pname); break; case LayaGLContext.ARRAY_BUFFER_BINDING: gl._nativeObj.flushCommand(); result = this._layagl.getBind(LayaGLContext.ARRAY_BUFFER); break; case LayaGLContext.ELEMENT_ARRAY_BUFFER_BINDING: gl._nativeObj.flushCommand(); result = this._layagl.getBind(LayaGLContext.ELEMENT_ARRAY_BUFFER); break; case LayaGLContext.RENDERBUFFER_BINDING: gl._nativeObj.flushCommand(); result = this._layagl.getBind(LayaGLContext.RENDERBUFFER); break; case LayaGLContext.TEXTURE_BINDING_2D: gl._nativeObj.flushCommand(); result = this._layagl.getBind(LayaGLContext.TEXTURE_2D); break; case LayaGLContext.TEXTURE_BINDING_CUBE_MAP: gl._nativeObj.flushCommand(); result = this._layagl.getBind(LayaGLContext.TEXTURE_CUBE_MAP); break; case LayaGLContext.BLEND: case LayaGLContext.CULL_FACE: case LayaGLContext.DEPTH_TEST: case LayaGLContext.DEPTH_WRITEMASK: case LayaGLContext.DITHER: case LayaGLContext.SAMPLE_COVERAGE_INVERT: case LayaGLContext.SCISSOR_TEST: case LayaGLContext.STENCIL_TEST: var ret = gl._nativeObj.getBooleanv(pname); if (!ret) result = false; else result = true; break; case LayaGLContext.DEPTH_CLEAR_VALUE: case LayaGLContext.LINE_WIDTH: case LayaGLContext.SAMPLE_COVERAGE_VALUE: result = gl._nativeObj.getFloatv(pname); break; case LayaGLContext.ALIASED_LINE_WIDTH_RANGE: case LayaGLContext.ALIASED_POINT_SIZE_RANGE: case LayaGLContext.BLEND_COLOR: case LayaGLContext.COLOR_CLEAR_VALUE: case LayaGLContext.DEPTH_RANGE: result = gl._nativeObj.getFloatArrayv(pname); break; case LayaGLContext.MAX_VIEWPORT_DIMS: case LayaGLContext.SCISSOR_BOX: case LayaGLContext.VIEWPORT: result = gl._nativeObj.getIntegerArrayv(pname); break; case LayaGLContext.RENDERER: case LayaGLContext.SHADING_LANGUAGE_VERSION: case LayaGLContext.VENDOR: case LayaGLContext.VERSION: result = gl._nativeObj.getStringEx(pname); break; case LayaGLContext.MAX_TEXTURE_MAX_ANISOTROPY_EXT: case LayaGLContext.TEXTURE_MAX_ANISOTROPY_EXT: result = gl._nativeObj.getParameter(pname); break; default: alert("getParameter 尚未支持"); break; } return result; } getBufferParameter(target, pname) { return this._layagl._nativeObj.getBufferParameterEx(target, pname); } getError() { this.add_i(FUNCTION_ID.GETERROR); return 0; } getFramebufferAttachmentParameter(target, attachment, pname) { var gl = this._layagl; var result = null; switch (pname) { case LayaGLContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: var frameBuffer = gl.getBind(target); if (frameBuffer) { var attachBuffer = frameBuffer.getBind(attachment); if (!attachBuffer) result = LayaGLContext.NONE; else if (attachBuffer instanceof WebGLTexture) result = LayaGLContext.TEXTURE; else if (attachBuffer instanceof WebGLRenderBuffer) result = LayaGLContext.RENDERBUFFER; } break; case LayaGLContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: var frameBuffer = gl.getBind(target); if (frameBuffer) { return frameBuffer.getBind(attachment); } break; case LayaGLContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: case LayaGLContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: result = gl._nativeObj.getFramebufferAttachmentParameter(target, attachment, pname); break; default: break; } return result; } getProgramParameter(program, pname) { let ret; var gl = this._layagl; if (pname == LayaGLContext.ATTACHED_SHADERS) return program.attachedShaderCount; if (program.linkStatus == 0 || program.id == -1) { if (program.id == -1) { if (pname == LayaGLContext.DELETE_STATUS || pname == LayaGLContext.LINK_STATUS || pname == LayaGLContext.VALIDATE_STATUS) { return null; } } else if (program.linkStatus == 0) { if (pname == LayaGLContext.DELETE_STATUS || pname == LayaGLContext.LINK_STATUS || pname == LayaGLContext.VALIDATE_STATUS) { return false; } } return 0; } else { ret = this._layagl._nativeObj.getProgramParameterEx(program.linkedVSSource, program.linkedPSSource, "", pname); if (pname == LayaGLContext.DELETE_STATUS || pname == LayaGLContext.LINK_STATUS || pname == LayaGLContext.VALIDATE_STATUS) { return ret == 1 ? true : false; } else { return ret; } } } getProgramInfoLog(program) { if (program.id == -1) return null; if (program.linkStatus) return ""; if (program.attachedShaderCount < 2) { return "missing shaders" + String.fromCharCode(0); } var ret = this._layagl._nativeObj.getProgramInfoLogEx(program.vsShader.src, program.psShader.src, ""); if (ret === "invalid shaders") { ret = ret + String.fromCharCode(0); } return ret; } getRenderbufferParameter(target, pname) { return this._layagl._nativeObj.getRenderbufferParameterEx(target, pname); } getShaderPrecisionFormat(shaderType, precisionType) { return this._layagl._nativeObj.getShaderPrecisionFormat(shaderType, precisionType); } getShaderParameter(shader, pname) { if (shader && shader.id == -1) return null; if (pname == LayaGLContext.COMPILE_STATUS) { return shader.compileStatus === 0 ? false : true; } return this._layagl._nativeObj.getShaderParameter(shader.src, shader.type, pname); } getShaderInfoLog(shader) { return this._layagl._nativeObj.getShaderInfoLogEx(shader.src, shader.type); } getShaderSource(shader) { if (!(shader instanceof WebGLShader)) throw new TypeError("parameter 1 is not of type 'WebGLShader'"); if (shader && shader.id !== -1) return shader.src; return null; } getTexParameter(target, pname) { return this._layagl._nativeObj.getTexParameterEx(target, pname); } getUniform(program, location) { if (!program.linkStatus || program.id == -1) return null; var gl = this._layagl; var curProgram = gl.getBind(LayaGLContext.CURRENT_PROGRAM); var result = null; this.useProgram(program); gl._nativeObj.flushCommand(); var locationName = program.getLocationName(location); var result = this._layagl._nativeObj.getUniformEx(locationName); var type = result[0]; result.splice(0, 1); if (type == LayaGLContext.BOOL) { for (var i = 0; i < result.length; i++) { if (result[i] === 0) result[i] = false; else result[i] = true; } } if (curProgram) { this.useProgram(curProgram); gl._nativeObj.flushCommand(); } if (result.length == 1) { return result[0]; } else { if (type == LayaGLContext.BOOL) return result; else if (type == LayaGLContext.FLOAT) return new Float32Array(result); else if (type == LayaGLContext.INT) return new Int32Array(result); } return null; } getUniformMutiThread(program, location) { console.log("getUniformMutiThread can't support"); return null; } getUniformLocation(program, name) { var fakeLoc = GLCommandEncoder._locTable.getFakeLocation(program.id, name); var strLen = this.getStrLength(name); this.add_iii(FUNCTION_ID.GETUNIFORMLOCATION, program.id, fakeLoc); this.add_String(name, strLen); program.addLocationPair(fakeLoc, name); return fakeLoc; } getVertexAttrib(index, pname) { var gl = this._layagl; var result = 0; switch (pname) { case LayaGLContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: gl._nativeObj.flushCommand(); result = gl.getBind(LayaGLContext.ARRAY_BUFFER); break; case LayaGLContext.VERTEX_ATTRIB_ARRAY_ENABLED: case LayaGLContext.VERTEX_ATTRIB_ARRAY_NORMALIZED: var ret = gl._nativeObj.getVertexAttribEx(index, pname); if (ret === 0) result = false; else result = true; break; case LayaGLContext.VERTEX_ATTRIB_ARRAY_SIZE: case LayaGLContext.VERTEX_ATTRIB_ARRAY_STRIDE: case LayaGLContext.VERTEX_ATTRIB_ARRAY_TYPE: result = gl._nativeObj.getVertexAttribEx(index, pname); break; case LayaGLContext.CURRENT_VERTEX_ATTRIB: result = gl._nativeObj.getVertexAttribExfv(index, pname); break; default: result = 0; break; } return result; } getVertexAttribOffset(index, pname) { return this._layagl._nativeObj.getVertexAttribOffset(index, pname); } hint(target, mode) { this.add_iii(FUNCTION_ID.HINT, target, mode); } isBuffer(buffer) { return (buffer instanceof WebGLBuffer); } isEnabled(cap) { var ret = this._layagl._nativeObj.isEnabled(cap); if (!ret) return false; return true; } isFramebuffer(framebuffer) { return (framebuffer instanceof WebGLFrameBuffer); } isProgram(program) { return (program instanceof WebGLProgram); } isRenderbuffer(renderbuffer) { return (renderbuffer instanceof WebGLRenderBuffer); } isShader(shader) { return (shader instanceof WebGLShader); } isTexture(texture) { return (texture instanceof WebGLTexture); } lineWidth(width) { this.add_if(FUNCTION_ID.LINEWIDTH, width); } linkProgram(program) { this.add_ii(FUNCTION_ID.LINKPROGRAM, program.id); if (program.attachedShaderCount >= 2) { var gl = this._layagl; program.linkStatus = gl._nativeObj.getProgramParameterEx(program.vsShader.src, program.psShader.src, "", LayaGLContext.LINK_STATUS); if (program.linkStatus) { program.linkedVSSource = program.vsShader.src; program.linkedPSSource = program.psShader.src; } } } pixelStorei(pname, param) { this.add_iii(FUNCTION_ID.PIXELSTOREI, pname, param); } polygonOffset(factor, units) { this.add_iff(FUNCTION_ID.POLYGONOFFSET, factor, units); } readPixels(x, y, width, height, format, type, pixels) { if (!pixels && !(pixels instanceof Uint8Array) && !(pixels instanceof Uint16Array) && !(pixels instanceof Float32Array)) return; var ret = this._layagl._nativeObj.readPixels(x, y, width, height, format, type); pixels.set(new Uint8Array(ret)); } readPixelsAsync(x, y, w, h, format, type, callBack) { var fakeID = this.createFakeID(); this._readPixelsAsyncCallbackFuncObj.addCallbackFunc(fakeID, callBack); this.add_iiiiiiiii(FUNCTION_ID.READPIXELS_ASYNC, x, y, w, h, format, type, this._readPixelsAsyncCallbackFuncObj.id, fakeID); } renderbufferStorage(target, internalformat, width, height) { this.add_iiiii(FUNCTION_ID.RENDERBUFFERSTORAGE, target, internalformat, width, height); } sampleCoverage(value, invert) { this.add_ifi(FUNCTION_ID.SAMPLECOVERAGE, value, invert); } scissor(x, y, width, height) { this.add_iiiii(FUNCTION_ID.SCISSOR, x, y, width, height); } shaderSource(shader, source) { shader.src = source; var strLen = this.getStrLength(source); this.add_ii(FUNCTION_ID.SHADERSOURCE, shader.id); this.add_String(source, strLen); } stencilFunc(func, ref, mask) { this.add_iiii(FUNCTION_ID.STENCILFUNC, func, ref, mask); } stencilFuncSeparate(face, func, ref, mask) { this.add_iiiii(FUNCTION_ID.STENCILFUNCSEPARATE, face, func, ref, mask); } stencilMask(mask) { this.add_ii(FUNCTION_ID.STENCILMASK, mask); } stencilMaskSeparate(face, mask) { this.add_iii(FUNCTION_ID.STENCILMASKSEPARATE, face, mask); } stencilOp(fail, zfail, zpass) { this.add_iiii(FUNCTION_ID.STENCILOP, fail, zfail, zpass); } stencilOpSeparate(face, fail, zfail, zpass) { this.add_iiiii(FUNCTION_ID.STENCILOPSEPARATE, face, fail, zfail, zpass); } texImage2D(_args) { var args = arguments; if (args.length == 6) { if (args[5]._nativeObj) { this.add_iiiiiii(FUNCTION_ID.TEXIMAGE2D, args[0], args[1], args[2], args[3], args[4], args[5]._nativeObj.conchImgId); } else { this.add_iiiiiiiii(FUNCTION_ID.TEXIMAGE2DCANVAS, args[0], args[1], args[2], args[3], args[4], args[5]._ctx._targets._glTexture.id, args[5].width, args[5].height); } } else if (args.length == 9) { if (args[8] == null) { this.add_iiiiiiiiii(FUNCTION_ID.TEXIMAGE2D_PIXEL, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], 0); } else if (args[8] instanceof ArrayBuffer || ArrayBuffer.isView(args[8])) { var ab = args[8]; var nAlignLength = this.getAlignLength(ab); this.add_iiiiiiiii(FUNCTION_ID.TEXIMAGE2D_PIXEL, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); this.wab(ab, ab.byteLength, nAlignLength); } } } texStorage2D(target, levels, internalformat, width, height) { this.add_iiiiii(FUNCTION_ID.TEXSTORAGE2D, target, levels, internalformat, width, height); } texParameterf(target, pname, param) { this.add_iiif(FUNCTION_ID.TEXPARAMETERF, target, pname, param); } texParameteri(target, pname, param) { this.add_iiii(FUNCTION_ID.TEXPARAMETERI, target, pname, param); } texSubImage2D(_args) { var args = arguments; if (args.length == 7) { if (args[6]._nativeObj) { this.add_iiiiiiii(FUNCTION_ID.TEXSUBIMAGE2D, args[0], args[1], args[2], args[3], args[4], args[5], args[6]._nativeObj.conchImgId); } } else if (args.length == 9) { if (args[8] == null) { this.add_iiiiiiiiii(FUNCTION_ID.TEXSUBIMAGE2D_PIXEL, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], 0); } else if (args[8] instanceof ArrayBuffer || ArrayBuffer.isView(args[8])) { var ab = args[8]; var nAlignLength = this.getAlignLength(ab); this.add_iiiiiiiii(FUNCTION_ID.TEXSUBIMAGE2D_PIXEL, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); this.wab(ab, ab.byteLength, nAlignLength); } } } uniform1f(location, x) { this.add_iif(FUNCTION_ID.UNIFORM1F, location, x); } uniform1fv(location, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniform1fv_laya(location, values); } uniform1fv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM1FV, location); this.wab(values, values.byteLength, nAlignLength); } uniform1i(location, x) { this.add_iii(FUNCTION_ID.UNIFORM1I, location, x); } uniform1iv(location, values) { values = (values instanceof Array) ? new Int32Array(values) : values; this.uniform1iv_laya(location, values); } uniform1iv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM1IV, location); this.wab(values, values.byteLength, nAlignLength); } uniform2f(location, x, y) { this.add_iiff(FUNCTION_ID.UNIFORM2F, location, x, y); } uniform2fv(location, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniform2fv_laya(location, values); } uniform2fv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM2FV, location); this.wab(values, values.byteLength, nAlignLength); } uniform2i(location, x, y) { this.add_iiii(FUNCTION_ID.UNIFORM2I, location, x, y); } uniform2iv(location, values) { values = (values instanceof Array) ? new Int32Array(values) : values; this.uniform2iv_laya(location, values); } uniform2iv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM2IV, location); this.wab(values, values.byteLength, nAlignLength); } uniform3f(location, x, y, z) { this.add_iifff(FUNCTION_ID.UNIFORM3F, location, x, y, z); } uniform3fv(location, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniform3fv_laya(location, values); } uniform3fv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM3FV, location); this.wab(values, values.byteLength, nAlignLength); } uniform3i(location, x, y, z) { this.add_iiiii(FUNCTION_ID.UNIFORM3I, location, x, y, z); } uniform3iv(location, values) { values = (values instanceof Array) ? new Int32Array(values) : values; this.uniform3iv_laya(location, values); } uniform3iv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM3IV, location); this.wab(values, values.byteLength, nAlignLength); } uniform4f(location, x, y, z, w) { this.add_iiffff(FUNCTION_ID.UNIFORM4F, location, x, y, z, w); } uniform4fv(location, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniform4fv_laya(location, values); } uniform4fv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM4FV, location); this.wab(values, values.byteLength, nAlignLength); } uniform4i(location, x, y, z, w) { this.add_iiiiii(FUNCTION_ID.UNIFORM4I, location, x, y, z, w); } uniform4iv(location, values) { values = (values instanceof Array) ? new Int32Array(values) : values; this.uniform4iv_laya(location, values); } uniform4iv_laya(location, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.UNIFORM4IV, location); this.wab(values, values.byteLength, nAlignLength); } uniformMatrix2fv(location, transpose, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniformMatrix2fv_laya(location, transpose, values); } uniformMatrix2fv_laya(location, transpose, value) { var nAlignLength = this.getAlignLength(value); this.add_iii(FUNCTION_ID.UNIFORMMATRIX2FV, location, transpose); this.wab(value, value.byteLength, nAlignLength); } uniformMatrix3fv(location, transpose, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniformMatrix3fv_laya(location, transpose, values); } uniformMatrix3fv_laya(location, transpose, value) { var nAlignLength = this.getAlignLength(value); this.add_iii(FUNCTION_ID.UNIFORMMATRIX3FV, location, transpose); this.wab(value, value.byteLength, nAlignLength); } uniformMatrix4fv(location, transpose, values) { values = (values instanceof Array) ? new Float32Array(values) : values; this.uniformMatrix4fv_laya(location, transpose, values); } uniformMatrix4fv_laya(location, transpose, value) { var nAlignLength = this.getAlignLength(value); this.add_iii(FUNCTION_ID.UNIFORMMATRIX4FV, location, transpose); this.wab(value, value.byteLength, nAlignLength); } useProgram(program) { this.add_ii(FUNCTION_ID.USEPROGRAM, program ? program.id : 0); } validateProgram(program) { this.add_ii(FUNCTION_ID.VALIDATEPROGRAM, program.id); } vertexAttrib1f(indx, x) { this.add_iif(FUNCTION_ID.VERTEXATTRIB1F, indx, x); } vertexAttrib1fv(indx, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.VERTEXATTRIB1FV, indx); this.wab(values, values.byteLength, nAlignLength); } vertexAttrib2f(indx, x, y) { this.add_iiff(FUNCTION_ID.VERTEXATTRIB2F, indx, x, y); } vertexAttrib2fv(indx, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.VERTEXATTRIB2FV, indx); this.wab(values, values.byteLength, nAlignLength); } vertexAttrib3f(indx, x, y, z) { this.add_iifff(FUNCTION_ID.VERTEXATTRIB3F, indx, x, y, z); } vertexAttrib3fv(indx, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.VERTEXATTRIB3FV, indx); this.wab(values, values.byteLength, nAlignLength); } vertexAttrib4f(indx, x, y, z, w) { this.add_iiffff(FUNCTION_ID.VERTEXATTRIB4F, indx, x, y, z, w); } vertexAttrib4fv(indx, values) { var nAlignLength = this.getAlignLength(values); this.add_ii(FUNCTION_ID.VERTEXATTRIB4FV, indx); this.wab(values, values.byteLength, nAlignLength); } vertexAttribPointer(indx, size, type, normalized, stride, offset) { this.add_iiiiiii(FUNCTION_ID.VERTEXATTRIBPOINTER, indx, size, type, normalized, stride, offset); } viewport(x, y, width, height) { this.add_iiiii(FUNCTION_ID.VIEWPORT, x, y, width, height); } configureBackBuffer(width, height, antiAlias, enableDepthAndStencil, wantsBestResolution) { enableDepthAndStencil = enableDepthAndStencil ? enableDepthAndStencil : true; wantsBestResolution = wantsBestResolution ? wantsBestResolution : false; console.log("configureBackBuffer can't support"); } compressedTexImage2D(_args) { var args = arguments; var nAlignLength = this.getAlignLength(args[6]); this.add_iiiiiii(FUNCTION_ID.COMPRESSEDTEXIMAGE2D, args[0], args[1], args[2], args[3], args[4], args[5]); this.wab(args[6], args[6].byteLength, nAlignLength); } compressedTexSubImage2D(_args) { var args = arguments; var nAlignLength = this.getAlignLength(args[7]); this.add_iiiiiiii(FUNCTION_ID.COMPRESSEDTEXSUBIMAGE2D, args[0], args[1], args[2], args[3], args[4], args[5], args[6]); this.wab(args[7], args[7].byteLength, nAlignLength); } createVertexArray() { var fakeID = this.createFakeID(); this.add_ii(FUNCTION_ID.CREATEVERTEXARRAY, fakeID); return new WebGLVertextArray(fakeID); } bindVertexArray(vao) { this.add_ii(FUNCTION_ID.BINDVERTEXARRAY, vao ? vao.id : 0); } deleteVertexArray(vao) { this.deleteFakeID(vao.id); this.add_ii(FUNCTION_ID.DELETEVERTEXARRAYS, vao ? vao.id : 0); } isVertexArray(vao) { return vao.instanceof(WebGLVertextArray); } vertexAttribDivisor(index, divisor) { this.add_iii(FUNCTION_ID.VERTEXATTRIBDIVISOR, index, divisor); } drawArraysInstanced(mode, first, count, instanceCount) { this.add_iiiii(FUNCTION_ID.DRAWARRAYSINSTANCED, mode, first, count, instanceCount); } drawElementsInstanced(mode, count, type, offset, instanceCount) { this.add_iiiiii(FUNCTION_ID.DRAWELEMENTSINSTANCED, mode, count, type, offset, instanceCount); } uniformMatrix2fvEx(location, transpose, value) { if (!value["_ptrID"]) { this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true); } var nID = value["_ptrID"]; this._layagl.syncBufferToRenderThread(value); this.add_iiii(FUNCTION_ID.UNIFORMMATRIX2FVEX, location, transpose, nID); } uniformMatrix3fvEx(location, transpose, value) { if (!value["_ptrID"]) { this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true); } var nID = value["_ptrID"]; this._layagl.syncBufferToRenderThread(value); this.add_iiii(FUNCTION_ID.UNIFORMMATRIX3FVEX, location, transpose, nID); } uniformMatrix4fvEx(location, transpose, value) { if (!value["_ptrID"]) { this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true); } var nID = value["_ptrID"]; this._layagl.syncBufferToRenderThread(value); this.add_iiii(FUNCTION_ID.UNIFORMMATRIX4FVEX, location, transpose, nID); } addShaderUniform(one) { var funID = 0; var isArray = one.isArray; switch (one.type) { case GLCommandEncoder.INT: funID = isArray ? UNIFORM_TYPE.INTERIOR_UNIFORM1IV : UNIFORM_TYPE.INTERIOR_UNIFORM1I; break; case GLCommandEncoder.FLOAT: funID = isArray ? UNIFORM_TYPE.INTERIOR_UNIFORM1FV : UNIFORM_TYPE.INTERIOR_UNIFORM1F; break; case GLCommandEncoder.FLOAT_VEC2: funID = isArray ? UNIFORM_TYPE.INTERIOR_UNIFORM2FV : UNIFORM_TYPE.INTERIOR_UNIFORM2F; break; case GLCommandEncoder.FLOAT_VEC3: funID = isArray ? UNIFORM_TYPE.INTERIOR_UNIFORM3FV : UNIFORM_TYPE.INTERIOR_UNIFORM3F; break; case GLCommandEncoder.FLOAT_VEC4: funID = isArray ? UNIFORM_TYPE.INTERIOR_UNIFORM4FV : UNIFORM_TYPE.INTERIOR_UNIFORM4F; break; case GLCommandEncoder.SAMPLER_2D: funID = UNIFORM_TYPE.INTERIOR_UNIFORMSAMPLER_2D; break; case GLCommandEncoder.SAMPLER_CUBE: funID = UNIFORM_TYPE.INTERIOR_UNIFORMSAMPLER_CUBE; break; case GLCommandEncoder.FLOAT_MAT4: funID = UNIFORM_TYPE.INTERIOR_UNIFORMMATRIX4FV; break; case GLCommandEncoder.BOOL: funID = UNIFORM_TYPE.INTERIOR_UNIFORM1I; break; case GLCommandEncoder.FLOAT_MAT2: funID = UNIFORM_TYPE.INTERIOR_UNIFORMMATRIX2FV; break; case GLCommandEncoder.FLOAT_MAT3: funID = UNIFORM_TYPE.INTERIOR_UNIFORMMATRIX3FV; break; default: throw new Error("compile shader err!"); } this._layagl.syncBufferToRenderThread(this._buffer); this.add_iiiiii(FUNCTION_ID.ADDSHADERUNIFORM, funID, one.location, one.type, one.dataOffset, one.textureID); } uploadShaderUniforms(commandEncoder, data, type) { if (type == LayaGLContext.UPLOAD_SHADER_UNIFORM_TYPE_ID) { this._layagl.syncBufferToRenderThread(data); this.add_iii(FUNCTION_ID.UPLOADSHADERUNIFORMS, commandEncoder._buffer["_ptrID"], data._ptrID); } else { var nAlignLength = this.getAlignLength(data); this.add_ii(FUNCTION_ID.UPLOADSHADERUNIFORMS_BUFFER, commandEncoder._buffer["_ptrID"]); this.wab(data, data.byteLength, nAlignLength); } return 0; } createFakeID() { var frameCount = this._layagl.getFrameCount(); var fakeArray = GLCommandEncoder._fakeArray; for (var i = 0, n = fakeArray.length; i < n; i++) { var fakeObj = fakeArray[i]; if (fakeObj.id == -1 && fakeObj.frameCount != frameCount) { fakeObj.id = i; fakeObj.frameCount = frameCount; return i; } } var nID = ++GLCommandEncoder._fakeIDCount; fakeArray.push(new fakeIDObj(nID, frameCount)); return nID; } deleteFakeID(nID) { var fakeObj = GLCommandEncoder._fakeArray[nID]; fakeObj.id = -1; fakeObj.frameCount = this._layagl.getFrameCount(); } useCommandEncoder(commandEncoder) { if (commandEncoder._isSyncToRenderThread) { this._layagl.syncBufferToRenderThread(commandEncoder); } var loc = this._idata[0]; this.add_ii(FUNCTION_ID.USECOMMANDENCODER, commandEncoder.getPtrID()); return loc; } getProgramParameterEx(vs, ps, define, pname) { return this._layagl.getProgramParameterEx(vs, ps, define, pname); } getActiveAttribEx(vs, ps, define, index) { return this._layagl.getActiveAttribEx(vs, ps, define, index); } getActiveUniformEx(vs, ps, define, index) { return this._layagl.getActiveUniformEx(vs, ps, define, index); } loadDataToReg(regNum, data, offset, size) { var nAlignLength = this.getAlignLength(data); this.add_iiii(FUNCTION_ID.LOADDATATOREG, regNum, offset, size); this.wab(data, data.byteLength, nAlignLength); } loadDataToRegEx(regNum, dataID, offset, size) { this.add_iiiii(FUNCTION_ID.LOADDATATOREGEX, regNum, dataID, offset, size); } ifLess0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFLESS0, regNum, statementNum); } ifEqual0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFEQUAL0, regNum, statementNum); } ifGreater0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFGREATER0, regNum, statementNum); } ifLEqual0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFLEQUAL0, regNum, statementNum); } ifGEqual0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFGEQUAL0, regNum, statementNum); } ifGNotEqual0(regNum, statementNum) { this.add_iii(FUNCTION_ID.IFGNOTEQUAL0, regNum, statementNum); } operateReg(regOut, reg1, reg2, size, operateType, dataType) { this.add_iiiiiii(FUNCTION_ID.OPERATEREG, regOut, reg1, reg2, size, operateType, dataType); } store(dataID, offset, regID, size) { this.add_iiiii(FUNCTION_ID.STORE, dataID, offset, regID, size); } getAlignLength(data) { var byteLength = data.byteLength; return (byteLength + 3) & 0xfffffffc; } getStrLength(str) { var ab = conch.strTobufer(str); return ab.byteLength; } } GLCommandEncoder.INT = 0x1404; GLCommandEncoder.FLOAT = 0x1406; GLCommandEncoder.FLOAT_VEC2 = 0x8B50; GLCommandEncoder.FLOAT_VEC3 = 0x8B51; GLCommandEncoder.FLOAT_VEC4 = 0x8B52; GLCommandEncoder.INT_VEC2 = 0x8B53; GLCommandEncoder.INT_VEC3 = 0x8B54; GLCommandEncoder.INT_VEC4 = 0x8B55; GLCommandEncoder.BOOL = 0x8B56; GLCommandEncoder.BOOL_VEC2 = 0x8B57; GLCommandEncoder.BOOL_VEC3 = 0x8B58; GLCommandEncoder.BOOL_VEC4 = 0x8B59; GLCommandEncoder.FLOAT_MAT2 = 0x8B5A; GLCommandEncoder.FLOAT_MAT3 = 0x8B5B; GLCommandEncoder.FLOAT_MAT4 = 0x8B5C; GLCommandEncoder.SAMPLER_2D = 0x8B5E; GLCommandEncoder.SAMPLER_CUBE = 0x8B60; GLCommandEncoder._fakeIDCount = 0; GLCommandEncoder._fakeArray = [new fakeIDObj(0, 0)]; GLCommandEncoder._locTable = new ProgramLocationTable(); class LayaGLContext { constructor(contextType) { this.width = 0; this.height = 0; this.canvas = null; this._currentCmdEncoder = null; this._saveCommandEncoder = new Array(); this._currentContext = null; this._threadMode = LayaGLContext.THREAD_MODE_DOUBLE; this._curBindInfo = new BindInfo(); this.DEPTH_BUFFER_BIT = 0x00000100; this.STENCIL_BUFFER_BIT = 0x00000400; this.COLOR_BUFFER_BIT = 0x00004000; this.POINTS = 0x0000; this.LINES = 0x0001; this.LINE_LOOP = 0x0002; this.LINE_STRIP = 0x0003; this.TRIANGLES = 0x0004; this.TRIANGLE_STRIP = 0x0005; this.TRIANGLE_FAN = 0x0006; this.ZERO = 0; this.ONE = 1; this.SRC_COLOR = 0x0300; this.ONE_MINUS_SRC_COLOR = 0x0301; this.SRC_ALPHA = 0x0302; this.ONE_MINUS_SRC_ALPHA = 0x0303; this.DST_ALPHA = 0x0304; this.ONE_MINUS_DST_ALPHA = 0x0305; this.DST_COLOR = 0x0306; this.ONE_MINUS_DST_COLOR = 0x0307; this.SRC_ALPHA_SATURATE = 0x0308; this.FUNC_ADD = 0x8006; this.BLEND_EQUATION = 0x8009; this.BLEND_EQUATION_RGB = 0x8009; this.BLEND_EQUATION_ALPHA = 0x883D; this.FUNC_SUBTRACT = 0x800A; this.FUNC_REVERSE_SUBTRACT = 0x800B; this.BLEND_DST_RGB = 0x80C8; this.BLEND_SRC_RGB = 0x80C9; this.BLEND_DST_ALPHA = 0x80CA; this.BLEND_SRC_ALPHA = 0x80CB; this.CONSTANT_COLOR = 0x8001; this.ONE_MINUS_CONSTANT_COLOR = 0x8002; this.CONSTANT_ALPHA = 0x8003; this.ONE_MINUS_CONSTANT_ALPHA = 0x8004; this.BLEND_COLOR = 0x8005; this.ARRAY_BUFFER = 0x8892; this.ELEMENT_ARRAY_BUFFER = 0x8893; this.ARRAY_BUFFER_BINDING = 0x8894; this.ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; this.STREAM_DRAW = 0x88E0; this.STATIC_DRAW = 0x88E4; this.DYNAMIC_DRAW = 0x88E8; this.BUFFER_SIZE = 0x8764; this.BUFFER_USAGE = 0x8765; this.CURRENT_VERTEX_ATTRIB = 0x8626; this.FRONT = 0x0404; this.BACK = 0x0405; this.FRONT_AND_BACK = 0x0408; this.CULL_FACE = 0x0B44; this.BLEND = 0x0BE2; this.DITHER = 0x0BD0; this.STENCIL_TEST = 0x0B90; this.DEPTH_TEST = 0x0B71; this.SCISSOR_TEST = 0x0C11; this.POLYGON_OFFSET_FILL = 0x8037; this.SAMPLE_ALPHA_TO_COVERAGE = 0x809E; this.SAMPLE_COVERAGE = 0x80A0; this.INVALID_ENUM = 0x0500; this.INVALID_VALUE = 0x0501; this.INVALID_OPERATION = 0x0502; this.OUT_OF_MEMORY = 0x0505; this.CW = 0x0900; this.CCW = 0x0901; this.LINE_WIDTH = 0x0B21; this.ALIASED_POINT_SIZE_RANGE = 0x846D; this.ALIASED_LINE_WIDTH_RANGE = 0x846E; this.CULL_FACE_MODE = 0x0B45; this.FRONT_FACE = 0x0B46; this.DEPTH_RANGE = 0x0B70; this.DEPTH_WRITEMASK = 0x0B72; this.DEPTH_CLEAR_VALUE = 0x0B73; this.DEPTH_FUNC = 0x0B74; this.STENCIL_CLEAR_VALUE = 0x0B91; this.STENCIL_FUNC = 0x0B92; this.STENCIL_FAIL = 0x0B94; this.STENCIL_PASS_DEPTH_FAIL = 0x0B95; this.STENCIL_PASS_DEPTH_PASS = 0x0B96; this.STENCIL_REF = 0x0B97; this.STENCIL_VALUE_MASK = 0x0B93; this.STENCIL_WRITEMASK = 0x0B98; this.STENCIL_BACK_FUNC = 0x8800; this.STENCIL_BACK_FAIL = 0x8801; this.STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; this.STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; this.STENCIL_BACK_REF = 0x8CA3; this.STENCIL_BACK_VALUE_MASK = 0x8CA4; this.STENCIL_BACK_WRITEMASK = 0x8CA5; this.VIEWPORT = 0x0BA2; this.SCISSOR_BOX = 0x0C10; this.COLOR_CLEAR_VALUE = 0x0C22; this.COLOR_WRITEMASK = 0x0C23; this.UNPACK_ALIGNMENT = 0x0CF5; this.PACK_ALIGNMENT = 0x0D05; this.MAX_TEXTURE_SIZE = 0x0D33; this.MAX_VIEWPORT_DIMS = 0x0D3A; this.SUBPIXEL_BITS = 0x0D50; this.RED_BITS = 0x0D52; this.GREEN_BITS = 0x0D53; this.BLUE_BITS = 0x0D54; this.ALPHA_BITS = 0x0D55; this.DEPTH_BITS = 0x0D56; this.STENCIL_BITS = 0x0D57; this.POLYGON_OFFSET_UNITS = 0x2A00; this.POLYGON_OFFSET_FACTOR = 0x8038; this.TEXTURE_BINDING_2D = 0x8069; this.SAMPLE_BUFFERS = 0x80A8; this.SAMPLES = 0x80A9; this.SAMPLE_COVERAGE_VALUE = 0x80AA; this.SAMPLE_COVERAGE_INVERT = 0x80AB; this.COMPRESSED_TEXTURE_FORMATS = 0x86A3; this.DONT_CARE = 0x1100; this.FASTEST = 0x1101; this.NICEST = 0x1102; this.GENERATE_MIPMAP_HINT = 0x8192; this.BYTE = 0x1400; this.UNSIGNED_BYTE = 0x1401; this.SHORT = 0x1402; this.UNSIGNED_SHORT = 0x1403; this.INT = 0x1404; this.UNSIGNED_INT = 0x1405; this.FLOAT = 0x1406; this.DEPTH_COMPONENT = 0x1902; this.ALPHA = 0x1906; this.RGB = 0x1907; this.RGBA = 0x1908; this.LUMINANCE = 0x1909; this.LUMINANCE_ALPHA = 0x190A; this.UNSIGNED_SHORT_4_4_4_4 = 0x8033; this.UNSIGNED_SHORT_5_5_5_1 = 0x8034; this.UNSIGNED_SHORT_5_6_5 = 0x8363; this.FRAGMENT_SHADER = 0x8B30; this.VERTEX_SHADER = 0x8B31; this.MAX_VERTEX_ATTRIBS = 0x8869; this.MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; this.MAX_VARYING_VECTORS = 0x8DFC; this.MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; this.MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; this.MAX_TEXTURE_IMAGE_UNITS = 0x8872; this.MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; this.MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; this.TEXTURE_MAX_ANISOTROPY_EXT = 34046; this.SHADER_TYPE = 0x8B4F; this.DELETE_STATUS = 0x8B80; this.LINK_STATUS = 0x8B82; this.VALIDATE_STATUS = 0x8B83; this.ATTACHED_SHADERS = 0x8B85; this.ACTIVE_UNIFORMS = 0x8B86; this.ACTIVE_ATTRIBUTES = 0x8B89; this.SHADING_LANGUAGE_VERSION = 0x8B8C; this.CURRENT_PROGRAM = 0x8B8D; this.NEVER = 0x0200; this.LESS = 0x0201; this.EQUAL = 0x0202; this.LEQUAL = 0x0203; this.GREATER = 0x0204; this.NOTEQUAL = 0x0205; this.GEQUAL = 0x0206; this.ALWAYS = 0x0207; this.KEEP = 0x1E00; this.REPLACE = 0x1E01; this.INCR = 0x1E02; this.DECR = 0x1E03; this.INVERT = 0x150A; this.INCR_WRAP = 0x8507; this.DECR_WRAP = 0x8508; this.VENDOR = 0x1F00; this.RENDERER = 0x1F01; this.VERSION = 0x1F02; this.NEAREST = 0x2600; this.LINEAR = 0x2601; this.NEAREST_MIPMAP_NEAREST = 0x2700; this.LINEAR_MIPMAP_NEAREST = 0x2701; this.NEAREST_MIPMAP_LINEAR = 0x2702; this.LINEAR_MIPMAP_LINEAR = 0x2703; this.TEXTURE_MAG_FILTER = 0x2800; this.TEXTURE_MIN_FILTER = 0x2801; this.TEXTURE_WRAP_S = 0x2802; this.TEXTURE_WRAP_T = 0x2803; this.TEXTURE_2D = 0x0DE1; this.TEXTURE = 0x1702; this.TEXTURE_CUBE_MAP = 0x8513; this.TEXTURE_BINDING_CUBE_MAP = 0x8514; this.TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; this.TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; this.TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; this.TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; this.TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; this.TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; this.MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; this.TEXTURE0 = 0x84C0; this.TEXTURE1 = 0x84C1; this.TEXTURE2 = 0x84C2; this.TEXTURE3 = 0x84C3; this.TEXTURE4 = 0x84C4; this.TEXTURE5 = 0x84C5; this.TEXTURE6 = 0x84C6; this.TEXTURE7 = 0x84C7; this.TEXTURE8 = 0x84C8; this.TEXTURE9 = 0x84C9; this.TEXTURE10 = 0x84CA; this.TEXTURE11 = 0x84CB; this.TEXTURE12 = 0x84CC; this.TEXTURE13 = 0x84CD; this.TEXTURE14 = 0x84CE; this.TEXTURE15 = 0x84CF; this.TEXTURE16 = 0x84D0; this.TEXTURE17 = 0x84D1; this.TEXTURE18 = 0x84D2; this.TEXTURE19 = 0x84D3; this.TEXTURE20 = 0x84D4; this.TEXTURE21 = 0x84D5; this.TEXTURE22 = 0x84D6; this.TEXTURE23 = 0x84D7; this.TEXTURE24 = 0x84D8; this.TEXTURE25 = 0x84D9; this.TEXTURE26 = 0x84DA; this.TEXTURE27 = 0x84DB; this.TEXTURE28 = 0x84DC; this.TEXTURE29 = 0x84DD; this.TEXTURE30 = 0x84DE; this.TEXTURE31 = 0x84DF; this.ACTIVE_TEXTURE = 0x84E0; this.REPEAT = 0x2901; this.CLAMP_TO_EDGE = 0x812F; this.MIRRORED_REPEAT = 0x8370; this.FLOAT_VEC2 = 0x8B50; this.FLOAT_VEC3 = 0x8B51; this.FLOAT_VEC4 = 0x8B52; this.INT_VEC2 = 0x8B53; this.INT_VEC3 = 0x8B54; this.INT_VEC4 = 0x8B55; this.BOOL = 0x8B56; this.BOOL_VEC2 = 0x8B57; this.BOOL_VEC3 = 0x8B58; this.BOOL_VEC4 = 0x8B59; this.FLOAT_MAT2 = 0x8B5A; this.FLOAT_MAT3 = 0x8B5B; this.FLOAT_MAT4 = 0x8B5C; this.SAMPLER_2D = 0x8B5E; this.SAMPLER_CUBE = 0x8B60; this.VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; this.VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; this.VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; this.VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; this.VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; this.VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; this.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; this.IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; this.IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; this.COMPILE_STATUS = 0x8B81; this.LOW_FLOAT = 0x8DF0; this.MEDIUM_FLOAT = 0x8DF1; this.HIGH_FLOAT = 0x8DF2; this.LOW_INT = 0x8DF3; this.MEDIUM_INT = 0x8DF4; this.HIGH_INT = 0x8DF5; this.FRAMEBUFFER = 0x8D40; this.RENDERBUFFER = 0x8D41; this.RGBA4 = 0x8056; this.RGB5_A1 = 0x8057; this.RGB565 = 0x8D62; this.DEPTH_COMPONENT16 = 0x81A5; this.STENCIL_INDEX = 0x1901; this.STENCIL_INDEX8 = 0x8D48; this.DEPTH_STENCIL = 0x84F9; this.RENDERBUFFER_WIDTH = 0x8D42; this.RENDERBUFFER_HEIGHT = 0x8D43; this.RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; this.RENDERBUFFER_RED_SIZE = 0x8D50; this.RENDERBUFFER_GREEN_SIZE = 0x8D51; this.RENDERBUFFER_BLUE_SIZE = 0x8D52; this.RENDERBUFFER_ALPHA_SIZE = 0x8D53; this.RENDERBUFFER_DEPTH_SIZE = 0x8D54; this.RENDERBUFFER_STENCIL_SIZE = 0x8D55; this.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; this.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; this.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; this.COLOR_ATTACHMENT0 = 0x8CE0; this.DEPTH_ATTACHMENT = 0x8D00; this.STENCIL_ATTACHMENT = 0x8D20; this.DEPTH_STENCIL_ATTACHMENT = 0x821A; this.NONE = 0; this.FRAMEBUFFER_COMPLETE = 0x8CD5; this.FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; this.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; this.FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; this.FRAMEBUFFER_UNSUPPORTED = 0x8CDD; this.FRAMEBUFFER_BINDING = 0x8CA6; this.RENDERBUFFER_BINDING = 0x8CA7; this.MAX_RENDERBUFFER_SIZE = 0x84E8; this.INVALID_FRAMEBUFFER_OPERATION = 0x0506; this.UNPACK_FLIP_Y_WEBGL = 0x9240; this.UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; this.CONTEXT_LOST_WEBGL = 0x9242; this.UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; this.BROWSER_DEFAULT_WEBGL = 0x9244; this.READ_BUFFER = 0x0C02; this.UNPACK_ROW_LENGTH = 0x0CF2; this.UNPACK_SKIP_ROWS = 0x0CF3; this.UNPACK_SKIP_PIXELS = 0x0CF4; this.PACK_ROW_LENGTH = 0x0D02; this.PACK_SKIP_ROWS = 0x0D03; this.PACK_SKIP_PIXELS = 0x0D04; this.COLOR = 0x1800; this.DEPTH = 0x1801; this.STENCIL = 0x1802; this.RED = 0x1903; this.RGB8 = 0x8051; this.RGBA8 = 0x8058; this.RGB10_A2 = 0x8059; this.TEXTURE_BINDING_3D = 0x806A; this.UNPACK_SKIP_IMAGES = 0x806D; this.UNPACK_IMAGE_HEIGHT = 0x806E; this.TEXTURE_3D = 0x806F; this.TEXTURE_WRAP_R = 0x8072; this.MAX_3D_TEXTURE_SIZE = 0x8073; this.UNSIGNED_INT_2_10_10_10_REV = 0x8368; this.MAX_ELEMENTS_VERTICES = 0x80E8; this.MAX_ELEMENTS_INDICES = 0x80E9; this.TEXTURE_MIN_LOD = 0x813A; this.TEXTURE_MAX_LOD = 0x813B; this.TEXTURE_BASE_LEVEL = 0x813C; this.TEXTURE_MAX_LEVEL = 0x813D; this.MIN = 0x8007; this.MAX = 0x8008; this.DEPTH_COMPONENT24 = 0x81A6; this.MAX_TEXTURE_LOD_BIAS = 0x84FD; this.TEXTURE_COMPARE_MODE = 0x884C; this.TEXTURE_COMPARE_FUNC = 0x884D; this.CURRENT_QUERY = 0x8865; this.QUERY_RESULT = 0x8866; this.QUERY_RESULT_AVAILABLE = 0x8867; this.STREAM_READ = 0x88E1; this.STREAM_COPY = 0x88E2; this.STATIC_READ = 0x88E5; this.STATIC_COPY = 0x88E6; this.DYNAMIC_READ = 0x88E9; this.DYNAMIC_COPY = 0x88EA; this.MAX_DRAW_BUFFERS = 0x8824; this.DRAW_BUFFER0 = 0x8825; this.DRAW_BUFFER1 = 0x8826; this.DRAW_BUFFER2 = 0x8827; this.DRAW_BUFFER3 = 0x8828; this.DRAW_BUFFER4 = 0x8829; this.DRAW_BUFFER5 = 0x882A; this.DRAW_BUFFER6 = 0x882B; this.DRAW_BUFFER7 = 0x882C; this.DRAW_BUFFER8 = 0x882D; this.DRAW_BUFFER9 = 0x882E; this.DRAW_BUFFER10 = 0x882F; this.DRAW_BUFFER11 = 0x8830; this.DRAW_BUFFER12 = 0x8831; this.DRAW_BUFFER13 = 0x8832; this.DRAW_BUFFER14 = 0x8833; this.DRAW_BUFFER15 = 0x8834; this.MAX_FRAGMENT_UNIFORM_COMPONENTS = 0x8B49; this.MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A; this.SAMPLER_3D = 0x8B5F; this.SAMPLER_2D_SHADOW = 0x8B62; this.FRAGMENT_SHADER_DERIVATIVE_HINT = 0x8B8B; this.PIXEL_PACK_BUFFER = 0x88EB; this.PIXEL_UNPACK_BUFFER = 0x88EC; this.PIXEL_PACK_BUFFER_BINDING = 0x88ED; this.PIXEL_UNPACK_BUFFER_BINDING = 0x88EF; this.FLOAT_MAT2x3 = 0x8B65; this.FLOAT_MAT2x4 = 0x8B66; this.FLOAT_MAT3x2 = 0x8B67; this.FLOAT_MAT3x4 = 0x8B68; this.FLOAT_MAT4x2 = 0x8B69; this.FLOAT_MAT4x3 = 0x8B6A; this.SRGB = 0x8C40; this.SRGB8 = 0x8C41; this.SRGB8_ALPHA8 = 0x8C43; this.COMPARE_REF_TO_TEXTURE = 0x884E; this.RGBA32F = 0x8814; this.RGB32F = 0x8815; this.RGBA16F = 0x881A; this.RGB16F = 0x881B; this.VERTEX_ATTRIB_ARRAY_INTEGER = 0x88FD; this.MAX_ARRAY_TEXTURE_LAYERS = 0x88FF; this.MIN_PROGRAM_TEXEL_OFFSET = 0x8904; this.MAX_PROGRAM_TEXEL_OFFSET = 0x8905; this.MAX_VARYING_COMPONENTS = 0x8B4B; this.TEXTURE_2D_ARRAY = 0x8C1A; this.TEXTURE_BINDING_2D_ARRAY = 0x8C1D; this.R11F_G11F_B10F = 0x8C3A; this.UNSIGNED_INT_10F_11F_11F_REV = 0x8C3B; this.RGB9_E5 = 0x8C3D; this.UNSIGNED_INT_5_9_9_9_REV = 0x8C3E; this.TRANSFORM_FEEDBACK_BUFFER_MODE = 0x8C7F; this.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 0x8C80; this.TRANSFORM_FEEDBACK_VARYINGS = 0x8C83; this.TRANSFORM_FEEDBACK_BUFFER_START = 0x8C84; this.TRANSFORM_FEEDBACK_BUFFER_SIZE = 0x8C85; this.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 0x8C88; this.RASTERIZER_DISCARD = 0x8C89; this.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 0x8C8A; this.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 0x8C8B; this.INTERLEAVED_ATTRIBS = 0x8C8C; this.SEPARATE_ATTRIBS = 0x8C8D; this.TRANSFORM_FEEDBACK_BUFFER = 0x8C8E; this.TRANSFORM_FEEDBACK_BUFFER_BINDING = 0x8C8F; this.RGBA32UI = 0x8D70; this.RGB32UI = 0x8D71; this.RGBA16UI = 0x8D76; this.RGB16UI = 0x8D77; this.RGBA8UI = 0x8D7C; this.RGB8UI = 0x8D7D; this.RGBA32I = 0x8D82; this.RGB32I = 0x8D83; this.RGBA16I = 0x8D88; this.RGB16I = 0x8D89; this.RGBA8I = 0x8D8E; this.RGB8I = 0x8D8F; this.RED_INTEGER = 0x8D94; this.RGB_INTEGER = 0x8D98; this.RGBA_INTEGER = 0x8D99; this.SAMPLER_2D_ARRAY = 0x8DC1; this.SAMPLER_2D_ARRAY_SHADOW = 0x8DC4; this.SAMPLER_CUBE_SHADOW = 0x8DC5; this.UNSIGNED_INT_VEC2 = 0x8DC6; this.UNSIGNED_INT_VEC3 = 0x8DC7; this.UNSIGNED_INT_VEC4 = 0x8DC8; this.INT_SAMPLER_2D = 0x8DCA; this.INT_SAMPLER_3D = 0x8DCB; this.INT_SAMPLER_CUBE = 0x8DCC; this.INT_SAMPLER_2D_ARRAY = 0x8DCF; this.UNSIGNED_INT_SAMPLER_2D = 0x8DD2; this.UNSIGNED_INT_SAMPLER_3D = 0x8DD3; this.UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4; this.UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7; this.DEPTH_COMPONENT32F = 0x8CAC; this.DEPTH32F_STENCIL8 = 0x8CAD; this.FLOAT_32_UNSIGNED_INT_24_8_REV = 0x8DAD; this.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210; this.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 0x8211; this.FRAMEBUFFER_ATTACHMENT_RED_SIZE = 0x8212; this.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 0x8213; this.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 0x8214; this.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 0x8215; this.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 0x8216; this.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 0x8217; this.FRAMEBUFFER_DEFAULT = 0x8218; this.UNSIGNED_INT_24_8 = 0x84FA; this.DEPTH24_STENCIL8 = 0x88F0; this.UNSIGNED_NORMALIZED = 0x8C17; this.DRAW_FRAMEBUFFER_BINDING = 0x8CA6; this.READ_FRAMEBUFFER = 0x8CA8; this.DRAW_FRAMEBUFFER = 0x8CA9; this.READ_FRAMEBUFFER_BINDING = 0x8CAA; this.RENDERBUFFER_SAMPLES = 0x8CAB; this.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 0x8CD4; this.MAX_COLOR_ATTACHMENTS = 0x8CDF; this.COLOR_ATTACHMENT1 = 0x8CE1; this.COLOR_ATTACHMENT2 = 0x8CE2; this.COLOR_ATTACHMENT3 = 0x8CE3; this.COLOR_ATTACHMENT4 = 0x8CE4; this.COLOR_ATTACHMENT5 = 0x8CE5; this.COLOR_ATTACHMENT6 = 0x8CE6; this.COLOR_ATTACHMENT7 = 0x8CE7; this.COLOR_ATTACHMENT8 = 0x8CE8; this.COLOR_ATTACHMENT9 = 0x8CE9; this.COLOR_ATTACHMENT10 = 0x8CEA; this.COLOR_ATTACHMENT11 = 0x8CEB; this.COLOR_ATTACHMENT12 = 0x8CEC; this.COLOR_ATTACHMENT13 = 0x8CED; this.COLOR_ATTACHMENT14 = 0x8CEE; this.COLOR_ATTACHMENT15 = 0x8CEF; this.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 0x8D56; this.MAX_SAMPLES = 0x8D57; this.HALF_FLOAT = 0x140B; this.RG = 0x8227; this.RG_INTEGER = 0x8228; this.R8 = 0x8229; this.RG8 = 0x822B; this.R16F = 0x822D; this.R32F = 0x822E; this.RG16F = 0x822F; this.RG32F = 0x8230; this.R8I = 0x8231; this.R8UI = 0x8232; this.R16I = 0x8233; this.R16UI = 0x8234; this.R32I = 0x8235; this.R32UI = 0x8236; this.RG8I = 0x8237; this.RG8UI = 0x8238; this.RG16I = 0x8239; this.RG16UI = 0x823A; this.RG32I = 0x823B; this.RG32UI = 0x823C; this.VERTEX_ARRAY_BINDING = 0x85B5; this.R8_SNORM = 0x8F94; this.RG8_SNORM = 0x8F95; this.RGB8_SNORM = 0x8F96; this.RGBA8_SNORM = 0x8F97; this.SIGNED_NORMALIZED = 0x8F9C; this.COPY_READ_BUFFER = 0x8F36; this.COPY_WRITE_BUFFER = 0x8F37; this.COPY_READ_BUFFER_BINDING = 0x8F36; this.COPY_WRITE_BUFFER_BINDING = 0x8F37; this.UNIFORM_BUFFER = 0x8A11; this.UNIFORM_BUFFER_BINDING = 0x8A28; this.UNIFORM_BUFFER_START = 0x8A29; this.UNIFORM_BUFFER_SIZE = 0x8A2A; this.MAX_VERTEX_UNIFORM_BLOCKS = 0x8A2B; this.MAX_FRAGMENT_UNIFORM_BLOCKS = 0x8A2D; this.MAX_COMBINED_UNIFORM_BLOCKS = 0x8A2E; this.MAX_UNIFORM_BUFFER_BINDINGS = 0x8A2F; this.MAX_UNIFORM_BLOCK_SIZE = 0x8A30; this.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 0x8A31; this.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 0x8A33; this.UNIFORM_BUFFER_OFFSET_ALIGNMENT = 0x8A34; this.ACTIVE_UNIFORM_BLOCKS = 0x8A36; this.UNIFORM_TYPE = 0x8A37; this.UNIFORM_SIZE = 0x8A38; this.UNIFORM_BLOCK_INDEX = 0x8A3A; this.UNIFORM_OFFSET = 0x8A3B; this.UNIFORM_ARRAY_STRIDE = 0x8A3C; this.UNIFORM_MATRIX_STRIDE = 0x8A3D; this.UNIFORM_IS_ROW_MAJOR = 0x8A3E; this.UNIFORM_BLOCK_BINDING = 0x8A3F; this.UNIFORM_BLOCK_DATA_SIZE = 0x8A40; this.UNIFORM_BLOCK_ACTIVE_UNIFORMS = 0x8A42; this.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 0x8A43; this.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 0x8A44; this.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 0x8A46; this.INVALID_INDEX = 0xFFFFFFFF; this.MAX_VERTEX_OUTPUT_COMPONENTS = 0x9122; this.MAX_FRAGMENT_INPUT_COMPONENTS = 0x9125; this.MAX_SERVER_WAIT_TIMEOUT = 0x9111; this.OBJECT_TYPE = 0x9112; this.SYNC_CONDITION = 0x9113; this.SYNC_STATUS = 0x9114; this.SYNC_FLAGS = 0x9115; this.SYNC_FENCE = 0x9116; this.SYNC_GPU_COMMANDS_COMPLETE = 0x9117; this.UNSIGNALED = 0x9118; this.SIGNALED = 0x9119; this.ALREADY_SIGNALED = 0x911A; this.TIMEOUT_EXPIRED = 0x911B; this.CONDITION_SATISFIED = 0x911C; this.WAIT_FAILED = 0x911D; this.SYNC_FLUSH_COMMANDS_BIT = 0x00000001; this.VERTEX_ATTRIB_ARRAY_DIVISOR = 0x88FE; this.ANY_SAMPLES_PASSED = 0x8C2F; this.ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8D6A; this.SAMPLER_BINDING = 0x8919; this.RGB10_A2UI = 0x906F; this.INT_2_10_10_10_REV = 0x8D9F; this.TRANSFORM_FEEDBACK = 0x8E22; this.TRANSFORM_FEEDBACK_PAUSED = 0x8E23; this.TRANSFORM_FEEDBACK_ACTIVE = 0x8E24; this.TRANSFORM_FEEDBACK_BINDING = 0x8E25; this.TEXTURE_IMMUTABLE_FORMAT = 0x912F; this.MAX_ELEMENT_INDEX = 0x8D6B; this.TEXTURE_IMMUTABLE_LEVELS = 0x82DF; this.TIMEOUT_IGNORED = -1; this.MAX_CLIENT_WAIT_TIMEOUT_WEBGL = 0x9247; if (!LayaGLContext.instance) { LayaGLContext.__init__(); LayaGLContext.instance = this; } else { console.log("LayaGL is already exist"); return LayaGLContext.instance; } this._nativeObj = layagl; this._threadMode = this._nativeObj.getThreadMode(); contextType = contextType.toLowerCase(); if (contextType.indexOf("layagl") >= 0) { this._nativeObj.setSyncArrayBufferID(LayaGLContext._syncBufferList["_ptrID"]); this._nativeObj.setFrameAndSyncCountArrayBufferID(LayaGLContext._frameAndSyncCountBuffer["_ptrID"]); this._defaultEncoder = new GLCommandEncoder(this, 102400, 1280, false); this._currentCmdEncoder = this._defaultEncoder; this._saveCommandEncoder.push(this._currentCmdEncoder); this._nativeObj.setRootCommandEncoder(this._currentCmdEncoder._buffer["_ptrID"]); } else { this._nativeObj.setSyncArrayBufferID(LayaGLContext._syncBufferList["_ptrID"]); this._nativeObj.setFrameAndSyncCountArrayBufferID(LayaGLContext._frameAndSyncCountBuffer["_ptrID"]); this._defaultEncoder = new GLCommandEncoder(this, 102400, 1280, false); this._currentCmdEncoder = this._defaultEncoder; this._nativeObj.setRootCommandEncoder(this._defaultEncoder._buffer["_ptrID"]); } } static __init__() { LayaGLContext._syncBufferList = new Int32Array(LayaGLContext._syncBufferSize); LayaGLContext._syncBufferList["conchRef"] = webglPlus.createArrayBufferRef(LayaGLContext._syncBufferList, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, false, LayaGLContext.ARRAY_BUFFER_REF_REFERENCE); LayaGLContext._syncBufferList["_ptrID"] = LayaGLContext._syncBufferList["conchRef"].id; LayaGLContext._frameAndSyncCountBuffer = new Int32Array(2); LayaGLContext._frameAndSyncCountBuffer["conchRef"] = webglPlus.createArrayBufferRef(LayaGLContext._frameAndSyncCountBuffer, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, false, LayaGLContext.ARRAY_BUFFER_REF_REFERENCE); LayaGLContext._frameAndSyncCountBuffer["_ptrID"] = LayaGLContext._frameAndSyncCountBuffer["conchRef"].id; LayaGLContext._frameAndSyncCountBuffer[0] = 1; LayaGLContext._frameAndSyncCountBuffer[1] = 0; if (layagl.getThreadMode() > 1) { LayaGLContext.prototype.bindBuffer = LayaGLContext.prototype.bindBufferMutiThread; LayaGLContext.prototype.useProgram = LayaGLContext.prototype.useProgramMutiThread; GLCommandEncoder.prototype.getUniform = GLCommandEncoder.prototype.getUniformMutiThread; } } static getFrameCount() { return LayaGLContext._frameAndSyncCountBuffer[0]; } getFrameCount() { return LayaGLContext._frameAndSyncCountBuffer[0]; } syncBufferToRenderThread(value, index = 0) { if (LayaGLContext.instance._threadMode == LayaGLContext.THREAD_MODE_SINGLE) return; var bNeedSync = false; if (!value._refArray) { if (value.frameCount != LayaGLContext._frameAndSyncCountBuffer[0]) { value.frameCount = LayaGLContext._frameAndSyncCountBuffer[0]; bNeedSync = true; } } else { var obj = value._refArray[index]; if (obj.frameCount != LayaGLContext._frameAndSyncCountBuffer[0]) { obj.frameCount = LayaGLContext._frameAndSyncCountBuffer[0]; bNeedSync = true; } } if (bNeedSync) { if ((LayaGLContext._frameAndSyncCountBuffer[1] + 1) > LayaGLContext._syncBufferSize) { var pre = LayaGLContext._syncBufferList; var preConchRef = LayaGLContext._syncBufferList["conchRef"]; var prePtrID = LayaGLContext._syncBufferList["_ptrID"]; LayaGLContext._syncBufferSize += LayaGLContext._SYNC_ARRAYBUFFER_SIZE_; LayaGLContext._syncBufferList = new Int32Array(LayaGLContext._syncBufferSize); LayaGLContext._syncBufferList["conchRef"] = preConchRef; LayaGLContext._syncBufferList["_ptrID"] = prePtrID; pre && LayaGLContext._syncBufferList.set(pre, 0); webglPlus.updateArrayBufferRef(LayaGLContext._syncBufferList["_ptrID"], false, LayaGLContext._syncBufferList); } var nID = value.getPtrID ? value.getPtrID(index) : value["_ptrID"]; if (!nID) { alert("syncBufferToRenderThread id error"); debugger; } LayaGLContext._syncBufferList[LayaGLContext._frameAndSyncCountBuffer[1]++] = nID; } } getDefaultCommandEncoder() { return this._defaultEncoder; } commit() { this._saveCommandEncoder.length = 0; this._currentCmdEncoder = this._defaultEncoder; this._saveCommandEncoder.push(this._currentCmdEncoder); } setBind(pname, buffer) { this._curBindInfo.setBind(pname, buffer); } getBind(pname) { return this._curBindInfo.getBind(pname); } addGlobalValueDefine(modifyType, type, size, defaultData) { return this._nativeObj.addGlobalValueDefine(modifyType, type, size, defaultData); } endGlobalValueDefine() { this._nativeObj.endGlobalValueDefine(); } defineShaderMacro(macroString, uniformInfo) { var nID = LayaGLContext._shader_macro_id_; var sUniformInfo = ""; var len = uniformInfo.length; for (var i = 0; i < len; i++) { sUniformInfo += uniformInfo[i].uname + "," + uniformInfo[i].id.toString() + ","; } this._nativeObj.defineShaderMacro(nID, macroString, sUniformInfo); LayaGLContext._shader_macro_id_ <<= 1; return nID; } setCanvasType(type) { } setSize(w, h) { if (!isNaN(w) && !isNaN(h)) { this.width = w; this.height = h; this._nativeObj.setSize(w, h); } } createCommandEncoder(reserveSize, adjustSize, isSyncToRenderThread) { reserveSize = reserveSize ? reserveSize : 128; adjustSize = adjustSize ? adjustSize : 64; isSyncToRenderThread = isSyncToRenderThread ? isSyncToRenderThread : false; var cmd = new GLCommandEncoder(this, reserveSize, adjustSize, isSyncToRenderThread); if (isSyncToRenderThread) { this.syncBufferToRenderThread(cmd); } return cmd; } beginCommandEncoding(commandEncoder) { commandEncoder = commandEncoder ? commandEncoder : this._defaultEncoder; this._saveCommandEncoder.push(commandEncoder); this._currentCmdEncoder = commandEncoder; } endCommandEncoding() { this._saveCommandEncoder.pop(); this._currentCmdEncoder = this._saveCommandEncoder[this._saveCommandEncoder.length - 1]; } getContextAttributes() { return this._currentCmdEncoder.getContextAttributes(); } get drawingBufferWidth() { return this.canvas.width; } get drawingBufferHeight() { return this.canvas.height; } isContextLost() { this._currentCmdEncoder.isContextLost(); } getSupportedExtensions() { return this._currentCmdEncoder.getSupportedExtensions(); } getExtension(name) { return this._currentCmdEncoder.getExtension(name); } activeTexture(texture) { this._currentCmdEncoder.activeTexture(texture); } attachShader(program, shader) { this._currentCmdEncoder.attachShader(program, shader); } getAttachedShaders(program) { let ret = []; if (program.vsShader) { ret.push(program.vsShader); } if (program.psShader) { ret.push(program.psShader); } return ret; } bindAttribLocation(program, index, name) { this._currentCmdEncoder.bindAttribLocation(program, index, name); } bindBuffer(target, buffer) { this.setBind(target, buffer); this._currentCmdEncoder.bindBuffer(target, buffer); } bindBufferMutiThread(target, buffer) { this._currentCmdEncoder.bindBuffer(target, buffer); } bindFramebuffer(target, framebuffer) { this._currentCmdEncoder.bindFramebuffer(target, framebuffer); this.setBind(target, framebuffer); } bindRenderbuffer(target, renderbuffer) { this._currentCmdEncoder.bindRenderbuffer(target, renderbuffer); this.setBind(target, renderbuffer); } bindTexture(target, texture) { this._currentCmdEncoder.bindTexture(target, texture); this.setBind(target, texture); } useTexture(texture) { this._currentCmdEncoder.useTexture(texture); } blendColor(red, green, blue, alpha) { this._currentCmdEncoder.blendColor(red, green, blue, alpha); } blendEquation(mode) { this._currentCmdEncoder.blendEquation(mode); } blendEquationSeparate(modeRGB, modeAlpha) { this._currentCmdEncoder.blendEquationSeparate(modeRGB, modeAlpha); } blendFunc(sfactor, dfactor) { this._currentCmdEncoder.blendFunc(sfactor, dfactor); } blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) { this._currentCmdEncoder.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); } bufferData(target, size, usage) { this._currentCmdEncoder.bufferData(target, size, usage); } bufferSubData(target, offset, data) { this._currentCmdEncoder.bufferSubData(target, offset, data); } checkFramebufferStatus(target) { return this._currentCmdEncoder.checkFramebufferStatus(target); } clear(mask) { this._currentCmdEncoder.clear(mask); } clearColor(red, green, blue, alpha) { this._currentCmdEncoder.clearColor(red, green, blue, alpha); } clearDepth(depth) { this._currentCmdEncoder.clearDepth(depth); } clearStencil(s) { this._currentCmdEncoder.clearStencil(s); } colorMask(red, green, blue, alpha) { this._currentCmdEncoder.colorMask(red, green, blue, alpha); } compileShader(shader) { this._currentCmdEncoder.compileShader(shader); } copyTexImage2D(target, level, internalformat, x, y, width, height, border) { this._currentCmdEncoder.copyTexImage2D(target, level, internalformat, x, y, width, height, border); } copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) { this._currentCmdEncoder.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); } createBuffer() { return this._currentCmdEncoder.createBuffer(); } createFramebuffer() { return this._currentCmdEncoder.createFramebuffer(); } createProgram() { return this._currentCmdEncoder.createProgram(); } createRenderbuffer() { return this._currentCmdEncoder.createRenderbuffer(); } createShader(type) { return this._currentCmdEncoder.createShader(type); } createTexture() { return this._currentCmdEncoder.createTexture(); } cullFace(mode) { this._currentCmdEncoder.cullFace(mode); } deleteBuffer(buffer) { this._currentCmdEncoder.deleteBuffer(buffer); buffer.id = -1; } deleteFramebuffer(framebuffer) { this._currentCmdEncoder.deleteFramebuffer(framebuffer); framebuffer.id = -1; } deleteProgram(program) { this._currentCmdEncoder.deleteProgram(program); program.id = -1; } deleteRenderbuffer(renderbuffer) { this._currentCmdEncoder.deleteRenderbuffer(renderbuffer); renderbuffer.id = -1; } deleteShader(shader) { this._currentCmdEncoder.deleteShader(shader); shader.id = -1; shader.src = null; } deleteTexture(texture) { this._currentCmdEncoder.deleteTexture(texture); texture.id = -1; } depthFunc(func) { this._currentCmdEncoder.depthFunc(func); } depthMask(flag) { this._currentCmdEncoder.depthMask(flag); } depthRange(zNear, zFar) { this._currentCmdEncoder.depthRange(zNear, zFar); } detachShader(program, shader) { this._currentCmdEncoder.detachShader(program, shader); } disable(cap) { this._currentCmdEncoder.disable(cap); } disableVertexAttribArray(index) { this._currentCmdEncoder.disableVertexAttribArray(index); } drawArrays(mode, first, count) { this._currentCmdEncoder.drawArrays(mode, first, count); } drawElements(mode, count, type, offset) { this._currentCmdEncoder.drawElements(mode, count, type, offset); } enable(cap) { this._currentCmdEncoder.enable(cap); } enableVertexAttribArray(index) { this._currentCmdEncoder.enableVertexAttribArray(index); } finish() { this._currentCmdEncoder.finish(); } flush() { this._currentCmdEncoder.flush(); } framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) { this._currentCmdEncoder.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); var frameBuffer = this.getBind(target); if (frameBuffer) { frameBuffer.setBind(attachment, renderbuffer); } } framebufferTexture2D(target, attachment, textarget, texture, level) { this._currentCmdEncoder.framebufferTexture2D(target, attachment, textarget, texture, level); var frameBuffer = this.getBind(target); if (frameBuffer) { frameBuffer.setBind(attachment, texture); } } frontFace(mode) { return this._currentCmdEncoder.frontFace(mode); } generateMipmap(target) { return this._currentCmdEncoder.generateMipmap(target); } getActiveAttrib(program, index) { return this._currentCmdEncoder.getActiveAttrib(program, index); } getActiveUniform(program, index) { return this._currentCmdEncoder.getActiveUniform(program, index); } getAttribLocation(program, name) { return this._currentCmdEncoder.getAttribLocation(program, name); } getParameter(pname) { return this._currentCmdEncoder.getParameter(pname); } getBufferParameter(target, pname) { return this._currentCmdEncoder.getBufferParameter(target, pname); } getError() { return this._currentCmdEncoder.getError(); } getFramebufferAttachmentParameter(target, attachment, pname) { return this._currentCmdEncoder.getFramebufferAttachmentParameter(target, attachment, pname); } getProgramParameter(program, pname) { return this._currentCmdEncoder.getProgramParameter(program, pname); } getProgramInfoLog(program) { return this._currentCmdEncoder.getProgramInfoLog(program); } getRenderbufferParameter(target, pname) { return this._currentCmdEncoder.getRenderbufferParameter(target, pname); } getShaderPrecisionFormat(shaderType, precisionType) { return this._currentCmdEncoder.getShaderPrecisionFormat(shaderType, precisionType); } getShaderParameter(shader, pname) { return this._currentCmdEncoder.getShaderParameter(shader, pname); } getShaderInfoLog(shader) { return this._currentCmdEncoder.getShaderInfoLog(shader); } getShaderSource(shader) { return this._currentCmdEncoder.getShaderSource(shader); } getTexParameter(target, pname) { return this._currentCmdEncoder.getTexParameter(target, pname); } getUniform(program, location) { return this._currentCmdEncoder.getUniform(program, location); } getUniformLocation(program, name) { return this._currentCmdEncoder.getUniformLocation(program, name); } getVertexAttrib(index, pname) { return this._currentCmdEncoder.getVertexAttrib(index, pname); } getVertexAttribOffset(index, pname) { return this._currentCmdEncoder.getVertexAttribOffset(index, pname); } hnumber(target, mode) { this._currentCmdEncoder.hint(target, mode); } hint(target, mode) { this._currentCmdEncoder.hint(target, mode); } isBuffer(buffer) { this._currentCmdEncoder.isBuffer(buffer); } isEnabled(cap) { return this._currentCmdEncoder.isEnabled(cap); } isFramebuffer(framebuffer) { this._currentCmdEncoder.isFramebuffer(framebuffer); } isProgram(program) { this._currentCmdEncoder.isProgram(program); } isRenderbuffer(renderbuffer) { this._currentCmdEncoder.isRenderbuffer(renderbuffer); } isShader(shader) { this._currentCmdEncoder.isShader(shader); } isTexture(texture) { this._currentCmdEncoder.isTexture(texture); } lineWidth(width) { this._currentCmdEncoder.lineWidth(width); } linkProgram(program) { this._currentCmdEncoder.linkProgram(program); } pixelStorei(pname, param) { this._currentCmdEncoder.pixelStorei(pname, param); } polygonOffset(factor, units) { this._currentCmdEncoder.polygonOffset(factor, units); } readPixels(x, y, width, height, format, type, pixels) { this._currentCmdEncoder.readPixels(x, y, width, height, format, type, pixels); } readPixelsAsync(x, y, w, h, format, type, callBack) { this._currentCmdEncoder.readPixelsAsync(x, y, w, h, format, type, callBack); } renderbufferStorage(target, internalformat, width, height) { this._currentCmdEncoder.renderbufferStorage(target, internalformat, width, height); } sampleCoverage(value, invert) { this._currentCmdEncoder.sampleCoverage(value, invert); } scissor(x, y, width, height) { this._currentCmdEncoder.scissor(x, y, width, height); } shaderSource(shader, source) { this._currentCmdEncoder.shaderSource(shader, source); } stencilFunc(func, ref, mask) { this._currentCmdEncoder.stencilFunc(func, ref, mask); } stencilFuncSeparate(face, func, ref, mask) { this._currentCmdEncoder.stencilFuncSeparate(face, func, ref, mask); } stencilMask(mask) { this._currentCmdEncoder.stencilMask(mask); } stencilMaskSeparate(face, mask) { this._currentCmdEncoder.stencilMaskSeparate(face, mask); } stencilOp(fail, zfail, zpass) { this._currentCmdEncoder.stencilOp(fail, zfail, zpass); } stencilOpSeparate(face, fail, zfail, zpass) { this._currentCmdEncoder.stencilOpSeparate(face, fail, zfail, zpass); } texImage2D(_args) { var args = arguments; this._currentCmdEncoder.texImage2D.apply(this._currentCmdEncoder, args); } texStorage2D(target, levels, internalformat, width, height) { this._currentCmdEncoder.texStorage2D(target, levels, internalformat, width, height); } texParameterf(target, pname, param) { this._currentCmdEncoder.texParameterf(target, pname, param); } texParameteri(target, pname, param) { this._currentCmdEncoder.texParameteri(target, pname, param); } texSubImage2D(_args) { var args = arguments; this._currentCmdEncoder.texSubImage2D.apply(this._currentCmdEncoder, args); } uniform1f(location, x) { this._currentCmdEncoder.uniform1f(location, x); } uniform1fv(location, v) { this._currentCmdEncoder.uniform1fv(location, v); } uniform1i(location, x) { this._currentCmdEncoder.uniform1i(location, x); } uniform1iv(location, v) { this._currentCmdEncoder.uniform1iv(location, v); } uniform2f(location, x, y) { this._currentCmdEncoder.uniform2f(location, x, y); } uniform2fv(location, v) { this._currentCmdEncoder.uniform2fv(location, v); } uniform2i(location, x, y) { this._currentCmdEncoder.uniform2i(location, x, y); } uniform2iv(location, v) { this._currentCmdEncoder.uniform2iv(location, v); } uniform3f(location, x, y, z) { this._currentCmdEncoder.uniform3f(location, x, y, z); } uniform3fv(location, v) { this._currentCmdEncoder.uniform3fv(location, v); } uniform3i(location, x, y, z) { this._currentCmdEncoder.uniform3i(location, x, y, z); } uniform3iv(location, v) { this._currentCmdEncoder.uniform3iv(location, v); } uniform4f(location, x, y, z, w) { this._currentCmdEncoder.uniform4f(location, x, y, z, w); } uniform4fv(location, v) { this._currentCmdEncoder.uniform4fv(location, v); } uniform4i(location, x, y, z, w) { this._currentCmdEncoder.uniform4i(location, x, y, z, w); } uniform4iv(location, v) { this._currentCmdEncoder.uniform4iv(location, v); } uniformMatrix2fv(location, transpose, value) { this._currentCmdEncoder.uniformMatrix2fv(location, transpose, value); } uniformMatrix3fv(location, transpose, value) { this._currentCmdEncoder.uniformMatrix3fv(location, transpose, value); } uniformMatrix4fv(location, transpose, value) { this._currentCmdEncoder.uniformMatrix4fv(location, transpose, value); } useProgram(program) { this.setBind(LayaGLContext.CURRENT_PROGRAM, program); this._currentCmdEncoder.useProgram(program); } useProgramMutiThread(program) { this._currentCmdEncoder.useProgram(program); } validateProgram(program) { this._currentCmdEncoder.validateProgram(program); } vertexAttrib1f(indx, x) { this._currentCmdEncoder.vertexAttrib1f(indx, x); } vertexAttrib1fv(indx, values) { this._currentCmdEncoder.vertexAttrib1fv(indx, values); } vertexAttrib2f(indx, x, y) { this._currentCmdEncoder.vertexAttrib2f(indx, x, y); } vertexAttrib2fv(indx, values) { this._currentCmdEncoder.vertexAttrib2fv(indx, values); } vertexAttrib3f(indx, x, y, z) { this._currentCmdEncoder.vertexAttrib3f(indx, x, y, z); } vertexAttrib3fv(indx, values) { this._currentCmdEncoder.vertexAttrib3fv(indx, values); } vertexAttrib4f(indx, x, y, z, w) { this._currentCmdEncoder.vertexAttrib4f(indx, x, y, z, w); } vertexAttrib4fv(indx, values) { this._currentCmdEncoder.vertexAttrib4fv(indx, values); } vertexAttribPointer(indx, size, type, normalized, stride, offset) { this._currentCmdEncoder.vertexAttribPointer(indx, size, type, normalized, stride, offset); } viewport(x, y, width, height) { this._currentCmdEncoder.viewport(x, y, width, height); } configureBackBuffer(width, height, antiAlias, enableDepthAndStencil, wantsBestResolution) { enableDepthAndStencil = enableDepthAndStencil ? enableDepthAndStencil : true; wantsBestResolution = wantsBestResolution ? wantsBestResolution : false; this._currentCmdEncoder.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil, wantsBestResolution); } compressedTexImage2D(_args) { var args = arguments; this._currentCmdEncoder.compressedTexImage2D.apply(this._currentCmdEncoder, args); } compressedTexSubImage2D(_args) { var args = arguments; this._currentCmdEncoder.compressedTexSubImage2D.apply(this._currentCmdEncoder, args); } createVertexArray() { return this._currentCmdEncoder.createVertexArray(); } bindVertexArray(vao) { this._currentCmdEncoder.bindVertexArray(vao); } deleteVertexArray(vao) { this._currentCmdEncoder.deleteVertexArray(vao); } isVertexArray(vao) { return this._currentCmdEncoder.isVertexArray(vao); } vertexAttribDivisor(index, divisor) { this._currentCmdEncoder.vertexAttribDivisor(index, divisor); } drawArraysInstanced(mode, first, count, instanceCount) { this._currentCmdEncoder.drawArraysInstanced(mode, first, count, instanceCount); } drawElementsInstanced(mode, count, type, offset, instanceCount) { this._currentCmdEncoder.drawElementsInstanced(mode, count, type, offset, instanceCount); } uniformMatrix2fvEx(location, transpose, value) { this._currentCmdEncoder.uniformMatrix2fvEx(location, transpose, value); } uniformMatrix3fvEx(location, transpose, value) { this._currentCmdEncoder.uniformMatrix3fvEx(location, transpose, value); } uniformMatrix4fvEx(location, transpose, value) { this._currentCmdEncoder.uniformMatrix4fvEx(location, transpose, value); } addShaderUniform(one) { this._currentCmdEncoder.addShaderUniform(one); } uploadShaderUniforms(commandEncoder, data, type) { this._currentCmdEncoder.uploadShaderUniforms(commandEncoder, data, type); return 0; } useCommandEncoder(commandEncoder) { this._currentCmdEncoder.useCommandEncoder(commandEncoder); } loadDataToReg(regNum, data, offset, size) { this._currentCmdEncoder.loadDataToReg(regNum, data, offset, size); } loadDataToRegEx(regNum, dataID, offset, size) { this._currentCmdEncoder.loadDataToRegEx(regNum, dataID, offset, size); } ifLess0(regNum, statementNum) { this._currentCmdEncoder.ifLess0(regNum, statementNum); } ifEqual0(regNum, statementNum) { this._currentCmdEncoder.ifEqual0(regNum, statementNum); } ifGreater0(regNum, statementNum) { this._currentCmdEncoder.ifGreater0(regNum, statementNum); } ifLEqual0(regNum, statementNum) { this._currentCmdEncoder.ifLEqual0(regNum, statementNum); } ifGEqual0(regNum, statementNum) { this._currentCmdEncoder.ifGEqual0(regNum, statementNum); } ifGNotEqual0(regNum, statementNum) { this._currentCmdEncoder.ifGNotEqual0(regNum, statementNum); } operateReg(regOut, reg1, reg2, size, operateType, dataType) { this._currentCmdEncoder.operateReg(regOut, reg1, reg2, size, operateType, dataType); } store(dataID, offset, regID, size) { this._currentCmdEncoder.store(dataID, offset, regID, size); } setMainContextSize(width, height) { this._nativeObj.setMainContextSize(width, height); } getCurrentContext() { return this._currentContext; } getProgramParameterEx(vs, ps, define, pname) { return this._nativeObj.getProgramParameterEx(vs, ps, define, pname); } getActiveAttribEx(vs, ps, define, index) { return this._nativeObj.getActiveAttribEx(vs, ps, define, index); } getActiveUniformEx(vs, ps, define, index) { return this._nativeObj.getActiveUniformEx(vs, ps, define, index); } static createArrayBufferRef(arrayBuffer, type, syncRender) { var bufferConchRef = webglPlus.createArrayBufferRef(arrayBuffer, type, syncRender, LayaGLContext.ARRAY_BUFFER_REF_REFERENCE); arrayBuffer["conchRef"] = bufferConchRef; arrayBuffer["_ptrID"] = bufferConchRef.id; return bufferConchRef; } static createArrayBufferRefs(arrayBuffer, type, syncRender, refType) { if (!arrayBuffer._refArray) { arrayBuffer._refArray = []; arrayBuffer._refNum = 1; arrayBuffer._refArray.length = 1; arrayBuffer.getRefNum = function () { return this._refNum; }; arrayBuffer.clearRefNum = function () { this._refNum = 1; }; arrayBuffer.getRefSize = function () { return this._refArray.length; }; arrayBuffer.getPtrID = function (index) { index = index ? index : 0; return this._refArray[index].ptrID; }; } var bufferConchRef = null; if (refType == LayaGLContext.ARRAY_BUFFER_REF_REFERENCE) { var refArray = arrayBuffer._refArray; if (!refArray[0]) { bufferConchRef = webglPlus.createArrayBufferRef(arrayBuffer, type, syncRender, refType); refArray[0] = { "ref": bufferConchRef, "ptrID": bufferConchRef.id }; } } else { if (arrayBuffer._refNum < arrayBuffer._refArray.length) { bufferConchRef = arrayBuffer._refArray[arrayBuffer._refNum].ref; var nPtrID = arrayBuffer.getPtrID(arrayBuffer._refNum); webglPlus.syncArrayBufferDataToRuntime(nPtrID, bufferConchRef.isSyncToRender(), arrayBuffer); } else { bufferConchRef = webglPlus.createArrayBufferRef(arrayBuffer, type, syncRender, refType); arrayBuffer._refArray.push({ "ref": bufferConchRef, "ptrID": bufferConchRef.id }); } arrayBuffer._refNum++; } return bufferConchRef; } static syncBufferToRenderThread(value, index = 0) { if (LayaGLContext.instance._threadMode == LayaGLContext.THREAD_MODE_SINGLE) return; var bNeedSync = false; if (!value._refArray) { if (value.frameCount != LayaGLContext._frameAndSyncCountBuffer[0]) { value.frameCount = LayaGLContext._frameAndSyncCountBuffer[0]; bNeedSync = true; } } else { var obj = value._refArray[index]; if (obj.frameCount != LayaGLContext._frameAndSyncCountBuffer[0]) { obj.frameCount = LayaGLContext._frameAndSyncCountBuffer[0]; bNeedSync = true; } } if (bNeedSync) { if ((LayaGLContext._frameAndSyncCountBuffer[1] + 1) > LayaGLContext._syncBufferSize) { var pre = LayaGLContext._syncBufferList; var preConchRef = LayaGLContext._syncBufferList["conchRef"]; var prePtrID = LayaGLContext._syncBufferList["_ptrID"]; LayaGLContext._syncBufferSize += LayaGLContext._SYNC_ARRAYBUFFER_SIZE_; LayaGLContext._syncBufferList = new Int32Array(LayaGLContext._syncBufferSize); LayaGLContext._syncBufferList["conchRef"] = preConchRef; LayaGLContext._syncBufferList["_ptrID"] = prePtrID; pre && LayaGLContext._syncBufferList.set(pre, 0); webglPlus.updateArrayBufferRef(LayaGLContext._syncBufferList["_ptrID"], false, LayaGLContext._syncBufferList); } var nID = value.getPtrID ? value.getPtrID(index) : value["_ptrID"]; if (!nID) { alert("syncBufferToRenderThread id error"); debugger; } LayaGLContext._syncBufferList[LayaGLContext._frameAndSyncCountBuffer[1]++] = nID; } } } LayaGLContext._SYNC_ARRAYBUFFER_SIZE_ = 4096; LayaGLContext._syncBufferSize = LayaGLContext._SYNC_ARRAYBUFFER_SIZE_; LayaGLContext._tempGLEncoder = null; LayaGLContext._shader_macro_id_ = 1; LayaGLContext.THREAD_MODE_SINGLE = 1; LayaGLContext.THREAD_MODE_DOUBLE = 2; LayaGLContext.EXECUTE_JS_THREAD_BUFFER = 0; LayaGLContext.EXECUTE_RENDER_THREAD_BUFFER = 1; LayaGLContext.EXECUTE_COPY_TO_RENDER = 2; LayaGLContext.EXECUTE_COPY_TO_RENDER3D = 3; LayaGLContext.VALUE_OPERATE_ADD = 0; LayaGLContext.VALUE_OPERATE_SUB = 1; LayaGLContext.VALUE_OPERATE_MUL = 2; LayaGLContext.VALUE_OPERATE_DIV = 3; LayaGLContext.VALUE_OPERATE_M2_MUL = 4; LayaGLContext.VALUE_OPERATE_M3_MUL = 5; LayaGLContext.VALUE_OPERATE_M4_MUL = 6; LayaGLContext.VALUE_OPERATE_M32_MUL = 7; LayaGLContext.VALUE_OPERATE_SET = 8; LayaGLContext.VALUE_OPERATE_M32_TRANSLATE = 9; LayaGLContext.VALUE_OPERATE_M32_SCALE = 10; LayaGLContext.VALUE_OPERATE_M32_ROTATE = 11; LayaGLContext.VALUE_OPERATE_M32_SCALE_PIVOT = 12; LayaGLContext.VALUE_OPERATE_M32_ROTATE_PIVOT = 13; LayaGLContext.VALUE_OPERATE_M32_TRANSFORM_PIVOT = 14; LayaGLContext.VALUE_OPERATE_BYTE4_COLOR_MUL = 15; LayaGLContext.ARRAY_BUFFER_TYPE_DATA = 0; LayaGLContext.ARRAY_BUFFER_TYPE_CMD = 1; LayaGLContext.ARRAY_BUFFER_REF_REFERENCE = 0; LayaGLContext.ARRAY_BUFFER_REF_COPY = 1; LayaGLContext.UPLOAD_SHADER_UNIFORM_TYPE_ID = 0; LayaGLContext.UPLOAD_SHADER_UNIFORM_TYPE_DATA = 1; LayaGLContext.DEPTH_BUFFER_BIT = 0x00000100; LayaGLContext.STENCIL_BUFFER_BIT = 0x00000400; LayaGLContext.COLOR_BUFFER_BIT = 0x00004000; LayaGLContext.POINTS = 0x0000; LayaGLContext.LINES = 0x0001; LayaGLContext.LINE_LOOP = 0x0002; LayaGLContext.LINE_STRIP = 0x0003; LayaGLContext.TRIANGLES = 0x0004; LayaGLContext.TRIANGLE_STRIP = 0x0005; LayaGLContext.TRIANGLE_FAN = 0x0006; LayaGLContext.ZERO = 0; LayaGLContext.ONE = 1; LayaGLContext.SRC_COLOR = 0x0300; LayaGLContext.ONE_MINUS_SRC_COLOR = 0x0301; LayaGLContext.SRC_ALPHA = 0x0302; LayaGLContext.ONE_MINUS_SRC_ALPHA = 0x0303; LayaGLContext.DST_ALPHA = 0x0304; LayaGLContext.ONE_MINUS_DST_ALPHA = 0x0305; LayaGLContext.DST_COLOR = 0x0306; LayaGLContext.ONE_MINUS_DST_COLOR = 0x0307; LayaGLContext.SRC_ALPHA_SATURATE = 0x0308; LayaGLContext.FUNC_ADD = 0x8006; LayaGLContext.BLEND_EQUATION = 0x8009; LayaGLContext.BLEND_EQUATION_RGB = 0x8009; LayaGLContext.BLEND_EQUATION_ALPHA = 0x883D; LayaGLContext.FUNC_SUBTRACT = 0x800A; LayaGLContext.FUNC_REVERSE_SUBTRACT = 0x800B; LayaGLContext.BLEND_DST_RGB = 0x80C8; LayaGLContext.BLEND_SRC_RGB = 0x80C9; LayaGLContext.BLEND_DST_ALPHA = 0x80CA; LayaGLContext.BLEND_SRC_ALPHA = 0x80CB; LayaGLContext.CONSTANT_COLOR = 0x8001; LayaGLContext.ONE_MINUS_CONSTANT_COLOR = 0x8002; LayaGLContext.CONSTANT_ALPHA = 0x8003; LayaGLContext.ONE_MINUS_CONSTANT_ALPHA = 0x8004; LayaGLContext.BLEND_COLOR = 0x8005; LayaGLContext.ARRAY_BUFFER = 0x8892; LayaGLContext.ELEMENT_ARRAY_BUFFER = 0x8893; LayaGLContext.ARRAY_BUFFER_BINDING = 0x8894; LayaGLContext.ELEMENT_ARRAY_BUFFER_BINDING = 0x8895; LayaGLContext.STREAM_DRAW = 0x88E0; LayaGLContext.STATIC_DRAW = 0x88E4; LayaGLContext.DYNAMIC_DRAW = 0x88E8; LayaGLContext.BUFFER_SIZE = 0x8764; LayaGLContext.BUFFER_USAGE = 0x8765; LayaGLContext.CURRENT_VERTEX_ATTRIB = 0x8626; LayaGLContext.FRONT = 0x0404; LayaGLContext.BACK = 0x0405; LayaGLContext.FRONT_AND_BACK = 0x0408; LayaGLContext.CULL_FACE = 0x0B44; LayaGLContext.BLEND = 0x0BE2; LayaGLContext.DITHER = 0x0BD0; LayaGLContext.STENCIL_TEST = 0x0B90; LayaGLContext.DEPTH_TEST = 0x0B71; LayaGLContext.SCISSOR_TEST = 0x0C11; LayaGLContext.POLYGON_OFFSET_FILL = 0x8037; LayaGLContext.SAMPLE_ALPHA_TO_COVERAGE = 0x809E; LayaGLContext.SAMPLE_COVERAGE = 0x80A0; LayaGLContext.INVALID_ENUM = 0x0500; LayaGLContext.INVALID_VALUE = 0x0501; LayaGLContext.INVALID_OPERATION = 0x0502; LayaGLContext.OUT_OF_MEMORY = 0x0505; LayaGLContext.CW = 0x0900; LayaGLContext.CCW = 0x0901; LayaGLContext.LINE_WIDTH = 0x0B21; LayaGLContext.ALIASED_POINT_SIZE_RANGE = 0x846D; LayaGLContext.ALIASED_LINE_WIDTH_RANGE = 0x846E; LayaGLContext.CULL_FACE_MODE = 0x0B45; LayaGLContext.FRONT_FACE = 0x0B46; LayaGLContext.DEPTH_RANGE = 0x0B70; LayaGLContext.DEPTH_WRITEMASK = 0x0B72; LayaGLContext.DEPTH_CLEAR_VALUE = 0x0B73; LayaGLContext.DEPTH_FUNC = 0x0B74; LayaGLContext.STENCIL_CLEAR_VALUE = 0x0B91; LayaGLContext.STENCIL_FUNC = 0x0B92; LayaGLContext.STENCIL_FAIL = 0x0B94; LayaGLContext.STENCIL_PASS_DEPTH_FAIL = 0x0B95; LayaGLContext.STENCIL_PASS_DEPTH_PASS = 0x0B96; LayaGLContext.STENCIL_REF = 0x0B97; LayaGLContext.STENCIL_VALUE_MASK = 0x0B93; LayaGLContext.STENCIL_WRITEMASK = 0x0B98; LayaGLContext.STENCIL_BACK_FUNC = 0x8800; LayaGLContext.STENCIL_BACK_FAIL = 0x8801; LayaGLContext.STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802; LayaGLContext.STENCIL_BACK_PASS_DEPTH_PASS = 0x8803; LayaGLContext.STENCIL_BACK_REF = 0x8CA3; LayaGLContext.STENCIL_BACK_VALUE_MASK = 0x8CA4; LayaGLContext.STENCIL_BACK_WRITEMASK = 0x8CA5; LayaGLContext.VIEWPORT = 0x0BA2; LayaGLContext.SCISSOR_BOX = 0x0C10; LayaGLContext.COLOR_CLEAR_VALUE = 0x0C22; LayaGLContext.COLOR_WRITEMASK = 0x0C23; LayaGLContext.UNPACK_ALIGNMENT = 0x0CF5; LayaGLContext.PACK_ALIGNMENT = 0x0D05; LayaGLContext.MAX_TEXTURE_SIZE = 0x0D33; LayaGLContext.MAX_VIEWPORT_DIMS = 0x0D3A; LayaGLContext.SUBPIXEL_BITS = 0x0D50; LayaGLContext.RED_BITS = 0x0D52; LayaGLContext.GREEN_BITS = 0x0D53; LayaGLContext.BLUE_BITS = 0x0D54; LayaGLContext.ALPHA_BITS = 0x0D55; LayaGLContext.DEPTH_BITS = 0x0D56; LayaGLContext.STENCIL_BITS = 0x0D57; LayaGLContext.POLYGON_OFFSET_UNITS = 0x2A00; LayaGLContext.POLYGON_OFFSET_FACTOR = 0x8038; LayaGLContext.TEXTURE_BINDING_2D = 0x8069; LayaGLContext.SAMPLE_BUFFERS = 0x80A8; LayaGLContext.SAMPLES = 0x80A9; LayaGLContext.SAMPLE_COVERAGE_VALUE = 0x80AA; LayaGLContext.SAMPLE_COVERAGE_INVERT = 0x80AB; LayaGLContext.COMPRESSED_TEXTURE_FORMATS = 0x86A3; LayaGLContext.DONT_CARE = 0x1100; LayaGLContext.FASTEST = 0x1101; LayaGLContext.NICEST = 0x1102; LayaGLContext.GENERATE_MIPMAP_HINT = 0x8192; LayaGLContext.BYTE = 0x1400; LayaGLContext.UNSIGNED_BYTE = 0x1401; LayaGLContext.SHORT = 0x1402; LayaGLContext.UNSIGNED_SHORT = 0x1403; LayaGLContext.INT = 0x1404; LayaGLContext.UNSIGNED_INT = 0x1405; LayaGLContext.FLOAT = 0x1406; LayaGLContext.DEPTH_COMPONENT = 0x1902; LayaGLContext.ALPHA = 0x1906; LayaGLContext.RGB = 0x1907; LayaGLContext.RGBA = 0x1908; LayaGLContext.LUMINANCE = 0x1909; LayaGLContext.LUMINANCE_ALPHA = 0x190A; LayaGLContext.UNSIGNED_SHORT_4_4_4_4 = 0x8033; LayaGLContext.UNSIGNED_SHORT_5_5_5_1 = 0x8034; LayaGLContext.UNSIGNED_SHORT_5_6_5 = 0x8363; LayaGLContext.FRAGMENT_SHADER = 0x8B30; LayaGLContext.VERTEX_SHADER = 0x8B31; LayaGLContext.MAX_VERTEX_ATTRIBS = 0x8869; LayaGLContext.MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB; LayaGLContext.MAX_VARYING_VECTORS = 0x8DFC; LayaGLContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D; LayaGLContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C; LayaGLContext.MAX_TEXTURE_IMAGE_UNITS = 0x8872; LayaGLContext.MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD; LayaGLContext.MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; LayaGLContext.TEXTURE_MAX_ANISOTROPY_EXT = 34046; LayaGLContext.SHADER_TYPE = 0x8B4F; LayaGLContext.DELETE_STATUS = 0x8B80; LayaGLContext.LINK_STATUS = 0x8B82; LayaGLContext.VALIDATE_STATUS = 0x8B83; LayaGLContext.ATTACHED_SHADERS = 0x8B85; LayaGLContext.ACTIVE_UNIFORMS = 0x8B86; LayaGLContext.ACTIVE_ATTRIBUTES = 0x8B89; LayaGLContext.SHADING_LANGUAGE_VERSION = 0x8B8C; LayaGLContext.CURRENT_PROGRAM = 0x8B8D; LayaGLContext.NEVER = 0x0200; LayaGLContext.LESS = 0x0201; LayaGLContext.EQUAL = 0x0202; LayaGLContext.LEQUAL = 0x0203; LayaGLContext.GREATER = 0x0204; LayaGLContext.NOTEQUAL = 0x0205; LayaGLContext.GEQUAL = 0x0206; LayaGLContext.ALWAYS = 0x0207; LayaGLContext.KEEP = 0x1E00; LayaGLContext.REPLACE = 0x1E01; LayaGLContext.INCR = 0x1E02; LayaGLContext.DECR = 0x1E03; LayaGLContext.INVERT = 0x150A; LayaGLContext.INCR_WRAP = 0x8507; LayaGLContext.DECR_WRAP = 0x8508; LayaGLContext.VENDOR = 0x1F00; LayaGLContext.RENDERER = 0x1F01; LayaGLContext.VERSION = 0x1F02; LayaGLContext.NEAREST = 0x2600; LayaGLContext.LINEAR = 0x2601; LayaGLContext.NEAREST_MIPMAP_NEAREST = 0x2700; LayaGLContext.LINEAR_MIPMAP_NEAREST = 0x2701; LayaGLContext.NEAREST_MIPMAP_LINEAR = 0x2702; LayaGLContext.LINEAR_MIPMAP_LINEAR = 0x2703; LayaGLContext.TEXTURE_MAG_FILTER = 0x2800; LayaGLContext.TEXTURE_MIN_FILTER = 0x2801; LayaGLContext.TEXTURE_WRAP_S = 0x2802; LayaGLContext.TEXTURE_WRAP_T = 0x2803; LayaGLContext.TEXTURE_2D = 0x0DE1; LayaGLContext.TEXTURE = 0x1702; LayaGLContext.TEXTURE_CUBE_MAP = 0x8513; LayaGLContext.TEXTURE_BINDING_CUBE_MAP = 0x8514; LayaGLContext.TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515; LayaGLContext.TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516; LayaGLContext.TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517; LayaGLContext.TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518; LayaGLContext.TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519; LayaGLContext.TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A; LayaGLContext.MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C; LayaGLContext.TEXTURE0 = 0x84C0; LayaGLContext.TEXTURE1 = 0x84C1; LayaGLContext.TEXTURE2 = 0x84C2; LayaGLContext.TEXTURE3 = 0x84C3; LayaGLContext.TEXTURE4 = 0x84C4; LayaGLContext.TEXTURE5 = 0x84C5; LayaGLContext.TEXTURE6 = 0x84C6; LayaGLContext.TEXTURE7 = 0x84C7; LayaGLContext.TEXTURE8 = 0x84C8; LayaGLContext.TEXTURE9 = 0x84C9; LayaGLContext.TEXTURE10 = 0x84CA; LayaGLContext.TEXTURE11 = 0x84CB; LayaGLContext.TEXTURE12 = 0x84CC; LayaGLContext.TEXTURE13 = 0x84CD; LayaGLContext.TEXTURE14 = 0x84CE; LayaGLContext.TEXTURE15 = 0x84CF; LayaGLContext.TEXTURE16 = 0x84D0; LayaGLContext.TEXTURE17 = 0x84D1; LayaGLContext.TEXTURE18 = 0x84D2; LayaGLContext.TEXTURE19 = 0x84D3; LayaGLContext.TEXTURE20 = 0x84D4; LayaGLContext.TEXTURE21 = 0x84D5; LayaGLContext.TEXTURE22 = 0x84D6; LayaGLContext.TEXTURE23 = 0x84D7; LayaGLContext.TEXTURE24 = 0x84D8; LayaGLContext.TEXTURE25 = 0x84D9; LayaGLContext.TEXTURE26 = 0x84DA; LayaGLContext.TEXTURE27 = 0x84DB; LayaGLContext.TEXTURE28 = 0x84DC; LayaGLContext.TEXTURE29 = 0x84DD; LayaGLContext.TEXTURE30 = 0x84DE; LayaGLContext.TEXTURE31 = 0x84DF; LayaGLContext.ACTIVE_TEXTURE = 0x84E0; LayaGLContext.REPEAT = 0x2901; LayaGLContext.CLAMP_TO_EDGE = 0x812F; LayaGLContext.MIRRORED_REPEAT = 0x8370; LayaGLContext.FLOAT_VEC2 = 0x8B50; LayaGLContext.FLOAT_VEC3 = 0x8B51; LayaGLContext.FLOAT_VEC4 = 0x8B52; LayaGLContext.INT_VEC2 = 0x8B53; LayaGLContext.INT_VEC3 = 0x8B54; LayaGLContext.INT_VEC4 = 0x8B55; LayaGLContext.BOOL = 0x8B56; LayaGLContext.BOOL_VEC2 = 0x8B57; LayaGLContext.BOOL_VEC3 = 0x8B58; LayaGLContext.BOOL_VEC4 = 0x8B59; LayaGLContext.FLOAT_MAT2 = 0x8B5A; LayaGLContext.FLOAT_MAT3 = 0x8B5B; LayaGLContext.FLOAT_MAT4 = 0x8B5C; LayaGLContext.SAMPLER_2D = 0x8B5E; LayaGLContext.SAMPLER_CUBE = 0x8B60; LayaGLContext.VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622; LayaGLContext.VERTEX_ATTRIB_ARRAY_SIZE = 0x8623; LayaGLContext.VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624; LayaGLContext.VERTEX_ATTRIB_ARRAY_TYPE = 0x8625; LayaGLContext.VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A; LayaGLContext.VERTEX_ATTRIB_ARRAY_POINTER = 0x8645; LayaGLContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F; LayaGLContext.IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A; LayaGLContext.IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; LayaGLContext.COMPILE_STATUS = 0x8B81; LayaGLContext.LOW_FLOAT = 0x8DF0; LayaGLContext.MEDIUM_FLOAT = 0x8DF1; LayaGLContext.HIGH_FLOAT = 0x8DF2; LayaGLContext.LOW_INT = 0x8DF3; LayaGLContext.MEDIUM_INT = 0x8DF4; LayaGLContext.HIGH_INT = 0x8DF5; LayaGLContext.FRAMEBUFFER = 0x8D40; LayaGLContext.RENDERBUFFER = 0x8D41; LayaGLContext.RGBA4 = 0x8056; LayaGLContext.RGB5_A1 = 0x8057; LayaGLContext.RGB565 = 0x8D62; LayaGLContext.DEPTH_COMPONENT16 = 0x81A5; LayaGLContext.STENCIL_INDEX = 0x1901; LayaGLContext.STENCIL_INDEX8 = 0x8D48; LayaGLContext.DEPTH_STENCIL = 0x84F9; LayaGLContext.RENDERBUFFER_WIDTH = 0x8D42; LayaGLContext.RENDERBUFFER_HEIGHT = 0x8D43; LayaGLContext.RENDERBUFFER_INTERNAL_FORMAT = 0x8D44; LayaGLContext.RENDERBUFFER_RED_SIZE = 0x8D50; LayaGLContext.RENDERBUFFER_GREEN_SIZE = 0x8D51; LayaGLContext.RENDERBUFFER_BLUE_SIZE = 0x8D52; LayaGLContext.RENDERBUFFER_ALPHA_SIZE = 0x8D53; LayaGLContext.RENDERBUFFER_DEPTH_SIZE = 0x8D54; LayaGLContext.RENDERBUFFER_STENCIL_SIZE = 0x8D55; LayaGLContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0; LayaGLContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1; LayaGLContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2; LayaGLContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3; LayaGLContext.COLOR_ATTACHMENT0 = 0x8CE0; LayaGLContext.DEPTH_ATTACHMENT = 0x8D00; LayaGLContext.STENCIL_ATTACHMENT = 0x8D20; LayaGLContext.DEPTH_STENCIL_ATTACHMENT = 0x821A; LayaGLContext.NONE = 0; LayaGLContext.FRAMEBUFFER_COMPLETE = 0x8CD5; LayaGLContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6; LayaGLContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7; LayaGLContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9; LayaGLContext.FRAMEBUFFER_UNSUPPORTED = 0x8CDD; LayaGLContext.FRAMEBUFFER_BINDING = 0x8CA6; LayaGLContext.RENDERBUFFER_BINDING = 0x8CA7; LayaGLContext.MAX_RENDERBUFFER_SIZE = 0x84E8; LayaGLContext.INVALID_FRAMEBUFFER_OPERATION = 0x0506; LayaGLContext.UNPACK_FLIP_Y_WEBGL = 0x9240; LayaGLContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241; LayaGLContext.CONTEXT_LOST_WEBGL = 0x9242; LayaGLContext.UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243; LayaGLContext.BROWSER_DEFAULT_WEBGL = 0x9244; LayaGLContext.RGBA16F = 0x881A; LayaGLContext.HALF_FLOAT = 0x140B; window["WebGLRenderingContext"] = LayaGLContext; window["WebGL2RenderingContext"] = LayaGLContext; window["LayaGLContext"] = LayaGLContext; window["ProgramLocationTable"] = ProgramLocationTable; window["GLCommandEncoder"] = GLCommandEncoder; window["CallbackFuncObj"] = CallbackFuncObj; class CSSStyleDeclaration { constructor() { this._transform = new Float32Array([1, 0, 0, 1, 0, 0]); this._styleNumber = 0; } get length() { return this._styleNumber; } getPropertyPriority(propertyName) { return ''; } getPropertyValue(propertyName) { return ''; } item(index) { return ''; } removeProperty(propertyName) { return ''; } setProperty(propertyName, value, priority) { } set left(l) { var nl = parseInt(l); this._htmlEle.clientLeft = nl; } set top(t) { var nt = parseInt(t); this._htmlEle.clientTop = nt; } set height(h) { var nh = parseInt(h); this._htmlEle.clientHeight = nh; } set width(w) { var nw = parseInt(w); this._htmlEle.clientWidth = nw; } set transform(trans) { var s1 = trans.split(/[\(,\)]/); if (s1 && s1.length > 2) { if (s1[0] === 'matrix') { if (s1.length >= 7) { this._transform[0] = 1 * s1[1]; this._transform[1] = 1 * s1[2]; this._transform[2] = 1 * s1[3]; this._transform[3] = 1 * s1[4]; this._transform[4] = 1 * s1[5]; this._transform[5] = 1 * s1[6]; if (this._htmlEle && this._htmlEle.onCSS_Transform) { this._htmlEle.onCSS_Transform(this._transform); } } } else if (s1[0] === 'scale') { console.log('css scale not implemented'); } } } } class HTMLElement extends Element { constructor() { super(); this.style = new CSSStyleDeclaration(); this.style._htmlEle = this; } onCSS_Transform(mat) { } ; onerror(ev) { } onload(ev) { } } window["HTMLElement"] = HTMLElement; class HTMLDivElement extends HTMLElement { constructor() { super(); this.tagName = "DIV"; } } class HTMLScriptElement extends HTMLElement { constructor() { super(); this.tagName = "SCRIPT"; } set src(url) { var _t = this; this._src = location.resolve(url); console.log("HTMLScriptElement set src" + this._src); document.uploadScript({ "src": this._src, "obj": this }); } get src() { return this._src; } set text(t) { this._text = t; document.uploadScript({ "text": this._text, "obj": this }); } get text() { return this._text; } } class HTMLCanvasElement extends HTMLElement { constructor() { super(); this._isFirst = false; this._tranform = null; this._hasTransform = false; this._clientRect = { left: 0, top: 0, width: 0, height: 0, right: 0, bottom: 0 }; this.clientLeft; this.tagName = "CANVAS"; this._width = HTMLCanvasElement.defaultWidth; this._height = HTMLCanvasElement.defaultHeight; } setFirst() { this._isFirst = true; if (this._context) { LayaGLContext.instance.canvas = this; } } getBoundingClientRect() { var cr = this._clientRect; if (this._hasTransform) { cr.width = this._width * this._tranform[0]; cr.height = this._height * this._tranform[3]; cr.left = this._tranform[4]; cr.top = this._tranform[5]; cr.right = cr.left + cr.width; cr.bottom = cr.left + cr.height; } else { cr.right = cr.width = this._width; cr.bottom = cr.height = this._height; } return cr; } getContext(contextType) { console.log("getContext type=" + contextType); if (!LayaGLContext.instance) { LayaGLContext.instance = new LayaGLContext(contextType); } if (!this._context) { this._context = new CanvasRenderingContext(this); if (this._width) this._context.setSize(this._width, this._height); if (this._isFirst) { LayaGLContext.instance.canvas = this; } } let version = LayaGLContext.instance._nativeObj.getStringEx(0x1F02); if (contextType.indexOf("webgl2") >= 0) { if (version.indexOf("OpenGL ES 3.") >= 0) { LayaGLContext.instance.canvas = this; return LayaGLContext.instance; } else { return null; } } else if (contextType.indexOf("webgl") >= 0) { if (version.indexOf("OpenGL ES 2.") >= 0 || version.indexOf("OpenGL ES 3.") >= 0) { LayaGLContext.instance.canvas = this; return LayaGLContext.instance; } else { return null; } } else { return this._context; } } onCSS_Transform(mat) { this._tranform = mat; this._hasTransform = true; var e = new Event('csstransform'); this.dispatchEvent(e); var sw = mat[0]; var sh = mat[3]; conchConfig.setScreenScale(sw, sh, mat[4], mat[5]); if (sw == 0 || sh == 0) { if (mat[4] > mat[5]) { console.warn("设置横竖屏错误! 请在初始html页面meta中设置screenorientation为横屏landscape"); } else { console.warn("设置横竖屏错误! 请在初始html页面meta中设置screenorientation为竖屏portrait"); } } } toDataURL(type) { return ""; } setSize(w, h) { this._width = w; this._height = h; this._context && this._context.setSize(w, h); } set width(w) { if (this._isFirst && HTMLCanvasElement.RS) { this._w = w; return; } if (this._width != w) { this._width = w; this._context && this._context.setSize(this._width, this._height); } } get width() { return this._width; } set height(h) { if (this._isFirst && HTMLCanvasElement.RS) { this._h = h; return; } if (this._height != h) { this._height = h; this._context && this._context.setSize(this._width, this._height); } } get height() { return this._height; } get clientWidth() { return this._width; } get clientHeight() { return this._height; } set clientWidth(v) { this._width = v; } set clientHeight(v) { this._height = v; } toBase64(type, encoderOptions, callback) { if (this._context) { this._context.toBase64(type, encoderOptions, callback); } } getImageData(x, y, w, h, callBack) { if (this._context) { this._context.getImageData(x, y, w, h, callBack); } } } HTMLCanvasElement.defaultWidth = 300; HTMLCanvasElement.defaultHeight = 150; window.HTMLCanvasElement = HTMLCanvasElement; class HTMLImageElement extends HTMLElement { constructor() { super(); this._nativeObj = null; this.complete = false; this._enableMerageInAtlas = true; this.tagName = 'IMG'; this._nativeObj = new conchImage(); this._nativeObj.srcs = 0; this._nativeObj.obj = this; } set src(url) { this._nativeObj.onerror = this._nativeOnError; this._nativeObj.onload = this._nativeOnload; this._nativeObj.srcs = this._nativeObj.srcs || 0; if (this._nativeObj.srcs == 0) { this._nativeObj.obj = this; } this._nativeObj.srcs++; if (this.isBase64(url)) { let index = url.indexOf(';base64,'); if (index != -1) { this._nativeObj.setBase64(url.substr(index + 8)); } } else { url = location.resolve(url); this._nativeObj.setSrc(url); } } isBase64(url) { return url.startsWith('data:image/'); } get src() { return this._nativeObj.src; } _nativeOnload() { this.srcs = this.srcs || 1; this.srcs--; var temp = this.obj; var e = new Event('load'); temp.complete = true; e.target = this; temp.onload && temp.onload(e); temp.dispatchEvent(e); if (this.srcs == 0) { this.obj = null; } } _nativeOnError(e) { this.srcs = this.srcs || 1; this.srcs--; var temp = this.obj; var evt = new Event('error'); evt.target = this; if (typeof (e) === 'object') { evt['extCode'] = e.extCode; } else evt['extCode'] = e; temp.onerror && temp.onerror(evt); temp.dispatchEvent(evt); if (this.srcs == 0) { this.obj = null; } } get width() { if (this._nativeObj) return this._nativeObj.width; return 0; } get height() { if (this._nativeObj) return this._nativeObj.height; return 0; } get imgId() { return this._nativeObj.conchImgId; } putData(data) { this._nativeObj.onerror = this._nativeOnError; this._nativeObj.onload = this._nativeOnload; this._nativeObj.putData(data); } putImageData(data, w, h) { this._nativeObj.onerror = this._nativeOnError; this._nativeObj.onload = this._nativeOnload; this._nativeObj.putBitmapData(data, w, h); } setPremultiplyAlpha(b) { this._nativeObj.setPremultiplyAlpha(b); } conchDestroy() { this._nativeObj.destroy(); } set enableMerageInAtlas(value) { this._enableMerageInAtlas = value; this._nativeObj.enableMerageInAtlas(value); } get enableMerageInAtlas() { return this._enableMerageInAtlas; } releaseTexture() { this._nativeObj.releaseTexture(); } } window["HTMLImageElement"] = HTMLImageElement; class HTMLInputElement extends HTMLElement { constructor() { super(); this.tagName = "Input"; this._nativeObj = new ConchInput(); this.setLeft = this._nativeObj.setLeft.bind(this._nativeObj); this.setTop = this._nativeObj.setTop.bind(this._nativeObj); this.setWidth = this._nativeObj.setWidth.bind(this._nativeObj); this.setHeight = this._nativeObj.setHeight.bind(this._nativeObj); this.setOpacity = this._nativeObj.setOpacity.bind(this._nativeObj); this.setValue = this._nativeObj.setValue.bind(this._nativeObj); this.getValue = this._nativeObj.getValue.bind(this._nativeObj); this.setStyle = this._nativeObj.setStyle.bind(this._nativeObj); this.setVisible = this._nativeObj.setVisible.bind(this._nativeObj); this.focus = this._nativeObj.focus.bind(this._nativeObj); this.blur = this._nativeObj.blur.bind(this._nativeObj); this.setColor = this._nativeObj.setColor.bind(this._nativeObj); this.setFontSize = this._nativeObj.setFontSize.bind(this._nativeObj); this.setPos = this._nativeObj.setPos.bind(this._nativeObj); this.setSize = this._nativeObj.setSize.bind(this._nativeObj); this.setCursorPosition = this._nativeObj.setCursorPosition.bind(this._nativeObj); this.setScale = this._nativeObj.setScale.bind(this._nativeObj); this.setMaxLength = this._nativeObj.setMaxLength.bind(this._nativeObj); this.setType = this._nativeObj.setType.bind(this._nativeObj); this.setNumberOnly = this._nativeObj.setNumberOnly.bind(this._nativeObj); this.setRegular = this._nativeObj.setRegular.bind(this._nativeObj); this.setFont = this._nativeObj.setFont.bind(this._nativeObj); this.setMultiAble = this._nativeObj.setMultiAble.bind(this._nativeObj); this.setForbidEdit = this._nativeObj.setForbidEdit.bind(this._nativeObj); if (this._nativeObj.setBgColor) this.setBgColor = this._nativeObj.setBgColor.bind(this._nativeObj); else this.setBgColor = function (c) { }; } set maxLength(v) { this.setMaxLength(v); } set left(v) { this._nativeObj.left = v; } get left() { return this._nativeObj.left; } set top(v) { this._nativeObj.top = v; } get top() { return this._nativeObj.top; } set width(v) { this._nativeObj.width = v; } get width() { return this._nativeObj.width; } set height(v) { this._nativeObj.height = v; } get height() { return this._nativeObj.height; } set opacity(v) { this._nativeObj.opacity = v; } get opacity() { return this._nativeObj.opacity; } get clientLeft() { return this._nativeObj.left; } set clientLeft(v) { this._nativeObj.left = v; } get clientTop() { return this._nativeObj.top; } set clientTop(v) { this._nativeObj.top = v; } set clientWidth(v) { this._nativeObj.width = v; } get clientWidth() { return this._nativeObj.width; } set clientHeight(v) { this._nativeObj.height = v; } get clientHeight() { return this._nativeObj.height; } set value(v) { this._nativeObj.value = v; } get value() { return this._nativeObj.value; } set visible(v) { this._nativeObj.visible = v; } get visible() { return this._nativeObj.visible; } addEventListener(type, listener, useCapture) { super.addEventListener(type, listener, useCapture); var _t = this; this._nativeObj.addEventListener(type, function (e) { var ev = new _lbEvent(type); ev.target = this; _t.dispatchEvent(ev); }); } } let CanPlayTypeResult = { Empty: "", Maybe: "maybe", Probably: "probably" }; class HTMLMediaElement extends HTMLElement { constructor(NativeMediaCreator) { super(); this._src = ""; this._nativeObj = new NativeMediaCreator(); } set src(val) { this._src = val; this._nativeObj.src = window.location.resolve(this._src); } get src() { return this._nativeObj.src; } get currentSrc() { return this._src; } canPlayType(type) { return CanPlayTypeResult.Empty; } load() { } set currentTime(v) { this._nativeObj.currentTime = v; } get currentTime() { return this._nativeObj.currentTime; } play() { this._nativeObj.play(); } pause() { this._nativeObj.pause(); } set autoplay(v) { this._nativeObj.autoplay = v; } get autoplay() { return this._nativeObj.autoplay; } set loop(v) { this._nativeObj.loop = v; } get loop() { return this._nativeObj.loop; } set volume(v) { this._nativeObj.volume = v; } get volume() { return this._nativeObj.volume; } set muted(v) { this._nativeObj.muted = v; } get muted() { return this._nativeObj.muted; } } class HTMLMetaElement extends HTMLElement { constructor() { super(); this.tagName = "META"; } get httpEquiv() { return this["http-equiv"]; } set name(n) { this._name = n; document._elements[n] = document._elements[n] || []; document._elements[n].push(this); } get name() { return this._name; } } class HTMLAudioElement extends HTMLMediaElement { constructor() { super(ConchAudio); this.readyState = 0; this.tagName = "AUDIO"; } setLoop(loop) { this._nativeObj.setLoop(loop); } stop() { this._nativeObj.stop(); } set muted(v) { this._nativeObj.muted = v; } get muted() { return this._nativeObj.muted; } get duration() { return this._nativeObj.duration; } addEventListener(type, listener, useCapture) { super.addEventListener(type, listener, useCapture); var _t = this; this._nativeObj.addEventListener(type, function (e) { var ev = new _lbEvent(type); ev.target = this; if (type == "canplaythrough") _t.readyState = 4; _t.dispatchEvent(ev); }); } } class HTMLVideoElement extends HTMLMediaElement { constructor() { super(ConchVideo); this._src = ""; this.tagName = "VIDEO"; this._nativeObj._setDispatchEventFunc(this._dispatchEventByType.bind(this)); this._removeEventListener = this.removeEventListener; this.removeEventListener = this.removeEventListenerNew; } appendChild(node) { if (node.src) { this.src = node.src; } return super.appendChild(node); } get readyState() { return this._nativeObj.readyState; } canPlayType(val) { let result = this._nativeObj.canPlayType(val); return result ? CanPlayTypeResult.Maybe : CanPlayTypeResult.Empty; } get paused() { return this._nativeObj.paused; } get duration() { return this._nativeObj.duration; } get src() { return this._src; } set src(val) { super.src = val; } load() { this._nativeObj.load(); } set width(val) { this._nativeObj.width = val; } get width() { return this._nativeObj.width; } set height(val) { this._nativeObj.height = val; } get height() { return this._nativeObj.height; } set videoWidth(val) { this._nativeObj.videoWidth = val; } get videoWidth() { return this._nativeObj.videoWidth; } set videoHeight(val) { this._nativeObj.videoHeight = val; } get videoHeight() { return this._nativeObj.videoHeight; } get clientLeft() { return this._nativeObj.x; } set clientLeft(val) { this._nativeObj.x = val; } get clientTop() { return this._nativeObj.y; } set clientTop(val) { this._nativeObj.y = val; } addEventListener(type, listener, useCapture) { super.addEventListener(type, listener, useCapture); this._nativeObj.addEvent(type); } removeEventListenerNew(type, listener, useCapture) { this._removeEventListener(type, listener, useCapture); this._nativeObj.removeEvent(type); } _dispatchEventByType(type) { var ev = new _lbEvent(type); ev.target = this; this._dispatchEvent(ev); } _destroy() { this._nativeObj._releaseHandler(); } } window["HTMLVideoElement"] = HTMLVideoElement; class HTMLBodyElement extends HTMLElement { constructor() { super(); this.tagName = "BODY"; } get clientHeight() { return window.innerHeight; } set clientHeight(h) { } get clientWidth() { return window.innerWidth; } set clientWidth(w) { } appendChild(newChild) { if (newChild instanceof HTMLCanvasElement) { newChild.setFirst(); } return super.appendChild(newChild); } } class NodeList extends Array { constructor() { super(); } item(index) { return this[index]; } } class HTMLHeadElement extends HTMLElement { constructor() { super(); this.tagName = 'head'; this.__visible = false; } } class HTMLCollection extends Array { item(nameOrIndex, optionalIndex) { return this[nameOrIndex]; } namedItem(name) { return null; } } class Document extends Node { constructor() { super(); this.createMap = new Map(); this._frameEndEvt = new Event('frameend'); this.scriptTextList = []; this._loading = 0; this._evalNum = 0; this._eventPathCache = null; this.all = new HTMLCollection(); this._elements = []; window.document = this; this.defaultView = window; var cm = this.createMap; cm.set('div', this.create_div); cm.set('img', this.create_img); cm.set('image', this.create_img); cm.set('canvas', this.create_canvas); cm.set('audio', this.create_audio); cm.set('input', this.create_input); cm.set('textarea', this.create_input); cm.set('video', this.create_video); cm.set('script', this.create_script); cm.set('meta', this.create_meta); var html = new HTMLElement(); var ww = getInnerWidth(); var wh = getInnerHeight(); html.clientWidth = ww; html.clientHeight = wh; html.tagName = "HTML"; html.ownerDocument = this; this.documentElement = html; this._topElement = html; this.appendChild(this.documentElement); var body = new HTMLBodyElement(); body.ownerDocument = this; this.body = body; this.documentElement.appendChild(this.body); this.head = new HTMLHeadElement(); this.documentElement.appendChild(this.head); this.dispatchEvent = this._dispatchEvent.bind(this); this._frameEndEvt.bubbles = false; this.nodeType = 9; this.location = window.location; var _t = this; var temp; } setReferrer(s) { this.referrer = s; } uploadScript(d) { var _t = this; d.i = this._loading; this._loading++; if (d.src) { console.log("_downloadAysn:temp.src" + d.src); window.downloadfile(d.src, false, function (data) { d._stext = data + "\n//@ sourceURL=" + d.src; _t._downloadOk(d); }, function () { var e = new Event("error"); e.target = e.currentTarget = d.obj; d.obj.onerror && d.obj.onerror(e); }); } else { d._stext = d.text; _t._downloadOk(d); } } _downloadOk(d) { this.scriptTextList[d.i] = d; for (var i = this._evalNum, len = this.scriptTextList.length; i < len; i++) { var t = this.scriptTextList[i]; if (!t) return; console.log(">>>>>>>>>>>>>>>eval" + t.src); var t1 = Date.now(); window.evalJS(t._stext); console.log(">>>>>>>>>>>>>>>>>eval take time:" + (Date.now() - t1)); var e = new Event("load"); e.target = e.currentTarget = t.obj; t.obj.onload && t.obj.onload(e); this._evalNum++; } if (this._loading == this._evalNum) { this._loading = this._evalNum = 0; this.scriptTextList.length = 0; } } pickElement(screenx, screeny) { return this._topElement; } createElement(tagName) { tagName = tagName.toLowerCase(); var f = this.createMap.get(tagName); var ret = null; if (f) { ret = f.call(this); } else { return new div(); } return ret; } createElementNS(tagName) { return this.createElement(tagName); } create_div() { var ret = new HTMLDivElement(); ret.ownerDocument = this; return ret; } create_img() { var ret = new HTMLImageElement(); ret.ownerDocument = this; return ret; } create_canvas() { var ret = new HTMLCanvasElement(); ret.ownerDocument = this; return ret; } create_audio() { var ret = new HTMLAudioElement(); ret.ownerDocument = this; return ret; } create_input() { var rs = new HTMLInputElement(); rs.ownerDocument = this; return rs; } create_video() { var ret = new HTMLVideoElement(); ret.ownerDocument = this; return ret; } create_script() { var ret = new HTMLScriptElement(); ret.ownerDocument = this; return ret; } create_meta() { var ret = new HTMLMetaElement(); ret.ownerDocument = this; return ret; } createDocumentFragment() { return new HTMLDivElement(); } onframeend() { this._frameEndEvt.eventPhase = Event.AT_TARGET; super._fireEventListeners(this._frameEndEvt); } _dispatchEvent(evt) { var ancestores = null; if (evt.target) ancestores = evt.target.getAncestorsNode(); if (ancestores == null || ancestores.length == 0) { return super._dispatchEvent(evt); } var ancLen = ancestores.length; evt.eventPhase = Event.CAPTURING_PHASE; var stop = (function () { window.dispatchEvent(evt); if (evt._propagationStopped) return true; for (var i = ancLen - 1; i >= 0; i--) { var cnode = ancestores[i]; evt.currentTarget = cnode; cnode.fireEventListeners(evt); if (evt._propagationStopped) { return true; } } return false; })(); if (!stop) { evt.eventPhase = Event.AT_TARGET; evt.currentTarget = evt.target; stop = (function () { evt.target.fireEventListeners(evt); if (evt._propagationStopped) return true; return false; })(); } if (!stop && !evt.cancelable) { evt.eventPhase = Event.BUBBLING_PHASE; for (var i = 0; i < ancLen; i++) { var cnode = ancestores[i]; evt.currentTarget = cnode; cnode.fireEventListeners(evt); if (evt._propagationStopped) { stop = true; break; } } if (!stop) { evt.currentTarget = window; window.dispatchEvent(evt); } } if (evt.preventDefault) { } return true; } set cookie(v) { var t = _Cookie.addCookie(v); if (t && _Cookie.pushCookie(t)) { _Cookie.flush(); } } get cookie() { return _Cookie.toLocalString(); } loadCookie() { this._cookiePath = window.localStorage.fileNamePre + "_cookie.txt"; var temp = readFileSync(this._cookiePath, "utf8"); _Cookie.init(temp); return true; } open(url, name, features, replace) { throw 'not implements'; } getElementsByTagName(tagname) { var d = new NodeList(); if ("body" == tagname) d.push(this.body); else if ("head" == tagname) d.push(this.head); return d; } onkeydown(ev) { } onkeypress(ev) { } onkeyup(ev) { } onmousedown(ev) { } onmousemove(ev) { } onmouseout(ev) { } onmouseover(ev) { } onmouseup(ev) { } onmousewheel(ev) { } ontouchcancel(ev) { } ontouchend(ev) { } ontouchmove(ev) { } ontouchstart(ev) { } getElementById(elementId) { for (var i = 0, sz = this.all.length; i < sz; i++) { var c = this.all[i]; if (c.id === elementId) return c; } return null; } getElementsByClassName(classNames) { throw 'not implemented'; } getElementsByName(name) { return document._elements[name] || []; } write(value) { console.log("The document don't support write function!!!"); } } applyMixins(Document, [Node, GlobalEventHandlers, NodeSelector, DocumentEvent]); class CloseEvent extends Event { constructor() { super('close'); } initCloseEvent(typeArg, canBubbleArg, cancelableArg, wasCleanArg, codeArg, reasonArg) { } } class MessageEvent extends Event { constructor(type, eventInitDict) { super(type); } initMessageEvent(typeArg, canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg) { } } class WebSocket extends EventTarget { constructor(url) { super(); this._nativeObj = null; this._nativeObj = new ConchWebSocket(url); this._nativeObj._onmessage = (data) => { var evt = new MessageEvent('message'); evt.data = data; evt.target = evt.currentTarget = this; this.onmessage && this.onmessage(evt); }; } get binaryType() { return this._nativeObj.binaryType; } set binaryType(b) { this._nativeObj.binaryType = b; } get timegap() { return this._nativeObj.timegap; } set onopen(f) { this._nativeObj.onopen = function () { var e = new Event("open"); e.target = e.currentTarget = this; f(e); }; } set onclose(f) { this._nativeObj.onclose = f; } set onerror(f) { this._nativeObj.onerror = f; } close() { this._nativeObj.close(); } send(msg) { this._nativeObj.send(msg); } get readyState() { return this._nativeObj.readyState; } } WebSocket.CLOSED = 3; WebSocket.CLOSING = 2; WebSocket.CONNECTING = 0; WebSocket.OPEN = 1; window.WebSocket = WebSocket; class DOMParser { constructor() { this._parser = new _DOMParser(); } set src(s) { this._src = location.resolve(s); this._parser.src = this._src; } get src() { return this._src; } set onload(callback) { this._parser._onload = callback; this._parser.onload = this.nativeObjOnload; } nativeObjOnload() { this._onload(); } get onload() { return this._parser._onload; } set onerror(callback) { this._parser._onerror = callback; this._parser.onerror = this.nativeObjOnerror; } nativeObjOnerror() { this._onerror(); } get onerror() { return this._parser._onerror; } static initXMl(xml) { var result; if (!xml) { var temp = new _jsXmlNode(); temp.nodeName = "parsererror"; temp.textContent = "parsererror error"; result = new _jsXmlNode(); result.childNodes[0] = temp; return result; } result = new _jsXmlNode(); result.nodeName = xml.nodeName; result.nodeValue = xml.nodeValue; result.nodeType = 1; if (result.nodeName == "#cdata-section") { result.nodeType = 3; result.nodeName = "#text"; } result.textContent = xml.textContent; var attrs = xml.attributes; for (var i = 0, sz1 = attrs.length; i < sz1; i++) { var attr = attrs[i]; var key = attr.nodeName; var tempAttr = new _jsXmlAttr(key, attr.nodeValue); result.attributes[i] = tempAttr; result.attributes[key] = tempAttr; } var childs = xml.childNodes; for (var i = 0, sz1 = childs.length; i < sz1; i++) { var chd = childs[i]; var nodeName = chd.nodeName; result.childNodes[i] = DOMParser.initXMl(chd); } return result; } parseFromString(s, t) { var xml = this._parser.parseFromString(s, t); var root = new _jsXmlDocument(); root.childNodes[0] = DOMParser.initXMl(xml.childNodes[0]); return root; } getResult() { if (!this._result) { this._result = new _jsXmlDocument(); this._result.childNodes[0] = DOMParser.initXMl(this._parser.getResult().childNodes[0]); } return this._result; } } window["DOMParser"] = DOMParser; class _jsXmlAttr { constructor(key, value) { this.nodeName = key; this.nodeValue = this.textContent = value; } get value() { return this.nodeValue; } } class _jsXmlNode extends _jsXmlAttr { constructor() { super("", ""); this.childNodes = []; this.childNodes["item"] = function (i) { return this[i]; }; this.attributes = []; } get firstChild() { return this.childNodes ? this.childNodes[0] : null; } getElementsByTagName(name) { var result = []; if (this.nodeName == name) result.push(this); else { for (var i = 0, n = this.childNodes.length; i < n; i++) { var son = this.childNodes[i]; result = result.concat(son.getElementsByTagName(name)); } } return result; } getAttribute(name) { var attr = this.attributes[name]; return attr ? attr["nodeValue"] : ""; } } class _jsXmlDocument extends _jsXmlNode { } var GL_CAPS; (function (GL_CAPS) { GL_CAPS[GL_CAPS["NONE"] = 0] = "NONE"; GL_CAPS[GL_CAPS["TEXTURE_COMPRESSION_PVR"] = 2] = "TEXTURE_COMPRESSION_PVR"; GL_CAPS[GL_CAPS["TEXTURE_COMPRESSION_ETC1"] = 4] = "TEXTURE_COMPRESSION_ETC1"; GL_CAPS[GL_CAPS["TEXTURE_COMPRESSION_ETC2"] = 8] = "TEXTURE_COMPRESSION_ETC2"; GL_CAPS[GL_CAPS["TEXTURE_TPG"] = 32] = "TEXTURE_TPG"; GL_CAPS[GL_CAPS["INSTANCEING"] = 64] = "INSTANCEING"; })(GL_CAPS || (GL_CAPS = {})); var _window = new _Window(); window.getComputedStyle = function (ele, parm) { return null; }; window.pageXOffset = window.pageYOffset = 0; window.localStorage = new Storage(); window.sessionStorage = new WindowSessionStorage(); var location = window.location = new Location; window.console = new Console(); window.addEventListener = _window.addEventListener.bind(_window); window.removeEventListener = _window.removeEventListener.bind(_window); window.dispatchEvent = _window.dispatchEvent.bind(_window); window.document = new Document(); window.layaDoc = window.document; window.crypto = new Crypto(); window.devicePixelRatio = 1.0; var Image = window.Image = HTMLImageElement; var Audio = window.Audio = HTMLAudioElement; window.requestAnimationFrame = requestAnimationFrame; window.cancelAnimationFrame = cancelAnimationFrame; var parent = window.parent = window; var frames = window.frames = null; var navigator = window.navigator = new Navigator(); window.open = (url, target, features, replace) => { createProcess('scripts/index.js', url); return window; }; var onload = window.onload = null; function printstack() { var e = new Error(); alert(e.stack); } var div = HTMLDivElement; window.layabox = { devinfo: (function getDevInfo() { var devi = conchConfig.getDeviceInfo(); window.console.log(devi); return JSON.parse(devi); })(), getDeviceInfo: function () { return this.devinfo; } }; window.layaHtml5 = { File: File }; var _$innerWidth = getInnerWidth(); var _$innerHeight = getInnerHeight(); var _$devicePixelRatio = getDevicePixelRatio(); Object.defineProperty(window, 'innerWidth', { get: function () { return _$innerWidth; } }); Object.defineProperty(window, 'innerHeight', { get: function () { return _$innerHeight; } }); Object.defineProperty(window, 'outerWidth', { get: function () { return _$innerWidth; } }); Object.defineProperty(window, 'outerHeight', { get: function () { return _$innerHeight; } }); Object.defineProperty(window, 'devicePixelRatio', { get: function () { return _$devicePixelRatio; } }); conch.setOnResize(function (w, h) { _$innerWidth = w; _$innerHeight = h; window.console.log(">>>>>>>>>>>>>>>>innerWidth:" + _$innerWidth + "innerHeight:" + _$innerHeight); var evt = new UIEvent('resize'); evt.view = window; document._dispatchEvent(evt); window.dispatchEvent(evt); }); conch.config = conchConfig; class Screen { get width() { return _$innerWidth; } get height() { return _$innerHeight; } } window.screen = new Screen(); window.onresize = function (e) { }; conch.onerror = function (message, filename, lineno, colno, error) { if (window.onerror) { var ln = decodeTemp(lineno); var cn = decodeTemp(colno); var er = decodeTemp(error); var mg = decodeTemp(message); var fn = decodeTemp(filename); var e = { message: decodeTemp(message), stack: er, name: "" }; window.onerror(mg == "undefined" ? undefined : mg, fn == "undefined" ? undefined : fn, ln != "undefined" ? parseInt(ln) : undefined, cn != "undefined" ? parseInt(cn) : undefined, e); } }; Object.defineProperty(window, 'onerror', { set: function (fun) { conch.__onerror = fun; showAlertOnJsException(false); }, get: function () { return conch.__onerror; } }); var document = window.document; var addEventListener = window.addEventListener.bind(this); var dispatchEvent = window.dispatchEvent.bind(this); var removeEventListener = window.removeEventListener.bind(this); var clearInterval = window.clearInterval = _window.clearInterval; var clearTimeout = window.clearTimeout = _window.clearTimeout; var setInterval = window.setInterval = _window.setInterval; var setTimeout = window.setTimeout = _window.setTimeout; Object.defineProperty(window, 'runtime', { get: function () { return true; } }); window.postMessage = function (data, d) { if (typeof (data) == "object") data = JSON.stringify(data); conch.callWebviewJS("window.__getMessemage", encodeURIComponent(data), ""); }; window.postRuntimeMessage = function (d) { if (typeof (d) == "object") d = JSON.stringify(d); d = decodeURIComponent(d); var e = new MessageEvent('message'); e.data = JSON.parse(d); e.target = window; var s = new RegExp("(http|file|https)://([^/:]*)(:(\\d+)|)([^?]+)(.*|)"); var rs = s.exec(document.referrer); if (rs) { e.origin = rs[1] + "://" + rs[2] + rs[3]; } window.dispatchEvent(e); }; window.SetupWebglContext = function () { }; window.downloadfile = function (url, force, onok, onerr) { if (force) { url = (function (url) { var ret = url; if (url.indexOf('?') < 0) { ret = url + '?rnd=' + Math.random(); } else { ret = url + '&downloadrnd' + Math.random().toString().substr(2) + '=1'; } return ret; })(url); } var file = new window.layaHtml5.File(url); var filereader = new FileReader(); filereader.onload = function () { onok && onok(filereader.result); }; filereader.onerror = function () { onerr && onerr(); }; filereader.readAsText(file); }; if (window.navigator.platform != "windows") window["ontouchstart"] = null; window['GL_CAPS'] = GL_CAPS; window.focus = function () { }; var nMem = conchConfig.getTotalMem(); if (nMem <= 524288) { conchConfig.atlasNum = 10; conchConfig.maxTextureMemSize = 64 * 1024 * 1024; } else if (nMem > 524288 && nMem <= 1048576) { conchConfig.atlasNum = 16; conchConfig.maxTextureMemSize = 84 * 1024 * 1024; } else if (nMem > 1048576) { conchConfig.atlasNum = 20; conchConfig.maxTextureMemSize = 128 * 1024 * 1024; } class Performance { now() { return tmGetCurms(); } } window["Performance"] = Performance; window.performance = new Performance(); (function () { 'use strict'; var gl = LayaGLContext; window["extendWebGLPlusToWebGLContext"](gl); class AppInfo { } ; var appobj = null; try { appobj = JSON.parse(conch.readFileFromAsset('app.json', 'utf8')); if (appobj) { require(appobj.mainjs); } } catch (e) { require('index'); } })();