///
class ColorUtil{
static _COLOR_MAP:Object = {"white": '#FFFFFF', "red": '#FF0000', "green": '#00FF00', "blue": '#0000FF', "black": '#000000', "yellow": '#FFFF00', 'gray': '#AAAAAA'};
static getColorNum(str):number
{
if(!str)return 0;
if(typeof(str)=="number")
{
if(str >= 0xFFFFFF ) return str;
return str|0xFF000000;
}
var len:number;
if(str[0]=="#")
{
var r:string=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:string=ColorUtil._COLOR_MAP[str];
return c?ColorUtil.getColorNum(c):NaN;
}
}
static RGBReg:RegExp=new RegExp("rgb([a]{0,1})\\s*[(]([\\d,.\\s-]*)?[)]");
static HSLReg:RegExp=new RegExp("hsl([a]{0,1})\\s*[(]([\\d,.\\s-%]*)?[)]");
static getColNum(c:string,isRgb:boolean):number
{
var temp:string,i:number,s:number,result:Array=[],st:number;
var t:Array=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:Array=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:string):string
{
str = str.substr(1);
var i:number,len:number=str.length,result:string;
switch (len) {
case 3:
result="ff";
for(i=0;i0xff000000){
color-=0xff000000;
}
else{
return "rgba("+(color>>16&0xff)+","+(color>>8&0xff)+","+(color&0xff)+","+((color>>24&0xff)/0xff)+")";
}
var str:string = color.toString(16);
while (str.length < 6)
str = "0" + str;
return "#" + str;
}
static hsl2rgb(h:number, s:number, l:number):Array
{
var r:number, g:number, b:number;
if(s == 0){
r = g = b = l; // achromatic
}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)];
}
}
class ProgramLocationTable
{
public _fakeLocationNum:number = 0;
public _map:Object = {};
getFakeLocation(fakeProgramID:number, name:string):number
{
var key:string = fakeProgramID + "-" + name;
var fakeID:number = this._map[key];
if (!fakeID)
{
fakeID = this._fakeLocationNum++;
this._map[key] = fakeID;
}
return fakeID;
}
}
enum FUNCTION_ID
{
UNIFORMMATRIX2FVEX=0,
UNIFORMMATRIX3FVEX,
UNIFORMMATRIX4FVEX,
ADDSHADERUNIFORM,
UPLOADSHADERUNIFORMS,
UPLOADSHADERUNIFORMS_BUFFER,
USECOMMANDENCODER,
LOADDATATOREG,
LOADDATATOREGEX,
IFLESS0,
IFEQUAL0,
IFGREATER0,
IFLEQUAL0,
IFGEQUAL0,
IFGNOTEQUAL0,
OPERATEREG,
STORE,
CREATEIMAGEONRENDERTHREAD=64,
DELETE_IMAGE_ON_RENDER_THREAD,
RELEASE_IMAGE_ON_RENDER_THREAD,
SET_IMAGE_RELEASE_SPACE_TIME,
SET_PREMULTIPLY_ALPHA,
PERFADDDATA,
PERFUPDATEDT,
SET_MAIN_CONTEXT_SIZE,
//-------------------------------
GETCONTEXTATTRIBUTES=128,
ISCONTEXTLOST,
GETSUPPORTEDEXTENSIONS,
GETEXTENSION,
ACTIVETEXTURE,
ATTACHSHADER,
BINDATTRIBLOCATION,
BINDBUFFER,
BINDFRAMEBUFFER,
BINDRENDERBUFFER,//第10个
BINDTEXTURE,
USETEXTURE,
BLENDCOLOR,
BLENDEQUATION,
BLENDEQUATIONSEPARATE,
BLENDFUNC,
BLENDFUNCSEPARATE,
BUFFERDATA_SIZE,
BUFFERDATA_ARRAYBUFFER,
BUFFERSUBDATA,//第20个
CHECKFRAMEBUFFERSTATUS,
CLEAR,
CLEARCOLOR,
CLEARDEPTH,
CLEARSTENCIL,
COLORMASK,
COMPILESHADER,
COPYTEXIMAGE2D,
COPYTEXSUBIMAGE2D,
CREATEBUFFER,//第30个
CREATEFRAMEBUFFER,
CREATEPROGRAM,
CREATERENDERBUFFER,
CREATESHADER,
CREATETEXTURE,
CULLFACE,
DELETEBUFFER,
DELETEFRAMEBUFFER,
DELETEPROGRAM,
DELETERENDERBUFFER,//第40个
DELETESHADER,
DELETETEXTURE,
DEPTHFUNC,
DEPTHMASK,
DEPTHRANGE,
DETACHSHADER,
DISABLE,
DISABLEVERTEXATTRIBARRAY,
DRAWARRAYS,
DRAWELEMENTS,//第50个
ENABLE,
ENABLEVERTEXATTRIBARRAY,
FINISH,
FLUSH,
FRAMEBUFFERRENDERBUFFER,
FRAMEBUFFERTEXTURE2D,
FRONTFACE,
GENERATEMIPMAP,
GETACTIVEATTRIB,
GETACTIVEUNIFORM,//第60个
GETATTRIBLOCATION,
GETPARAMETER,
GETBUFFERPARAMETER,
GETERROR,
GETFRAMEBUFFERATTACHMENTPARAMETER,
GETPROGRAMPARAMETER,
GETPROGRAMINFOLOG,
GETRENDERBUFFERPARAMETER,
GETSHADERPRECISIONFORMAT,
GETSHADERPARAMETER,//第70个
GETSHADERINFOLOG,
GETSHADERSOURCE,
GETTEXPARAMETER,
GETUNIFORM,
GETUNIFORMLOCATION,
GETVERTEXATTRIB,
GETVERTEXATTRIBOFFSET,
HINT,
ISBUFFER,
ISENABLED,//第80个
ISFRAMEBUFFER,
ISPROGRAM,
ISRENDERBUFFER,
ISSHADER,
ISTEXTURE,
LINEWIDTH,
LINKPROGRAM,
PIXELSTOREI,
POLYGONOFFSET,
READPIXELS,//第90个
RENDERBUFFERSTORAGE,
SAMPLECOVERAGE,
SCISSOR,
SHADERSOURCE,
STENCILFUNC,
STENCILFUNCSEPARATE,
STENCILMASK,
STENCILMASKSEPARATE,
STENCILOP,
STENCILOPSEPARATE,//第100个
TEXIMAGE2D,
TEXPARAMETERF,
TEXPARAMETERI,
TEXSUBIMAGE2D,
UNIFORM1F,
UNIFORM1FV,
UNIFORM1I,
UNIFORM1IV,
UNIFORM2F,
UNIFORM2FV,//第110个
UNIFORM2I,
UNIFORM2IV,
UNIFORM3F,
UNIFORM3FV,
UNIFORM3I,
UNIFORM3IV,
UNIFORM4F,
UNIFORM4FV,
UNIFORM4I,
UNIFORM4IV,//第120个
UNIFORMMATRIX2FV,
UNIFORMMATRIX3FV,
UNIFORMMATRIX4FV,
USEPROGRAM,
VALIDATEPROGRAM,
VERTEXATTRIB1F,
VERTEXATTRIB1FV,
VERTEXATTRIB2F,
VERTEXATTRIB2FV,
VERTEXATTRIB3F,//第130个
VERTEXATTRIB3FV,
VERTEXATTRIB4F,
VERTEXATTRIB4FV,
VERTEXATTRIBPOINTER,
VIEWPORT,
CONFIGUREBACKBUFFER,
COMPRESSEDTEXIMAGE2D,
TEXIMAGE2D_PIXEL,
TEXSUBIMAGE2D_PIXEL,
CREATEVERTEXARRAY,//第140个
BINDVERTEXARRAY,
DELETEVERTEXARRAYS,
READPIXELS_ASYNC,
COMPRESSEDTEXSUBIMAGE2D,
VERTEXATTRIBDIVISOR,
DRAWARRAYSINSTANCED,
DRAWELEMENTSINSTANCED,
TEXIMAGE2DCANVAS,
TEXSTORAGE2D,
}
enum UNIFORM_TYPE
{
//native用的shaderUniform的函数ID
INTERIOR_UNIFORM1F = 0,
INTERIOR_UNIFORM1FV,
INTERIOR_UNIFORM1I,
INTERIOR_UNIFORM1IV,
INTERIOR_UNIFORM2F,
INTERIOR_UNIFORM2FV,
INTERIOR_UNIFORM2I,
INTERIOR_UNIFORM2IV,
INTERIOR_UNIFORM3F,
INTERIOR_UNIFORM3FV,
INTERIOR_UNIFORM3I,
INTERIOR_UNIFORM3IV,
INTERIOR_UNIFORM4F,
INTERIOR_UNIFORM4FV,
INTERIOR_UNIFORM4I,
INTERIOR_UNIFORM4IV,
INTERIOR_UNIFORMMATRIX2FV,
INTERIOR_UNIFORMMATRIX3FV,
INTERIOR_UNIFORMMATRIX4FV,
INTERIOR_UNIFORMSAMPLER_2D,
INTERIOR_UNIFORMSAMPLER_CUBE,
}
class BindInfo
{
constructor()
{
this.m_bindMap = {}
}
private m_bindMap:Object;
public setBind(pname:any, buffer:any):void
{
this.m_bindMap[pname] = buffer;
}
public getBind(pname:any):any
{
var buffer = this.m_bindMap[pname];
if(!buffer)
return null;
if(buffer.id == -1) // delete
{
this.m_bindMap[pname] = null;
return null;
}
return buffer;
}
}
class ANGLEInstancedArrays
{
constructor(encoder)
{
this.encoder = encoder;
}
vertexAttribDivisorANGLE(index:number, divisor:number):void
{
this.encoder.vertexAttribDivisor(index, divisor);
}
drawArraysInstancedANGLE(mode:number, first:number, count:number, instanceCount:number):void
{
this.encoder.drawArraysInstanced(mode, first, count, instanceCount);
}
drawElementsInstancedANGLE(mode:number, count:number, type:number, offset:number, instanceCount:number):void
{
this.encoder.drawElementsInstanced(mode, count, type, offset, instanceCount);
}
public encoder:GLCommandEncoder;
}
class OESVertexArrayObject
{
constructor(encoder)
{
this.encoder = encoder;
}
createVertexArrayOES():any
{
return this.encoder.createVertexArray();
}
deleteVertexArrayOES(arrayObject:any):void
{
this.encoder.deleteVertexArray(arrayObject);
}
isVertexArrayOES(arrayObject:any):boolean
{
return this.encoder.isVertexArray(arrayObject);
}
bindVertexArrayOES(arrayObject:any):void
{
this.encoder.bindVertexArray(arrayObject);
}
public encoder:GLCommandEncoder;
}
class OESTextureHalfFloatLinear
{}
class EXTColorBufferFloat
{}
class WebGLBuffer
{
constructor(id)
{
this.id = id;
}
public id:number;
}
class WebGLFrameBuffer
{
constructor(id)
{
this.id = id;
this.m_bindInfo = new BindInfo();
}
public id:number;
private m_bindInfo:BindInfo;
public setBind(pname:any, buffer:any):void
{
this.m_bindInfo.setBind(pname, buffer);
}
public getBind(pname:any):any
{
return this.m_bindInfo.getBind(pname);
}
}
class WebGLRenderBuffer
{
constructor(id)
{
this.id = id;
}
public id:number;
}
class WebGLShader
{
constructor(id,type)
{
this.id = id;
this.type = type;
this.compileStatus = 0;
this.src = "";
}
public id:number;
public src:string;
public type:number;
public compileStatus:number;
}
class WebGLProgram
{
constructor(id)
{
this.id = id;
this.linkStatus = 0;
this.vsShader = null;
this.psShader = null;
this.attachedShaderCount = 0;
this.m_localMap = {};
}
public id:number;
public vsShader:WebGLShader;
public psShader:WebGLShader;
public linkedVSSource:string;
public linkedPSSource:string;
public linkStatus:number;
public attachedShaderCount;
private m_localMap:Object;
public addLocationPair(fakeLoc:number, name:string) {
this.m_localMap[fakeLoc] = name;
}
public getLocationName(fakeLoc):string {
return this.m_localMap[fakeLoc];
}
}
class WebGLTexture
{
constructor(id)
{
this.id = id;
}
public id:number;
}
class WebGLVertextArray
{
constructor(id)
{
this.id = id;
}
public id:number;
}
class CallbackFuncObj
{
public static s_nID:number=0;
constructor()
{
this.id = CallbackFuncObj.s_nID++;
this._nativeObj = new _callbackFuncObj(this.id);
}
addCallbackFunc(index:number,func:any)
{
this._vFunc[index] =func;
this._nativeObj.addCallbackFunc(index,func);
}
public id:number;
public _vFunc = new Map();
public _nativeObj:_callbackFuncObj;
}
class fakeIDObj
{
constructor(id:number=0,frame:number=0)
{
this.id = id;
this.frameCount = frame;
}
id:number;
frameCount:number;
}
class GLCommandEncoder
{
private static readonly INT = 0x1404;
private static readonly FLOAT = 0x1406;
/* Uniform Types */
private static readonly FLOAT_VEC2 = 0x8B50;
private static readonly FLOAT_VEC3 = 0x8B51;
private static readonly FLOAT_VEC4 = 0x8B52;
private static readonly INT_VEC2 = 0x8B53;
private static readonly INT_VEC3 = 0x8B54;
private static readonly INT_VEC4 = 0x8B55;
private static readonly BOOL = 0x8B56;
private static readonly BOOL_VEC2 = 0x8B57;
private static readonly BOOL_VEC3 = 0x8B58;
private static readonly BOOL_VEC4 = 0x8B59;
private static readonly FLOAT_MAT2 = 0x8B5A;
private static readonly FLOAT_MAT3 = 0x8B5B;
private static readonly FLOAT_MAT4 = 0x8B5C;
private static readonly SAMPLER_2D = 0x8B5E;
private static readonly SAMPLER_CUBE = 0x8B60;
private static _fakeIDCount:number = 0;
private static _fakeArray=[new fakeIDObj(0,0)];
private static _locTable:ProgramLocationTable = new ProgramLocationTable();
public _idata:Int32Array;
public _fdata:Float32Array;
public _byteArray:Uint8Array;
public _buffer:ArrayBuffer;
private _adjustSize:number = 0;
private _byteLen:number = 0;
private _layagl:any;
public _isSyncToRenderThread:Boolean = false;
private _readPixelsAsyncCallbackFuncObj = new CallbackFuncObj();
constructor(layagl:any, reserveSize:number, adjustSize:number, isSyncToRenderThread:boolean)
{
this._isSyncToRenderThread = isSyncToRenderThread;
this._layagl = layagl;
this._byteLen = reserveSize;
this._adjustSize = adjustSize;
this._init(isSyncToRenderThread);
}
_init(isSyncToRenderThread:boolean):void
{
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():number
{
return this._buffer["_ptrID"];
}
beginEncoding():void
{
this._layagl.beginCommandEncoding(this);
}
endEncoding():void
{
this._layagl.endCommandEncoding();
}
clearEncoding():void
{
this._idata[0] = 1;
}
getCount():number
{
return this._idata[0];
}
_need(sz:number):void
{
if ((this._byteLen - (this._idata[0] << 2)) >= sz) return;
this._byteLen += (sz > this._adjustSize) ? sz : this._adjustSize;
var pre:Int32Array = this._idata;
var preConchRef:any = this._buffer["conchRef"];
var prePtrID:number = 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:number):void
{
this._need(4);
this._idata[this._idata[0]++] = i;
}
add_f(a:number):void
{
this._need(4);
this._fdata[this._idata[0]++] = a;
}
add_ff(a:number, b:number):void
{
this._need(8);
var i:number = this._idata[0];
this._fdata[i++] = a;
this._fdata[i++] = b;
this._idata[0] = i;
}
add_fff(a:number, b:number, c:number) {
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:number, b:number):void
{
this._need(8);
var i:number = this._idata[0];
this._idata[i++] = a;
this._idata[i++] = b;
this._idata[0] = i;
}
add_if(a:number, b:number):void
{
this._need(8);
var i:number = this._idata[0];
this._idata[i++] = a;
this._fdata[i++] = b;
this._idata[0] = i;
}
add_iii(a:number, b:number, c:number):void
{
this._need(12);
var idata:Int32Array = this._idata;
var i:number = this._idata[0];
idata[i++] = a;
idata[i++] = b;
idata[i++] = c;
this._idata[0] = i;
}
add_iif(a:number, b:number, c:number):void
{
this._need(12);
var idata:Int32Array = this._idata;
var i:number = this._idata[0];
idata[i++] = a;
idata[i++] = b;
this._fdata[i++] = c;
this._idata[0] = i;
}
add_ifi(a:number, b:number, c:number):void
{
this._need(12);
var idata:Int32Array = this._idata;
var i:number = this._idata[0];
idata[i++] = a;
this._fdata[i++] = b;
idata[i++] = c;
this._idata[0] = i;
}
add_iifi(a:number, b:number, c:number, d:number):void
{
this._need(16);
var idata:Int32Array = this._idata;
var i:number = this._idata[0];
idata[i++] = a;
idata[i++] = b;
this._fdata[i++] = c;
idata[i++] = d;
this._idata[0] = i;
}
add_iiii(a:number, b:number, c:number, d:number):void
{
this._need(16);
var idata:Int32Array = this._idata;
var i:number = this._idata[0];
idata[i++] = a;
idata[i++] = b;
idata[i++] = c;
idata[i++] = d;
idata[0] = i;
}
add_iiif(a:number, b:number, c:number, d:number):void
{
this._need(16);
var idata:Int32Array = this._idata;
var i:number = idata[0];
idata[i++] = a;
idata[i++] = b;
idata[i++] = c;
this._fdata[i++] = d;
idata[0] = i;
}
add_iiiif(a:number, b:number, c:number, d:number, e:number):void
{
this._need(20);
var idata:Int32Array = this._idata;
var i:number = idata[0];
idata[i++] = a;
idata[i++] = b;
idata[i++] = c;
idata[i++] = d;
this._fdata[i++] = e;
idata[0] = i;
}
add_iiiff(a:number, b:number, c:number, d:number,e:number):void
{
this._need(20);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number,e:number,f:number):void
{
this._need(24);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number,e:number,f:number):void
{
this._need(24);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number,e:number,f:number,g:number):void
{
this._need(28);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number,e:number,f:number,g:number):void
{
this._need(28);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number,e:number,f:number,g:number,h:number):void
{
this._need(32);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number):void
{
this._need(16);
var idata:Int32Array = this._idata;
var fdata:Float32Array = this._fdata;
var i:number = idata[0];
idata[i++] = a;
idata[i++] = b;
fdata[i++] = c;
fdata[i++] = d;
idata[0] = i;
}
add_iifff(a:number, b:number, c:number, d:number, e:number):void
{
this._need(20);
var idata:Int32Array = this._idata;
var fdata:Float32Array = this._fdata;
var i:number = idata[0];
idata[i++] = a;
idata[i++] = b;
fdata[i++] = c;
fdata[i++] = d;
fdata[i++] = e;
idata[0] = i;
}
add_iiffff(a:number, b:number, c:number, d:number, e:number, f:number):void
{
this._need(24);
var idata:Int32Array = this._idata;
var fdata:Float32Array = this._fdata;
var i:number = 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:number, b:number, c:number, d:number, e:number):void
{
this._need(20);
var idata:Int32Array = this._idata;
var i:number = idata[0];
idata[i++] = a;
idata[i++] = b;
idata[i++] = c;
idata[i++] = d;
idata[i++] = e;
idata[0] = i;
}
add_iiiiii(a:number, b:number, c:number, d:number, e:number, f:number):void
{
this._need(24);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number, e:number, f:number, g:number):void
{
this._need(28);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number, e:number, f:number, g:number,h:number,j:number,k:number,l:number,m:number):void
{
this._need(48);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number, e:number, f:number, g:number,h:number,j:number,k:number,l:number,m:number,n:number):void
{
this._need(52);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number):void
{
this._need(12);
var i:number = this._idata[0];
this._idata[i++] = a;
this._fdata[i++] = b;
this._fdata[i++] = c;
this._idata[0] = i;
}
add_iffi(a:number, b:number, c:number, d:number):void
{
this._need(16);
var i:number = 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:number, b:number, c:number, d:number, e:number):void
{
this._need(20);
var i:number = 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:number, b:number, c:number, d:number, e:number):void
{
this._need(20);
var i:number = this._idata[0];
var fdata:Float32Array = 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:number, b:number, c:number, d:number, e:number, f:number):void
{
this._need(24);
var i:number = this._idata[0];
var fdata:Float32Array = 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:number, b:number, c:number, d:number, e:number, f:number, g:number):void
{
this._need(28);
var i:number = this._idata[0];
var fdata:Float32Array = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number):void
{
this._need(28);
var i:number = this._idata[0];
var fdata:Float32Array = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number):void
{
this._need(32);
var i:number = this._idata[0];
var fdata:Float32Array = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number):void
{
this._need(32);
var i:number = this._idata[0];
var idata:Int32Array = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number, j:number):void
{
this._need(36);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number, j:number,k:number):void
{
this._need(40);
var idata:Int32Array = this._idata;
var i:number = 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:number, b:number, c:number, d:number, e:number, f:number, g:number, h:number, j:number,k:number,l:number):void
{
this._need(44);
var idata:Int32Array = this._idata;
var i:number = 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:string, len:number):void
{
var ab:ArrayBuffer = conch.strTobufer(str);
this._need(len + 4);
this._idata[this._idata[0]++] = len;
if (len == 0) return;
var uint8array:Uint8Array = new Uint8Array(ab);
this._byteArray.set(uint8array, this._idata[0] * 4);
this._idata[0] += len / 4;
}
wab(arraybuffer:any, length:number, nAlignLength:number, offset?:number):void
{
offset = offset ? offset : 0;
this._need(nAlignLength + 4);
//写入长度
this._idata[this._idata[0]++] = length;
//写入数据
var uint8array: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:any, length:number, offset?:number):void
{
offset = offset ? offset : 0;
this._need(length);
//写入数据
var ab:any = null;
if (arraybuffer instanceof ArrayBuffer)
{
ab = arraybuffer;
}
else if (arraybuffer.buffer)
{
ab = arraybuffer.buffer;
}
else
{
console.log("not arraybuffer/dataview ");
return;
}
var uint8array:Uint8Array = new Uint8Array(ab, offset, length);
this._byteArray.set(uint8array, this._idata[0] * 4);
this._idata[0] += length / 4;
}
//------------------------------------------------------------------------------
//--------以下是native-webgl函数------------------------------------------------
//------------------------------------------------------------------------------
getContextAttributes():any
{
return {alpha:false,antialias:false,depth:true,failIfMajorPerformanceCaveat:false,premultipliedAlpha:true,preserveDrawingBuffer:false,stencil:false};
}
isContextLost():boolean
{
console.log("isContextLost can't support");
return false;
}
getSupportedExtensions():any
{
let extentions:string[] = this._layagl._nativeObj.getStringEx(0x1F03).split(' ');
let version:string = this._layagl._nativeObj.getStringEx(0x1F02);
function supports(extention:string)
{
for (let ext of extentions)
{
if (ext === extention)
{
return true;
}
}
return false;
}
let result:string[] = [];
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_draw_buffers");
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");
/*if (supports("???"))
result.push("WEBGL_color_buffer_float");
*/
result.push("WEBGL_debug_renderer_info");
result.push("WEBGL_lose_context");
return result;
}
getExtension(name:string):any
{
var extention:string = this._layagl._nativeObj.getStringEx(0x1F03);/*GL_EXTENSIONS*/
let extentions:string[] = extention.split(' ');
function supports(extention:string)
{
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'))//和下面易混淆,所以用supports
{
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:number):void
{
this.add_ii(FUNCTION_ID.ACTIVETEXTURE, texture);
}
attachShader(program:WebGLProgram, shader:WebGLShader):void
{
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:WebGLProgram, index:number, name:string):void
{
var strLen = this.getStrLength(name);
this.add_iii(FUNCTION_ID.BINDATTRIBLOCATION, program.id, index);
this.add_String(name, strLen);
}
bindBuffer(target:number, buffer:WebGLBuffer):void
{
this.add_iii(FUNCTION_ID.BINDBUFFER, target, buffer?buffer.id:0);
}
bindFramebuffer(target:number, framebuffer:WebGLFrameBuffer):void
{
this.add_iii(FUNCTION_ID.BINDFRAMEBUFFER, target, framebuffer?framebuffer.id:0);
}
bindRenderbuffer(target:number, renderbuffer:WebGLRenderBuffer):void
{
this.add_iii(FUNCTION_ID.BINDRENDERBUFFER, target, renderbuffer?renderbuffer.id:0);
}
bindTexture(target:number, texture:WebGLTexture):void
{
this.add_iii(FUNCTION_ID.BINDTEXTURE, target, texture?texture.id:0);
}
useTexture(texture:WebGLTexture):void
{
this.add_ii(FUNCTION_ID.USETEXTURE, texture?texture.id:0);
}
blendColor(red:number, green:number, blue:number, alpha:number):void
{
this.add_iffff(FUNCTION_ID.BLENDCOLOR, red, green, blue, alpha);
}
blendEquation(mode:number):void
{
this.add_ii(FUNCTION_ID.BLENDEQUATION, mode);
}
blendEquationSeparate(modeRGB:number, modeAlpha:number):void
{
this.add_iii(FUNCTION_ID.BLENDEQUATIONSEPARATE, modeRGB, modeAlpha);
}
blendFunc(sfactor:number, dfactor:number):void
{
this.add_iii(FUNCTION_ID.BLENDFUNC, sfactor, dfactor);
}
blendFuncSeparate(srcRGB:number, dstRGB:number, srcAlpha:number, dstAlpha:number):void
{
this.add_iiiii(FUNCTION_ID.BLENDFUNCSEPARATE, srcRGB, dstRGB, srcAlpha, dstAlpha);
}
bufferData(target:number, sizeOrArray:any, usage:number):void
{
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:number = sizeOrArray;
this.add_iiii(FUNCTION_ID.BUFFERDATA_SIZE, target, size, usage);
}
}
bufferSubData(target:number, offset:number, data:any):void
{
var nAlignLength = this.getAlignLength(data);
this.add_iii(FUNCTION_ID.BUFFERSUBDATA, target, offset);
this.wab(data, data.byteLength, nAlignLength);
}
checkFramebufferStatus(target:any):any
{
return this._layagl._nativeObj.checkFramebufferStatusEx(target);
}
clear(mask:number):void
{
this.add_ii(FUNCTION_ID.CLEAR, mask);
}
clearColor(red:number, green:number, blue:number, alpha:number):void
{
this.add_iffff(FUNCTION_ID.CLEARCOLOR, red, green, blue, alpha);
}
clearDepth(depth:number):void
{
this.add_if(FUNCTION_ID.CLEARDEPTH, depth);
}
clearStencil(s:number):void
{
this.add_ii(FUNCTION_ID.CLEARSTENCIL, s);
}
colorMask(red:number, green:number, blue:number, alpha:number):void
{
this.add_iiiii(FUNCTION_ID.COLORMASK, red, green, blue, alpha);
}
compileShader(shader:WebGLShader):void
{
this.add_ii(FUNCTION_ID.COMPILESHADER, shader.id);
shader.compileStatus = this._layagl._nativeObj.getShaderParameter(shader.src, shader.type, LayaGLContext.COMPILE_STATUS);
}
copyTexImage2D(target:number, level:number, internalformat:number, x:number, y:number, width:number, height:number, border:number):void
{
this.add_iiiiiiiii(FUNCTION_ID.COPYTEXIMAGE2D, target, level, internalformat, x, y, width, height, border);
}
copyTexSubImage2D(target:number, level:number, xoffset:number, yoffset:number, x:number, y:number, width:number, height:number):void
{
this.add_iiiiiiiii(FUNCTION_ID.COPYTEXSUBIMAGE2D, target, level, xoffset, yoffset, x, y, width, height);
}
createBuffer():WebGLBuffer
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATEBUFFER, fakeID);
return new WebGLBuffer(fakeID);
}
createFramebuffer():WebGLFrameBuffer
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATEFRAMEBUFFER, fakeID);
return new WebGLFrameBuffer(fakeID);
}
createProgram():WebGLProgram
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATEPROGRAM, fakeID);
return new WebGLProgram(fakeID);
}
createRenderbuffer():WebGLRenderBuffer
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATERENDERBUFFER, fakeID);
return new WebGLRenderBuffer(fakeID);
}
createShader(type:number):WebGLShader
{
var fakeID:number = this.createFakeID();
this.add_iii(FUNCTION_ID.CREATESHADER, fakeID, type);
return new WebGLShader(fakeID,type);
}
createTexture():WebGLTexture
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATETEXTURE, fakeID);
return new WebGLTexture(fakeID);
}
cullFace(mode:number):void
{
this.add_ii(FUNCTION_ID.CULLFACE, mode);
}
deleteBuffer(buffer:WebGLBuffer):void
{
this.deleteFakeID(buffer.id);
this.add_ii(FUNCTION_ID.DELETEBUFFER, buffer.id);
}
deleteFramebuffer(framebuffer:WebGLFrameBuffer):void
{
this.deleteFakeID(framebuffer.id);
this.add_ii(FUNCTION_ID.DELETEFRAMEBUFFER, framebuffer.id);
}
deleteProgram(program:WebGLProgram):void
{
this.deleteFakeID(program.id);
this.add_ii(FUNCTION_ID.DELETEPROGRAM, program.id);
}
deleteRenderbuffer(renderbuffer:WebGLRenderBuffer):void
{
this.deleteFakeID(renderbuffer.id);
this.add_ii(FUNCTION_ID.DELETERENDERBUFFER, renderbuffer.id);
}
deleteShader(shader:WebGLShader):void
{
this.deleteFakeID(shader.id);
this.add_ii(FUNCTION_ID.DELETESHADER, shader.id);
}
deleteTexture(texture:WebGLTexture):void
{
this.deleteFakeID(texture.id);
this.add_ii(FUNCTION_ID.DELETETEXTURE, texture.id);
}
depthFunc(func:number):void
{
this.add_ii(FUNCTION_ID.DEPTHFUNC, func);
}
depthMask(flag:number):void
{
this.add_ii(FUNCTION_ID.DEPTHMASK, flag);
}
depthRange(zNear:number, zFar:number):void
{
this.add_iff(FUNCTION_ID.DEPTHRANGE, zNear, zFar);
}
detachShader(program:WebGLProgram, shader:WebGLShader):void
{
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:number):void
{
this.add_ii(FUNCTION_ID.DISABLE, cap);
}
disableVertexAttribArray(index:number):void
{
this.add_ii(FUNCTION_ID.DISABLEVERTEXATTRIBARRAY, index);
}
drawArrays(mode:number, first:number, count:number):void
{
this.add_iiii(FUNCTION_ID.DRAWARRAYS, mode, first, count);
}
drawElements(mode:number, count:number, type:number, offset:number):void
{
this.add_iiiii(FUNCTION_ID.DRAWELEMENTS, mode, count, type, offset);
}
enable(cap:number):void
{
this.add_ii(FUNCTION_ID.ENABLE, cap);
}
enableVertexAttribArray(index:number):void
{
this.add_ii(FUNCTION_ID.ENABLEVERTEXATTRIBARRAY, index);
}
finish():void
{
this.add_i(FUNCTION_ID.FINISH);
}
flush():void
{
this.add_i(FUNCTION_ID.FLUSH);
}
framebufferRenderbuffer(target:number, attachment:number, renderbuffertarget:number, renderbuffer:WebGLRenderBuffer):void
{
this.add_iiiii(FUNCTION_ID.FRAMEBUFFERRENDERBUFFER, target, attachment, renderbuffertarget, renderbuffer ? renderbuffer.id : 0);
}
framebufferTexture2D(target:number, attachment:number, textarget:number, texture:WebGLTexture, level:number):void
{
this.add_iiiiii(FUNCTION_ID.FRAMEBUFFERTEXTURE2D, target, attachment, textarget, texture ? texture.id : 0, level);
}
frontFace(mode:number):void
{
this.add_ii(FUNCTION_ID.FRONTFACE, mode);
}
generateMipmap(target:number):void
{
this.add_ii(FUNCTION_ID.GENERATEMIPMAP, target);
}
getActiveAttrib(program:WebGLProgram, index:number):any
{
return this._layagl._nativeObj.getActiveAttribEx(program.linkedVSSource,program.linkedPSSource,"",index);
}
getActiveUniform(program:WebGLProgram, index:number):any
{
return this._layagl._nativeObj.getActiveUniformEx(program.linkedVSSource,program.linkedPSSource,"",index);
}
getAttribLocation(program:WebGLProgram, name:string):number
{
return this._layagl._nativeObj.getAttribLocationEx(program.linkedVSSource,program.linkedPSSource,"",name);
}
getParameter(pname:number):any
{
var gl:LayaGLContext = this._layagl;
var result:any = 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:number, pname:number):number
{
return this._layagl._nativeObj.getBufferParameterEx(target, pname);
}
getError():any
{
this.add_i(FUNCTION_ID.GETERROR);
return 0;
}
getFramebufferAttachmentParameter(target:number, attachment:number, pname:number):any
{
var gl = this._layagl;
var result:any = null;
switch(pname)
{
case LayaGLContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
var frameBuffer:WebGLFrameBuffer = 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:WebGLFrameBuffer = 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:WebGLProgram, pname:any):any
{
let ret:any;
var gl:LayaGLContext = 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:WebGLProgram):any
{
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:number, pname:number):number
{
return this._layagl._nativeObj.getRenderbufferParameterEx(target, pname);
}
getShaderPrecisionFormat(shaderType:number, precisionType:number):any
{
return this._layagl._nativeObj.getShaderPrecisionFormat(shaderType,precisionType);
}
getShaderParameter(shader:WebGLShader, pname:number):any
{
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:WebGLShader):any
{
return this._layagl._nativeObj.getShaderInfoLogEx(shader.src,shader.type);
}
getShaderSource(shader:WebGLShader):any
{
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:any, pname:any):number
{
return this._layagl._nativeObj.getTexParameterEx(target, pname);
}
getUniform(program:WebGLProgram, location:number):any
{
if(!program.linkStatus || program.id == -1)
return null;
var gl = this._layagl;
var curProgram = gl.getBind(LayaGLContext.CURRENT_PROGRAM);
var result:any = null;
this.useProgram(program);
gl._nativeObj.flushCommand();
var locationName = program.getLocationName(location);
// ret: [type, ...data]
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:WebGLProgram, location:number):any
{
console.log("getUniformMutiThread can't support");
return null;
}
getUniformLocation(program:WebGLProgram, name:string):any
{
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:number, pname:any):any
{
var gl = this._layagl;
var result:any = 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:number, pname:any):any
{
return this._layagl._nativeObj.getVertexAttribOffset(index, pname);
}
hint(target:number, mode:number):void
{
this.add_iii(FUNCTION_ID.HINT, target, mode);
}
isBuffer(buffer:any):boolean
{
return (buffer instanceof WebGLBuffer);
}
isEnabled(cap:any):boolean
{
var ret = this._layagl._nativeObj.isEnabled(cap);
if(!ret)
return false;
return true;
}
isFramebuffer(framebuffer:any):boolean
{
return (framebuffer instanceof WebGLFrameBuffer);
}
isProgram(program:any):boolean
{
return (program instanceof WebGLProgram);
}
isRenderbuffer(renderbuffer:any):boolean
{
return (renderbuffer instanceof WebGLRenderBuffer);
}
isShader(shader:any):boolean
{
return (shader instanceof WebGLShader);
}
isTexture(texture:any):boolean
{
return (texture instanceof WebGLTexture);
}
lineWidth(width:number):void
{
this.add_if(FUNCTION_ID.LINEWIDTH, width);
}
linkProgram(program:WebGLProgram):void
{
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:number, param:number):void
{
this.add_iii(FUNCTION_ID.PIXELSTOREI, pname, param);
}
polygonOffset(factor:number, units:number):void
{
this.add_iff(FUNCTION_ID.POLYGONOFFSET, factor, units);
}
readPixels(x:number, y:number, width:number, height:number, format:any, type:any, pixels:any):void
{
if(!pixels && !(pixels instanceof Uint8Array) && !(pixels instanceof Uint16Array) &&
!(pixels instanceof Float32Array))
return;
var ret = this._layagl._nativeObj.readPixels(x, y, width, height, format, type);
//var len = Math.min(pixels.length, ret.length);
pixels.set(new Uint8Array(ret));
}
readPixelsAsync(x:number, y:number, w:number, h:number, format:any, type:any, callBack:(data:ArrayBuffer)=>void):void
{
var fakeID:number = 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:number, internalformat:number, width:number, height:number):void
{
this.add_iiiii(FUNCTION_ID.RENDERBUFFERSTORAGE, target, internalformat, width, height);
}
sampleCoverage(value:number, invert:number):void
{
this.add_ifi(FUNCTION_ID.SAMPLECOVERAGE, value, invert);
}
scissor(x:number, y:number, width:number, height:number):void
{
this.add_iiiii(FUNCTION_ID.SCISSOR, x, y, width, height);
}
shaderSource(shader:WebGLShader, source:string):void
{
shader.src = source;
var strLen = this.getStrLength(source);
this.add_ii(FUNCTION_ID.SHADERSOURCE, shader.id);
this.add_String(source, strLen);
}
stencilFunc(func:number, ref:number, mask:number):void
{
this.add_iiii(FUNCTION_ID.STENCILFUNC, func, ref, mask);
}
stencilFuncSeparate(face:number, func:number, ref:number, mask:number):void
{
this.add_iiiii(FUNCTION_ID.STENCILFUNCSEPARATE, face, func, ref, mask);
}
stencilMask(mask:number):void
{
this.add_ii(FUNCTION_ID.STENCILMASK, mask);
}
stencilMaskSeparate(face:number, mask:number):void
{
this.add_iii(FUNCTION_ID.STENCILMASKSEPARATE, face, mask);
}
stencilOp(fail:number, zfail:number, zpass:number):void
{
this.add_iiii(FUNCTION_ID.STENCILOP, fail, zfail, zpass);
}
stencilOpSeparate(face:number, fail:number, zfail:number, zpass:number):void
{
this.add_iiiii(FUNCTION_ID.STENCILOPSEPARATE, face, fail, zfail, zpass);
}
texImage2D(_args):void
{
var args = arguments;
if (args.length == 6)
{
//目前只支持传入image
if (args[5]._nativeObj)
{
//函数ID,target, level, internalformat, format, type, image
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:ArrayBuffer = args[8];
var nAlignLength = this.getAlignLength(ab);
//函数ID,target, level, internalformat, width, height, border, format, type, ArrayBufferView? pixels
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:any, levels:any, internalformat:any, width:number, height:number):void
{
this.add_iiiiii(FUNCTION_ID.TEXSTORAGE2D, target, levels, internalformat, width, height);
}
texParameterf(target:number, pname:number, param:number):void
{
this.add_iiif(FUNCTION_ID.TEXPARAMETERF, target, pname, param);
}
texParameteri(target:number, pname:number, param:number):void
{
this.add_iiii(FUNCTION_ID.TEXPARAMETERI, target, pname, param);
}
texSubImage2D(_args):void
{
var args = arguments;
if (args.length == 7)
{
//目前只支持传入image
if (args[6]._nativeObj)
{
//函数ID,target,level,xoffset,yoffset,format,type,image
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:ArrayBuffer = args[8];
var nAlignLength = this.getAlignLength(ab);
//函数ID,target,level,xoffset,yoffset,width,height,format,type,pixel
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:any, x:number):void
{
this.add_iif(FUNCTION_ID.UNIFORM1F, location, x);
}
uniform1fv(location:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniform1fv_laya(location,values);
}
uniform1fv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM1FV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform1i(location:any, x:number):void
{
this.add_iii(FUNCTION_ID.UNIFORM1I, location, x);
}
uniform1iv(location:any, values:any):void
{
values = (values instanceof Array )?new Int32Array(values):values;
this.uniform1iv_laya(location,values);
}
uniform1iv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM1IV, location);
this.wab(values, values.byteLength,nAlignLength);
}
uniform2f(location:any, x:number, y:number):void
{
this.add_iiff(FUNCTION_ID.UNIFORM2F, location, x, y);
}
uniform2fv(location:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniform2fv_laya(location,values);
}
uniform2fv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM2FV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform2i(location:any, x:number, y:number):void
{
this.add_iiii(FUNCTION_ID.UNIFORM2I, location, x, y);
}
uniform2iv(location:any, values:any):void
{
values = (values instanceof Array )?new Int32Array(values):values;
this.uniform2iv_laya(location,values);
}
uniform2iv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM2IV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform3f(location:any, x:number, y:number, z:number):void
{
this.add_iifff(FUNCTION_ID.UNIFORM3F, location, x, y, z);
}
uniform3fv(location:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniform3fv_laya(location,values);
}
uniform3fv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM3FV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform3i(location:any, x:number, y:number, z:number):void
{
this.add_iiiii(FUNCTION_ID.UNIFORM3I, location, x, y, z);
}
uniform3iv(location:any, values:any):void
{
values = (values instanceof Array )?new Int32Array(values):values;
this.uniform3iv_laya(location,values);
}
uniform3iv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM3IV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform4f(location:any, x:number, y:number, z:number, w:number):void
{
this.add_iiffff(FUNCTION_ID.UNIFORM4F, location, x, y, z, w);
}
uniform4fv(location:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniform4fv_laya(location,values);
}
uniform4fv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM4FV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniform4i(location:any, x:number, y:number, z:number, w:number):void
{
this.add_iiiiii(FUNCTION_ID.UNIFORM4I, location, x, y, z, w);
}
uniform4iv(location:any, values:any):void
{
values = (values instanceof Array )?new Int32Array(values):values;
this.uniform4iv_laya(location,values);
}
uniform4iv_laya(location:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.UNIFORM4IV, location);
this.wab(values, values.byteLength, nAlignLength);
}
uniformMatrix2fv(location:any, transpose:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniformMatrix2fv_laya(location,transpose,values);
}
uniformMatrix2fv_laya(location:any, transpose:any, value:any):void
{
var nAlignLength = this.getAlignLength(value);
this.add_iii(FUNCTION_ID.UNIFORMMATRIX2FV, location, transpose);
this.wab(value, value.byteLength, nAlignLength);
}
uniformMatrix3fv(location:any, transpose:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniformMatrix3fv_laya(location,transpose,values);
}
uniformMatrix3fv_laya(location:any, transpose:any, value:any):void
{
var nAlignLength = this.getAlignLength(value);
this.add_iii(FUNCTION_ID.UNIFORMMATRIX3FV, location, transpose);
this.wab(value, value.byteLength, nAlignLength);
}
uniformMatrix4fv(location:any, transpose:any, values:any):void
{
values = (values instanceof Array )?new Float32Array(values):values;
this.uniformMatrix4fv_laya(location,transpose,values);
}
uniformMatrix4fv_laya(location:any, transpose:any, value:any):void
{
var nAlignLength = this.getAlignLength(value);
this.add_iii(FUNCTION_ID.UNIFORMMATRIX4FV, location, transpose);
this.wab(value, value.byteLength, nAlignLength);
}
useProgram(program:WebGLProgram):void
{
this.add_ii(FUNCTION_ID.USEPROGRAM, program ? program.id : 0);
}
validateProgram(program:WebGLProgram):void
{
this.add_ii(FUNCTION_ID.VALIDATEPROGRAM, program.id);
}
vertexAttrib1f(indx:any, x:number):void
{
this.add_iif(FUNCTION_ID.VERTEXATTRIB1F, indx, x);
}
vertexAttrib1fv(indx:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.VERTEXATTRIB1FV, indx);
this.wab(values, values.byteLength, nAlignLength);
}
vertexAttrib2f(indx:any, x:number, y:number):void
{
this.add_iiff(FUNCTION_ID.VERTEXATTRIB2F, indx, x, y);
}
vertexAttrib2fv(indx:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.VERTEXATTRIB2FV, indx);
this.wab(values, values.byteLength, nAlignLength);
}
vertexAttrib3f(indx:any, x:number, y:number, z:number):void
{
this.add_iifff(FUNCTION_ID.VERTEXATTRIB3F, indx, x, y, z);
}
vertexAttrib3fv(indx:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.VERTEXATTRIB3FV, indx);
this.wab(values, values.byteLength, nAlignLength);
}
vertexAttrib4f(indx:any, x:number, y:number, z:number, w:number):void
{
this.add_iiffff(FUNCTION_ID.VERTEXATTRIB4F, indx, x, y, z, w);
}
vertexAttrib4fv(indx:any, values:any):void
{
var nAlignLength = this.getAlignLength(values);
this.add_ii(FUNCTION_ID.VERTEXATTRIB4FV, indx);
this.wab(values, values.byteLength, nAlignLength);
}
vertexAttribPointer(indx:any, size:any, type:any, normalized:any, stride:any, offset:number):void
{
this.add_iiiiiii(FUNCTION_ID.VERTEXATTRIBPOINTER, indx, size, type, normalized, stride, offset);
}
viewport(x:number, y:number, width:number, height:number):void
{
this.add_iiiii(FUNCTION_ID.VIEWPORT, x, y, width, height);
}
configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil?:Boolean, wantsBestResolution?:Boolean):void
{
enableDepthAndStencil=enableDepthAndStencil?enableDepthAndStencil:true;
wantsBestResolution=wantsBestResolution?wantsBestResolution:false;
console.log("configureBackBuffer can't support");
//add_iiiiii(CONFIGUREBACKBUFFER, width, height, antiAlias, enableDepthAndStencil, wantsBestResolution);
}
compressedTexImage2D(_args):void
{
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):void
{
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():WebGLVertextArray
{
var fakeID:number = this.createFakeID();
this.add_ii(FUNCTION_ID.CREATEVERTEXARRAY, fakeID);
return new WebGLVertextArray(fakeID);
}
bindVertexArray(vao:WebGLVertextArray):void
{
this.add_ii(FUNCTION_ID.BINDVERTEXARRAY,vao?vao.id:0);
}
deleteVertexArray(vao:WebGLVertextArray):void
{
this.deleteFakeID(vao.id);
this.add_ii(FUNCTION_ID.DELETEVERTEXARRAYS,vao?vao.id:0);
}
isVertexArray(vao:any):boolean
{
return vao.instanceof(WebGLVertextArray);
}
vertexAttribDivisor(index:number, divisor:number):void
{
this.add_iii(FUNCTION_ID.VERTEXATTRIBDIVISOR, index, divisor);
}
drawArraysInstanced(mode:number, first:number, count:number, instanceCount:number):void
{
this.add_iiiii(FUNCTION_ID.DRAWARRAYSINSTANCED, mode, first, count, instanceCount);
}
drawElementsInstanced(mode:number, count:number, type:number, offset:number, instanceCount:number):void
{
this.add_iiiiii(FUNCTION_ID.DRAWELEMENTSINSTANCED, mode, count, type, offset, instanceCount);
}
uniformMatrix2fvEx(location:any, transpose:any, value:any):void
{
if (!value["_ptrID"])
{
this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true);
}
var nID:number = value["_ptrID"];
this._layagl.syncBufferToRenderThread(value);
this.add_iiii(FUNCTION_ID.UNIFORMMATRIX2FVEX, location, transpose, nID);
}
uniformMatrix3fvEx(location:any, transpose:any, value:any):void
{
if (!value["_ptrID"])
{
this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true);
}
var nID:number = value["_ptrID"];
this._layagl.syncBufferToRenderThread(value);
this.add_iiii(FUNCTION_ID.UNIFORMMATRIX3FVEX, location, transpose, nID);
}
uniformMatrix4fvEx(location:any, transpose:any, value:any):void
{
if (!value["_ptrID"])
{
this._layagl.createArrayBufferRef(value, LayaGLContext.ARRAY_BUFFER_TYPE_DATA, true);
}
var nID:number = value["_ptrID"];
this._layagl.syncBufferToRenderThread(value);
this.add_iiii(FUNCTION_ID.UNIFORMMATRIX4FVEX, location, transpose, nID);
}
addShaderUniform(one:any):void
{
var funID:number = 0;
var isArray:Boolean = 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!");
}
//同步ArrayBufferList
this._layagl.syncBufferToRenderThread(this._buffer);
this.add_iiiiii(FUNCTION_ID.ADDSHADERUNIFORM, funID, one.location, one.type, one.dataOffset, one.textureID);
}
uploadShaderUniforms(commandEncoder:GLCommandEncoder, data:any, type:number):number
{
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():number
{
var frameCount:number = this._layagl.getFrameCount();
var fakeArray:any = GLCommandEncoder._fakeArray;
for( var i:number=0,n:number=fakeArray.length;i 1)
{
LayaGLContext.prototype.bindBuffer = LayaGLContext.prototype.bindBufferMutiThread;
LayaGLContext.prototype.useProgram = LayaGLContext.prototype.useProgramMutiThread;
GLCommandEncoder.prototype.getUniform = GLCommandEncoder.prototype.getUniformMutiThread;
}
}
public constructor(contextType:string)
{
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 )
{
// GLCommandEncoder.prototype.uniform1fv=GLCommandEncoder.prototype.uniform1fv_laya;
// GLCommandEncoder.prototype.uniform1iv=GLCommandEncoder.prototype.uniform1iv_laya;
// GLCommandEncoder.prototype.uniform2fv=GLCommandEncoder.prototype.uniform2fv_laya;
// GLCommandEncoder.prototype.uniform2iv=GLCommandEncoder.prototype.uniform2iv_laya;
// GLCommandEncoder.prototype.uniform3fv=GLCommandEncoder.prototype.uniform3fv_laya;
// GLCommandEncoder.prototype.uniform3iv=GLCommandEncoder.prototype.uniform3iv_laya;
// GLCommandEncoder.prototype.uniform4fv=GLCommandEncoder.prototype.uniform4fv_laya;
// GLCommandEncoder.prototype.uniform4iv=GLCommandEncoder.prototype.uniform4iv_laya;
// GLCommandEncoder.prototype.uniformMatrix2fv=GLCommandEncoder.prototype.uniformMatrix2fv_laya;
// GLCommandEncoder.prototype.uniformMatrix3fv=GLCommandEncoder.prototype.uniformMatrix3fv_laya;
// GLCommandEncoder.prototype.uniformMatrix4fv=GLCommandEncoder.prototype.uniformMatrix4fv_laya;
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"]);
}
}
public static getFrameCount():number
{
return LayaGLContext._frameAndSyncCountBuffer[0];
}
public getFrameCount():number
{
return LayaGLContext._frameAndSyncCountBuffer[0];
}
public syncBufferToRenderThread(value:any,index:number=0)
{
if( LayaGLContext.instance._threadMode == LayaGLContext.THREAD_MODE_SINGLE )return;
var bNeedSync:boolean = false;
if( !value._refArray )
{
if( value.frameCount != LayaGLContext._frameAndSyncCountBuffer[0] )
{
value.frameCount = LayaGLContext._frameAndSyncCountBuffer[0];
bNeedSync = true;
}
}
else
{
var obj:any = 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:Int32Array = LayaGLContext._syncBufferList;
var preConchRef:any = LayaGLContext._syncBufferList["conchRef"];
var prePtrID:number = 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;
}
}
public getDefaultCommandEncoder():GLCommandEncoder
{
return this._defaultEncoder;
}
public commit():void
{
this._saveCommandEncoder.length = 0;
this._currentCmdEncoder = this._defaultEncoder;
this._saveCommandEncoder.push(this._currentCmdEncoder);
}
public setBind(pname, buffer):void
{
this._curBindInfo.setBind(pname, buffer);
}
public getBind(pname):any
{
return this._curBindInfo.getBind(pname);
}
public addGlobalValueDefine(modifyType, type, size, defaultData):number
{
return this._nativeObj.addGlobalValueDefine(modifyType,type,size,defaultData);
}
public endGlobalValueDefine():void
{
this._nativeObj.endGlobalValueDefine();
}
public defineShaderMacro(macroString:string, uniformInfo:any):number
{
//uniformInfo array[{uname:"u_filter1",id:14},{uname:"u_filter2",id:15},..];
var nID:number = LayaGLContext._shader_macro_id_;
var sUniformInfo:string = "";
var len:number = 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;
}
public setCanvasType(type:number)
{
//TODO
}
public setSize(w:number,h:number)
{
if(!isNaN(w)&&!isNaN(h))
{
this.width = w;
this.height = h;
this._nativeObj.setSize(w,h);
}
}
public createCommandEncoder(reserveSize?:number, adjustSize?:number, isSyncToRenderThread?:boolean):GLCommandEncoder
{
reserveSize=reserveSize?reserveSize:128;
adjustSize=adjustSize?adjustSize:64;
isSyncToRenderThread=isSyncToRenderThread?isSyncToRenderThread:false;
var cmd:GLCommandEncoder = new GLCommandEncoder(this, reserveSize, adjustSize, isSyncToRenderThread );
if(isSyncToRenderThread)
{
this.syncBufferToRenderThread(cmd);
}
return cmd;
}
public beginCommandEncoding(commandEncoder:GLCommandEncoder):void
{
commandEncoder = commandEncoder ? commandEncoder : this._defaultEncoder;
this._saveCommandEncoder.push(commandEncoder);
this._currentCmdEncoder = commandEncoder;
}
public endCommandEncoding():void
{
this._saveCommandEncoder.pop();
this._currentCmdEncoder = this._saveCommandEncoder[this._saveCommandEncoder.length - 1];
}
public getContextAttributes():any
{
return this._currentCmdEncoder.getContextAttributes();
}
get drawingBufferWidth():number
{
return this.canvas.width;
}
get drawingBufferHeight():number
{
return this.canvas.height;
}
public isContextLost():void
{
this._currentCmdEncoder.isContextLost();
}
public getSupportedExtensions():any
{
return this._currentCmdEncoder.getSupportedExtensions();
}
public getExtension(name:string):any
{
return this._currentCmdEncoder.getExtension(name);
}
public activeTexture(texture:number):void
{
this._currentCmdEncoder.activeTexture(texture);
}
public attachShader(program:WebGLProgram, shader:WebGLShader):void
{
this._currentCmdEncoder.attachShader(program, shader);
}
public getAttachedShaders(program:WebGLProgram): WebGLShader[]
{
let ret = [];
if(program.vsShader)
{
ret.push(program.vsShader);
}
if(program.psShader)
{
ret.push(program.psShader);
}
return ret;
}
public bindAttribLocation(program:WebGLProgram, index:number, name:string):void
{
this._currentCmdEncoder.bindAttribLocation(program, index, name);
}
public bindBuffer(target:any, buffer:WebGLBuffer):void
{
this.setBind(target, buffer);
this._currentCmdEncoder.bindBuffer(target, buffer);
}
public bindBufferMutiThread(target:any, buffer:WebGLBuffer):void
{
this._currentCmdEncoder.bindBuffer(target, buffer);
}
public bindFramebuffer(target:any, framebuffer:WebGLFrameBuffer):void
{
this._currentCmdEncoder.bindFramebuffer(target, framebuffer);
this.setBind(target, framebuffer);
}
public bindRenderbuffer(target:any, renderbuffer:WebGLRenderBuffer):void
{
this._currentCmdEncoder.bindRenderbuffer(target, renderbuffer);
this.setBind(target, renderbuffer);
}
public bindTexture(target:any, texture:WebGLTexture):void
{
this._currentCmdEncoder.bindTexture(target, texture);
this.setBind(target, texture);
}
public useTexture(texture:WebGLTexture):void
{
this._currentCmdEncoder.useTexture(texture);
}
public blendColor(red:any, green:any, blue:any, alpha:number):void
{
this._currentCmdEncoder.blendColor(red, green, blue, alpha);
}
public blendEquation(mode:any):void
{
this._currentCmdEncoder.blendEquation(mode);
}
public blendEquationSeparate(modeRGB:any, modeAlpha:any):void
{
this._currentCmdEncoder.blendEquationSeparate(modeRGB, modeAlpha);
}
public blendFunc(sfactor:any, dfactor:any):void
{
this._currentCmdEncoder.blendFunc(sfactor, dfactor);
}
public blendFuncSeparate(srcRGB:any, dstRGB:any, srcAlpha:any, dstAlpha:any):void
{
this._currentCmdEncoder.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
public bufferData(target:any, size:any, usage:any):void
{
this._currentCmdEncoder.bufferData(target, size, usage);
}
public bufferSubData(target:any, offset:number, data:any):void
{
this._currentCmdEncoder.bufferSubData(target, offset, data);
}
public checkFramebufferStatus(target:any):any
{
return this._currentCmdEncoder.checkFramebufferStatus(target);
}
public clear(mask:number):void
{
this._currentCmdEncoder.clear(mask);
}
public clearColor(red:any, green:any, blue:any, alpha:number):void
{
this._currentCmdEncoder.clearColor(red, green, blue, alpha);
}
public clearDepth(depth:any):void
{
this._currentCmdEncoder.clearDepth(depth);
}
public clearStencil(s:any):void
{
this._currentCmdEncoder.clearStencil(s);
}
public colorMask(red:number, green:number, blue:number, alpha:number):void
{
this._currentCmdEncoder.colorMask(red, green, blue, alpha);
}
public compileShader(shader:WebGLShader):void
{
this._currentCmdEncoder.compileShader(shader);
}
public copyTexImage2D(target:any, level:any, internalformat:any, x:number, y:number, width:number, height:number, border:any):void
{
this._currentCmdEncoder.copyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
public copyTexSubImage2D(target:any, level:any, xoffset:number, yoffset:number, x:number, y:number, width:number, height:number):void
{
this._currentCmdEncoder.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
public createBuffer():WebGLBuffer
{
return this._currentCmdEncoder.createBuffer();
}
public createFramebuffer():WebGLFrameBuffer
{
return this._currentCmdEncoder.createFramebuffer();
}
public createProgram():WebGLProgram
{
return this._currentCmdEncoder.createProgram();
}
public createRenderbuffer():WebGLRenderBuffer
{
return this._currentCmdEncoder.createRenderbuffer();
}
public createShader(type:any):WebGLShader
{
return this._currentCmdEncoder.createShader(type);
}
public createTexture():WebGLTexture
{
return this._currentCmdEncoder.createTexture();
}
public cullFace(mode:any):void
{
this._currentCmdEncoder.cullFace(mode);
}
public deleteBuffer(buffer:WebGLBuffer):void
{
this._currentCmdEncoder.deleteBuffer(buffer);
buffer.id = -1;
}
public deleteFramebuffer(framebuffer:WebGLFrameBuffer):void
{
this._currentCmdEncoder.deleteFramebuffer(framebuffer);
framebuffer.id = -1;
}
public deleteProgram(program:WebGLProgram):void
{
this._currentCmdEncoder.deleteProgram(program);
program.id = -1;
}
public deleteRenderbuffer(renderbuffer:WebGLRenderBuffer):void
{
this._currentCmdEncoder.deleteRenderbuffer(renderbuffer);
renderbuffer.id = -1;
}
public deleteShader(shader:WebGLShader):void
{
this._currentCmdEncoder.deleteShader(shader);
shader.id = -1;
shader.src = null;
}
public deleteTexture(texture:WebGLTexture):void
{
this._currentCmdEncoder.deleteTexture(texture);
texture.id = -1;
}
public depthFunc(func:any):void
{
this._currentCmdEncoder.depthFunc(func);
}
public depthMask(flag:any):void
{
this._currentCmdEncoder.depthMask(flag);
}
public depthRange(zNear:any, zFar:any):void
{
this._currentCmdEncoder.depthRange(zNear, zFar);
}
public detachShader(program:WebGLProgram, shader:WebGLShader):void
{
this._currentCmdEncoder.detachShader(program, shader);
}
public disable(cap:any):void
{
this._currentCmdEncoder.disable(cap);
}
public disableVertexAttribArray(index:number):void
{
this._currentCmdEncoder.disableVertexAttribArray(index);
}
public drawArrays(mode:any, first:number, count:number):void
{
this._currentCmdEncoder.drawArrays(mode, first, count);
}
public drawElements(mode:any, count:number, type:any, offset:number):void
{
this._currentCmdEncoder.drawElements(mode, count, type, offset);
}
public enable(cap:any):void
{
this._currentCmdEncoder.enable(cap);
}
public enableVertexAttribArray(index:number):void
{
this._currentCmdEncoder.enableVertexAttribArray(index);
}
public finish():void
{
this._currentCmdEncoder.finish();
}
public flush():void
{
this._currentCmdEncoder.flush();
}
public framebufferRenderbuffer(target:any, attachment:any, renderbuffertarget:any, renderbuffer:WebGLRenderBuffer):void
{
this._currentCmdEncoder.framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
var frameBuffer:WebGLFrameBuffer = this.getBind(target);
if(frameBuffer)
{
frameBuffer.setBind(attachment, renderbuffer);
}
}
public framebufferTexture2D(target:any, attachment:any, textarget:any, texture:WebGLTexture, level:any):void
{
this._currentCmdEncoder.framebufferTexture2D(target, attachment, textarget, texture, level);
var frameBuffer:WebGLFrameBuffer = this.getBind(target);
if(frameBuffer)
{
frameBuffer.setBind(attachment, texture);
}
}
public frontFace(mode:any):any
{
return this._currentCmdEncoder.frontFace(mode);
}
public generateMipmap(target:any):any
{
return this._currentCmdEncoder.generateMipmap(target);
}
public getActiveAttrib(program:WebGLProgram, index:number):any
{
return this._currentCmdEncoder.getActiveAttrib(program, index);
}
public getActiveUniform(program:WebGLProgram, index:number):any
{
return this._currentCmdEncoder.getActiveUniform(program, index);
}
public getAttribLocation(program:WebGLProgram, name:string):any
{
return this._currentCmdEncoder.getAttribLocation(program, name);
}
public getParameter(pname:any):any
{
return this._currentCmdEncoder.getParameter(pname);
}
public getBufferParameter(target:any, pname:any):any
{
return this._currentCmdEncoder.getBufferParameter(target, pname);
}
public getError():any
{
return this._currentCmdEncoder.getError();
}
public getFramebufferAttachmentParameter(target:any, attachment:any, pname:any):any
{
return this._currentCmdEncoder.getFramebufferAttachmentParameter(target, attachment, pname);
}
public getProgramParameter(program:WebGLProgram, pname:any):number
{
return this._currentCmdEncoder.getProgramParameter(program, pname);
}
public getProgramInfoLog(program:WebGLProgram):any
{
return this._currentCmdEncoder.getProgramInfoLog(program);
}
public getRenderbufferParameter(target:any, pname:any):any
{
return this._currentCmdEncoder.getRenderbufferParameter(target, pname);
}
public getShaderPrecisionFormat(shaderType:number, precisionType:number):any
{
return this._currentCmdEncoder.getShaderPrecisionFormat(shaderType,precisionType);
}
public getShaderParameter(shader:WebGLShader, pname:any):any
{
return this._currentCmdEncoder.getShaderParameter(shader, pname);
}
public getShaderInfoLog(shader:WebGLShader):any
{
return this._currentCmdEncoder.getShaderInfoLog(shader);
}
public getShaderSource(shader:WebGLShader):any
{
return this._currentCmdEncoder.getShaderSource(shader);
}
public getTexParameter(target:any, pname:any):any
{
return this._currentCmdEncoder.getTexParameter(target, pname);
}
public getUniform(program:WebGLProgram, location:number):any
{
return this._currentCmdEncoder.getUniform(program, location);
}
public getUniformLocation(program:WebGLProgram, name:string):any
{
return this._currentCmdEncoder.getUniformLocation(program, name);
}
public getVertexAttrib(index:number, pname:any):any
{
return this._currentCmdEncoder.getVertexAttrib(index, pname);
}
public getVertexAttribOffset(index:number, pname:any):any
{
return this._currentCmdEncoder.getVertexAttribOffset(index, pname);
}
public hnumber(target:any, mode:any):void
{
this._currentCmdEncoder.hint(target, mode);
}
public hint(target:any, mode:any):void
{
this._currentCmdEncoder.hint(target, mode);
}
public isBuffer(buffer:any):void
{
this._currentCmdEncoder.isBuffer(buffer);
}
public isEnabled(cap:any):boolean
{
return this._currentCmdEncoder.isEnabled(cap);
}
public isFramebuffer(framebuffer:any):void
{
this._currentCmdEncoder.isFramebuffer(framebuffer);
}
public isProgram(program:any):void
{
this._currentCmdEncoder.isProgram(program);
}
public isRenderbuffer(renderbuffer:any):void
{
this._currentCmdEncoder.isRenderbuffer(renderbuffer);
}
public isShader(shader:any):void
{
this._currentCmdEncoder.isShader(shader);
}
public isTexture(texture:any):void
{
this._currentCmdEncoder.isTexture(texture);
}
public lineWidth(width:number):void
{
this._currentCmdEncoder.lineWidth(width);
}
public linkProgram(program:WebGLProgram):void
{
this._currentCmdEncoder.linkProgram(program);
}
public pixelStorei(pname:any, param:any):void
{
this._currentCmdEncoder.pixelStorei(pname, param);
}
public polygonOffset(factor:any, units:any):void
{
this._currentCmdEncoder.polygonOffset(factor, units);
}
public readPixels(x:number, y:number, width:number, height:number, format:any, type:any, pixels:any):void
{
this._currentCmdEncoder.readPixels(x, y, width, height, format, type, pixels);
}
public readPixelsAsync(x:number, y:number, w:number, h:number, format:any, type:any, callBack:(data:ArrayBuffer)=>void):void
{
this._currentCmdEncoder.readPixelsAsync(x, y, w, h, format, type, callBack);
}
public renderbufferStorage(target:any, internalformat:any, width:number, height:number):void
{
this._currentCmdEncoder.renderbufferStorage(target, internalformat, width, height);
}
public sampleCoverage(value:any, invert:any):void
{
this._currentCmdEncoder.sampleCoverage(value, invert);
}
public scissor(x:number, y:number, width:number, height:number):void
{
this._currentCmdEncoder.scissor(x, y, width, height);
}
public shaderSource(shader:WebGLShader, source:any):void
{
this._currentCmdEncoder.shaderSource(shader, source);
}
public stencilFunc(func:number, ref:number, mask:number):void
{
this._currentCmdEncoder.stencilFunc(func, ref, mask);
}
public stencilFuncSeparate(face:number, func:number, ref:number, mask:number):void
{
this._currentCmdEncoder.stencilFuncSeparate(face, func, ref, mask);
}
public stencilMask(mask:any):void
{
this._currentCmdEncoder.stencilMask(mask);
}
public stencilMaskSeparate(face:any, mask:any):void
{
this._currentCmdEncoder.stencilMaskSeparate(face, mask);
}
public stencilOp(fail:number, zfail:number, zpass:number):void
{
this._currentCmdEncoder.stencilOp(fail, zfail, zpass);
}
public stencilOpSeparate(face:number, fail:number, zfail:number, zpass:number):void
{
this._currentCmdEncoder.stencilOpSeparate(face, fail, zfail, zpass);
}
public texImage2D(_args):void
{
var args = arguments;
this._currentCmdEncoder.texImage2D.apply(this._currentCmdEncoder, args);
}
public texStorage2D(target:any, levels:any, internalformat:any, width:number, height:number):void
{
this._currentCmdEncoder.texStorage2D(target, levels, internalformat, width, height);
}
public texParameterf(target:any, pname:any, param:any):void
{
this._currentCmdEncoder.texParameterf(target, pname, param);
}
public texParameteri(target:any, pname:any, param:any):void
{
this._currentCmdEncoder.texParameteri(target, pname, param);
}
public texSubImage2D(_args):void
{
var args = arguments;
this._currentCmdEncoder.texSubImage2D.apply(this._currentCmdEncoder, args);
}
public uniform1f(location:any, x:number):void
{
this._currentCmdEncoder.uniform1f(location, x);
}
public uniform1fv(location:any, v:any):void
{
this._currentCmdEncoder.uniform1fv(location, v);
}
public uniform1i(location:any, x:number):void
{
this._currentCmdEncoder.uniform1i(location, x);
}
public uniform1iv(location:any, v:any):void
{
this._currentCmdEncoder.uniform1iv(location, v);
}
public uniform2f(location:any, x:number, y:number):void
{
this._currentCmdEncoder.uniform2f(location, x, y);
}
public uniform2fv(location:any, v:any):void
{
this._currentCmdEncoder.uniform2fv(location, v);
}
public uniform2i(location:any, x:number, y:number):void
{
this._currentCmdEncoder.uniform2i(location, x, y);
}
public uniform2iv(location:any, v:any):void
{
this._currentCmdEncoder.uniform2iv(location, v);
}
public uniform3f(location:any, x:number, y:number, z:number):void
{
this._currentCmdEncoder.uniform3f(location, x, y, z);
}
public uniform3fv(location:any, v:any):void
{
this._currentCmdEncoder.uniform3fv(location, v);
}
public uniform3i(location:any, x:number, y:number, z:number):void
{
this._currentCmdEncoder.uniform3i(location, x, y, z);
}
public uniform3iv(location:any, v:any):void
{
this._currentCmdEncoder.uniform3iv(location, v);
}
public uniform4f(location:any, x:number, y:number, z:number, w:number):void
{
this._currentCmdEncoder.uniform4f(location, x, y, z, w);
}
public uniform4fv(location:any, v:any):void
{
this._currentCmdEncoder.uniform4fv(location, v);
}
public uniform4i(location:any, x:number, y:number, z:number, w:number):void
{
this._currentCmdEncoder.uniform4i(location, x, y, z, w);
}
public uniform4iv(location:any, v:any):void
{
this._currentCmdEncoder.uniform4iv(location, v);
}
public uniformMatrix2fv(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix2fv(location, transpose, value);
}
public uniformMatrix3fv(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix3fv(location, transpose, value);
}
public uniformMatrix4fv(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix4fv(location, transpose, value);
}
public useProgram(program:WebGLProgram):void
{
this.setBind(LayaGLContext.CURRENT_PROGRAM, program);
this._currentCmdEncoder.useProgram(program);
}
public useProgramMutiThread(program:WebGLProgram):void
{
this._currentCmdEncoder.useProgram(program);
}
public validateProgram(program:WebGLProgram):void
{
this._currentCmdEncoder.validateProgram(program);
}
public vertexAttrib1f(indx:any, x:number):void
{
this._currentCmdEncoder.vertexAttrib1f(indx, x);
}
public vertexAttrib1fv(indx:any, values:any):void
{
this._currentCmdEncoder.vertexAttrib1fv(indx, values);
}
public vertexAttrib2f(indx:any, x:number, y:number):void
{
this._currentCmdEncoder.vertexAttrib2f(indx, x, y);
}
public vertexAttrib2fv(indx:any, values:any):void
{
this._currentCmdEncoder.vertexAttrib2fv(indx, values);
}
public vertexAttrib3f(indx:any, x:number, y:number, z:number):void
{
this._currentCmdEncoder.vertexAttrib3f(indx, x, y, z);
}
public vertexAttrib3fv(indx:any, values:any):void
{
this._currentCmdEncoder.vertexAttrib3fv(indx, values);
}
public vertexAttrib4f(indx:any, x:number, y:number, z:number, w:number):void
{
this._currentCmdEncoder.vertexAttrib4f(indx, x, y, z, w);
}
public vertexAttrib4fv(indx:any, values:any):void
{
this._currentCmdEncoder.vertexAttrib4fv(indx, values);
}
public vertexAttribPointer(indx:any, size:any, type:any, normalized:any, stride:any, offset:number):void
{
this._currentCmdEncoder.vertexAttribPointer(indx, size, type, normalized, stride, offset);
}
public viewport(x:number, y:number, width:number, height:number):void
{
this._currentCmdEncoder.viewport(x, y, width, height);
}
public configureBackBuffer(width:number, height:number, antiAlias:number, enableDepthAndStencil?:Boolean, wantsBestResolution?:Boolean):void
{
enableDepthAndStencil=enableDepthAndStencil?enableDepthAndStencil:true;
wantsBestResolution=wantsBestResolution?wantsBestResolution:false;
this._currentCmdEncoder.configureBackBuffer(width, height, antiAlias, enableDepthAndStencil, wantsBestResolution);
}
public compressedTexImage2D(_args):void
{
var args=arguments;
this._currentCmdEncoder.compressedTexImage2D.apply(this._currentCmdEncoder, args);
}
public compressedTexSubImage2D(_args):void
{
var args=arguments;
this._currentCmdEncoder.compressedTexSubImage2D.apply(this._currentCmdEncoder, args);
}
public createVertexArray():WebGLVertextArray
{
return this._currentCmdEncoder.createVertexArray();
}
public bindVertexArray(vao:WebGLVertextArray):void
{
this._currentCmdEncoder.bindVertexArray(vao);
}
public deleteVertexArray(vao:WebGLVertextArray):void
{
this._currentCmdEncoder.deleteVertexArray(vao);
}
public isVertexArray(vao:any):boolean
{
return this._currentCmdEncoder.isVertexArray(vao);
}
public vertexAttribDivisor(index:number, divisor:number):void
{
this._currentCmdEncoder.vertexAttribDivisor(index, divisor);
}
public drawArraysInstanced(mode:number, first:number, count:number, instanceCount:number):void
{
this._currentCmdEncoder.drawArraysInstanced(mode, first, count, instanceCount);
}
public drawElementsInstanced(mode:number, count:number, type:number, offset:number, instanceCount:number):void
{
this._currentCmdEncoder.drawElementsInstanced(mode, count, type, offset, instanceCount);
}
public uniformMatrix2fvEx(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix2fvEx(location,transpose,value);
}
public uniformMatrix3fvEx(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix3fvEx(location,transpose,value);
}
public uniformMatrix4fvEx(location:any, transpose:any, value:any):void
{
this._currentCmdEncoder.uniformMatrix4fvEx(location,transpose,value);
}
public addShaderUniform(one:any):void
{
this._currentCmdEncoder.addShaderUniform(one);
}
public uploadShaderUniforms(commandEncoder:GLCommandEncoder, data:any,type:number):number
{
this._currentCmdEncoder.uploadShaderUniforms(commandEncoder, data,type);
return 0;
}
public useCommandEncoder(commandEncoder:GLCommandEncoder):void
{
this._currentCmdEncoder.useCommandEncoder(commandEncoder);
}
public loadDataToReg(regNum:number,data:any,offset:number,size:number):void{
this._currentCmdEncoder.loadDataToReg(regNum, data, offset, size);
}
public loadDataToRegEx(regNum:number,dataID:number,offset:number,size:number):void{
this._currentCmdEncoder.loadDataToRegEx(regNum, dataID, offset, size);
}
public ifLess0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifLess0(regNum, statementNum);
}
public ifEqual0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifEqual0(regNum, statementNum);
}
public ifGreater0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifGreater0(regNum, statementNum);
}
public ifLEqual0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifLEqual0(regNum, statementNum);
}
public ifGEqual0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifGEqual0(regNum, statementNum);
}
public ifGNotEqual0(regNum:number,statementNum:number):void{
this._currentCmdEncoder.ifGNotEqual0(regNum, statementNum);
}
public operateReg(regOut:number,reg1:number,reg2:number,size:number,operateType:number,dataType:number):void{
this._currentCmdEncoder.operateReg(regOut, reg1, reg2, size, operateType, dataType);
}
public store(dataID:number, offset:number, regID:number, size:number):void{
this._currentCmdEncoder.store(dataID, offset, regID, size);
}
public setMainContextSize(width: number, height: number):void {
this._nativeObj.setMainContextSize(width, height);
}
public getCurrentContext()
{
return this._currentContext;
}
public getProgramParameterEx(vs:string,ps:string,define:string,pname:number):number
{
return this._nativeObj.getProgramParameterEx(vs,ps,define,pname);
}
public getActiveAttribEx(vs:string,ps:string,define:string,index:number):any
{
return this._nativeObj.getActiveAttribEx(vs,ps,define,index);
}
public getActiveUniformEx(vs:string,ps:string,define:string,index:number):any
{
return this._nativeObj.getActiveUniformEx(vs,ps,define,index);
}
//为了兼容老版本用的,回头删除掉,现在都不用静态函数了
public static createArrayBufferRef(arrayBuffer:any, type:number, syncRender:boolean):any
{
var bufferConchRef:any = webglPlus.createArrayBufferRef(arrayBuffer, type, syncRender, LayaGLContext.ARRAY_BUFFER_REF_REFERENCE);
arrayBuffer["conchRef"] = bufferConchRef;
arrayBuffer["_ptrID"] = bufferConchRef.id;
return bufferConchRef;
}
//为了兼容老版本用的,回头删除掉,现在都不用静态函数了
public static createArrayBufferRefs(arrayBuffer:any, type:number, syncRender:boolean, refType:number):any
{
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:any = null;
if( refType == LayaGLContext.ARRAY_BUFFER_REF_REFERENCE)
{
var refArray:any = 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:number = 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;
}
//为了兼容老版本用的,回头删除掉,现在都不用静态函数了
public static syncBufferToRenderThread(value:any,index:number=0)
{
if( LayaGLContext.instance._threadMode == LayaGLContext.THREAD_MODE_SINGLE )return;
var bNeedSync:boolean = false;
if( !value._refArray )
{
if( value.frameCount != LayaGLContext._frameAndSyncCountBuffer[0] )
{
value.frameCount = LayaGLContext._frameAndSyncCountBuffer[0];
bNeedSync = true;
}
}
else
{
var obj:any = 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:Int32Array = LayaGLContext._syncBufferList;
var preConchRef:any = LayaGLContext._syncBufferList["conchRef"];
var prePtrID:number = 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;
}
}
}
window["WebGLRenderingContext"]=LayaGLContext;
window["WebGL2RenderingContext"]=LayaGLContext;
window["LayaGLContext"]=LayaGLContext;
window["ProgramLocationTable"]=ProgramLocationTable;
window["GLCommandEncoder"]=GLCommandEncoder;
window["CallbackFuncObj"]=CallbackFuncObj;