class JCMemClass{ getChangedFlag():boolean{ return false; } setChangedFlag(b:boolean){ } getDataSize():number{ return 0; } getData():ArrayBuffer{ return null; } } /** * 一个方便操作的buffer * 1. 直接根据数据构建 * 2. 随时修改:修改,添加,例如动态mesh * 3. 可以分段提交 */ class JCGpuBuffer { //m_bChanged: boolean = false; //任意段发生修改 m_nStreamNum: number = 0; // vbo: WebGLBuffer = 0;//gpu res m_nVBLength: number = 0;//对应的显存的大小,如果内存大于显存了,需要重新调整 m_pMemBuffer:JCMemClass[]; m_vStreamStart: number[] = null; m_nTotalSize=0; create(size) { } /** * 分段管理 */ createStreams(s1size, s2size, s3size, ...args) { this.m_nTotalSize=0;//++++ } /** * @param newvb 是否强制更新vb,不再使用老的。 */ uploadTo(target, newvb: boolean) { var gl:WebGLRenderingContext; //计算总大小 this.m_nTotalSize=0; for(var i=0; i0 && (newvb || this.m_nTotalSize>this.m_nVBLength)){ gl.deleteBuffer(this.vbo);//TODO 用重用的方法更好 this.vbo=0; } if(this.vbo<=0){ this.vbo = gl.createBuffer(); gl.bindBuffer(target,this.vbo); gl.bufferData(target,this.m_nTotalSize,gl.DYNAMIC_DRAW); //分配空间 } gl.bindBuffer(target,this.vbo); for( var i=0; i