Files
LayaNative2.0/Conch/source/domsupport/test.ts
T
2020-11-11 16:17:13 +08:00

271 lines
5.8 KiB
TypeScript

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; i<this.m_pMemBuffer.length; i++){
this.m_nTotalSize+= this.m_pMemBuffer[i].getDataSize();
}
if( this.vbo>0 && (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<this.m_nStreamNum; i++){
gl.bufferSubData(target,this.m_vStreamStart[i],this.m_pMemBuffer[i].getData());
this.m_pMemBuffer[i].setChangedFlag(false);
}
this.m_nVBLength=this.m_nTotalSize;
}
getStreamMem(idx) {
}
freeGLRes() {
}
}
class JCVB extends JCGpuBuffer {
upload(force) {
}
}
class JCIB extends JCGpuBuffer {
createFromArray(arr) {
}
upload(force) {
}
appendData(p_pIdx, p_nNum, p_nVertOff){
}
}
class JCNamedData {
}
class JCVertexDesc {
m_VertDescs:any[];
getStride(): number {
return 0;
}
getHash() {
}
}
class JCShaderLinkInfo{
//这里包含stride
}
class JCMaterial {
}
/**
* 类似submesh
*/
class JCRenderGroupData {
m_pMesh: JCMesh;
m_nGeoMode: number;
m_nBegin: number = 0; //可能是顶点位置也可能是index位置
m_nEnd: number = 0;
m_bHasObjMat = false;
m_pShaderInfo: any = null;
m_pMaterial: JCMaterial = null;
m_nVertexDesc = 0; //第几个顶点描述
}
class JCMesh {
//m_nVertNum;
/**
* 本mesh用到的所有的顶点格式
*/
m_AllVertexDesc: JCVertexDesc[];
getVB(): JCVB {
return null;
}
getIB(): JCIB {
return null;
}
//缺省大小不用设置
//config(INITSize);
// getStride(id): number {
// return this.m_AllVertexDesc[id].getStride();
// }
regVertexDesc(vd:JCVertexDesc):number{
var h =vd.getHash();
//if( )
return this.m_AllVertexDesc.length;
}
freeGLRes() {
}
//删除内存数据,例如不会变的mesh
freeMemRes() {
}
upload() {
}
getGroupNum():number{
return 0;
}
}
/**
* 单流mesh
* TODO 是否需要一个只保留gpu资源的mesh
*/
class JCMesh1 extends JCMesh{
m_pCurGroup:JCRenderGroupData=null;
m_vRenderGroupDatas:JCRenderGroupData[]=null;
//直接创建vertex
pushVertex(vertType:number, geomode, mtl, {}):JCRenderGroupData {
return null;
}
/**
* 这种情况geomode固定为三角形
* @param relIdx 是否是相对的索引,如果是true,需要全部加上当前的顶点个数
*/
pushElement(vertType:number, mtl, {}, {}, relIdx:boolean) {
}
pushVertexBuf(vertType:number, geomode, mtl, data, len) {
var vetNum = 0;//datalen/stride
}
pushElementsBuf(vertType:number, mtl,vbdata, vblen, ibdata, iblen, relIdx:boolean):JCRenderGroupData {
if(vertType!=this.m_pCurGroup.m_nVertexDesc ||true){
//new group
}
return this.m_pCurGroup;
}
}
function renderMesh(mesh: JCMesh, group: JCRenderGroupData, data, datanum) {
var stride = group.getStride();
}
function fillTris(ib, vb, vertexdesc, shader, texture) {
}
class JCHtml5Context {
m_pDynamicMesh:JCGameMesh=null;
setIBVB(p_nIbId, p_nVbId, p_nShaderId, p_nImgId,
p_nStartIndex, p_nOffset, p_nNumElement, x, y, vertextype) {
var vbbuf;
var ibbuf;
var gpuProg;
var Img;
switch (vertextype) {
case 1://x,y,u,v,r,g,b,a
case 2://x,y,u,v
}
var vdesc: JCVertexDesc = null; //在ctx的成员变量中写死
var mtl:JCMaterial;
if(!vbbuf.vdid){//or <0
vbbuf.viid=this.m_pDynamicMesh.regVertexDesc(vdesc);
}
this.m_pDynamicMesh.pushElementsBuf(vbbuf.viid,mtl,vbbuf,1,ibbuf,1,true);
}
pushTriangleStripsData(pData, len,mtl){
}
}
//动态添加
//材质
//矩阵
//link需要全局的数据的描述
//link结果保存在什么地方
class JCGameMesh extends JCMesh1 {
strokeLink: JCShaderLinkInfo;
fillLink: JCShaderLinkInfo;
mapLink: JCShaderLinkInfo;
fillcolorLink: JCShaderLinkInfo;
drawImgLink: JCShaderLinkInfo;
render() {
}
}
//JCVertexDesc 和stride其实并没有什么关联 mesh属性描述中增加 m_nStride
//JCVertexDesc 与attrib有关
class JCRenderCmd{
}
function testWS(){
var ws = new WebSocket('ws://174.129.224.73/');
ws.onopen=function(ev){
console.log('open');
ws.send('hello');
}
ws.onmessage=function(msg){
console.log(msg);
}
}