UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 6.47 kB
import{extends as e}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{EventHandler as t}from"../../core/event-handler.js";import{platform as i}from"../../core/platform.js";import{Vec2 as s}from"../../core/math/vec2.js";import{Color as r}from"../../core/math/color.js";import{CLEARFLAG_COLOR as n,CLEARFLAG_DEPTH as a,PRIMITIVE_TRIFAN as o,SEMANTIC_POSITION as h,TYPE_FLOAT32 as l,CULLFACE_BACK as d,PIXELFORMAT_RGBA32F as f,PIXELFORMAT_RGBA16F as u,PIXELFORMAT_111110F as c,PRIMITIVE_POINTS as m}from"./constants.js";import{BlendState as p}from"./blend-state.js";import{DepthState as x}from"./depth-state.js";import{ScopeSpace as v}from"./scope-space.js";import{VertexBuffer as g}from"./vertex-buffer.js";import{VertexFormat as b}from"./vertex-format.js";import{StencilParameters as w}from"./stencil-parameters.js";class B extends t{constructor(t,r){var h,l,d,f;super(),this.canvas=void 0,this.backBuffer=null,this.backBufferSize=new s,this.backBufferFormat=void 0,this.backBufferAntialias=!1,this.isWebGPU=!1,this.isWebGL1=!1,this.isWebGL2=!1,this.scope=void 0,this.boneLimit=void 0,this.maxAnisotropy=void 0,this.maxCubeMapSize=void 0,this.maxTextureSize=void 0,this.maxVolumeSize=void 0,this.maxColorAttachments=1,this.precision=void 0,this.samples=void 0,this.supportsStencil=void 0,this.supportsMrt=!1,this.supportsVolumeTextures=!1,this.supportsCompute=!1,this.supportsStorageTextureRead=!1,this.renderTarget=null,this.shaders=[],this.textures=[],this.targets=new Set,this.renderVersion=0,this.renderPassIndex=void 0,this.insideRenderPass=!1,this.supportsInstancing=void 0,this.supportsUniformBuffers=!1,this.textureFloatRenderable=void 0,this.textureHalfFloatRenderable=void 0,this.textureFloatFilterable=!1,this.textureHalfFloatFilterable=!1,this.quadVertexBuffer=void 0,this.blendState=new p,this.depthState=new x,this.stencilEnabled=!1,this.stencilFront=new w,this.stencilBack=new w,this.dynamicBuffers=void 0,this.gpuProfiler=void 0,this.defaultClearOptions={color:[0,0,0,1],depth:1,stencil:0,flags:n|a},this.clientRect={width:0,height:0},this.canvas=t,this.initOptions=e({},r),null!=(h=this.initOptions).depth||(h.depth=!0),null!=(l=this.initOptions).stencil||(l.stencil=!0),null!=(d=this.initOptions).antialias||(d.antialias=!0),null!=(f=this.initOptions).powerPreference||(f.powerPreference="high-performance"),this._maxPixelRatio=i.browser?Math.min(1,window.devicePixelRatio):1,this.buffers=[],this._vram={tex:0,vb:0,ib:0,ub:0,sb:0},this._shaderStats={vsCompiled:0,fsCompiled:0,linked:0,materialShaders:0,compileTime:0},this.initializeContextCaches(),this._drawCallsPerFrame=0,this._shaderSwitchesPerFrame=0,this._primsPerFrame=[];for(let e=m;e<=o;e++)this._primsPerFrame[e]=0;this._renderTargetCreationTime=0,this.scope=new v("Device"),this.textureBias=this.scope.resolve("textureBias"),this.textureBias.setValue(0)}postInit(){const e=new b(this,[{semantic:h,components:2,type:l}]),t=new Float32Array([-1,-1,1,-1,-1,1,1,1]);this.quadVertexBuffer=new g(this,e,4,{data:t})}destroy(){var e,t,i;this.fire("destroy"),null==(e=this.quadVertexBuffer)||e.destroy(),this.quadVertexBuffer=null,null==(t=this.dynamicBuffers)||t.destroy(),this.dynamicBuffers=null,null==(i=this.gpuProfiler)||i.destroy(),this.gpuProfiler=null}onDestroyShader(e){this.fire("destroy:shader",e);const t=this.shaders.indexOf(e);-1!==t&&this.shaders.splice(t,1)}postDestroy(){this.scope=null,this.canvas=null}loseContext(){var e;this.contextLost=!0,this.backBufferSize.set(-1,-1);for(const e of this.textures)e.loseContext();for(const e of this.buffers)e.loseContext();for(const e of this.targets)e.loseContext();null==(e=this.gpuProfiler)||e.loseContext()}restoreContext(){var e;this.contextLost=!1,this.initializeRenderState(),this.initializeContextCaches();for(const e of this.buffers)e.unlock();null==(e=this.gpuProfiler)||null==e.restoreContext||e.restoreContext()}toJSON(e){}initializeContextCaches(){this.indexBuffer=null,this.vertexBuffers=[],this.shader=null,this.shaderValid=void 0,this.shaderAsyncCompile=!1,this.renderTarget=null}initializeRenderState(){this.blendState=new p,this.depthState=new x,this.cullMode=d,this.vx=this.vy=this.vw=this.vh=0,this.sx=this.sy=this.sw=this.sh=0,this.blendColor=new r(0,0,0,0)}setStencilState(e,t){}setBlendState(e){}setBlendColor(e,t,i,s){}setDepthState(e){}setCullMode(e){}setRenderTarget(e){this.renderTarget=e}setIndexBuffer(e){this.indexBuffer=e}setVertexBuffer(e){e&&this.vertexBuffers.push(e)}clearVertexBuffer(){this.vertexBuffers.length=0}getRenderTarget(){return this.renderTarget}initRenderTarget(e){e.initialized||(e.init(),this.targets.add(e))}_isBrowserInterface(e){return this._isImageBrowserInterface(e)||this._isImageCanvasInterface(e)||this._isImageVideoInterface(e)}_isImageBrowserInterface(e){return"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement}_isImageCanvasInterface(e){return"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement}_isImageVideoInterface(e){return"undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement}resizeCanvas(e,t){const s=Math.min(this._maxPixelRatio,i.browser?window.devicePixelRatio:1),r=Math.floor(e*s),n=Math.floor(t*s);r===this.canvas.width&&n===this.canvas.height||this.setResolution(r,n)}setResolution(e,t){this.canvas.width=e,this.canvas.height=t,this.fire(B.EVENT_RESIZE,e,t)}updateClientRect(){if(i.worker)this.clientRect.width=this.canvas.width,this.clientRect.height=this.canvas.height;else{const e=this.canvas.getBoundingClientRect();this.clientRect.width=e.width,this.clientRect.height=e.height}}get width(){return this.canvas.width}get height(){return this.canvas.height}set fullscreen(e){}get fullscreen(){return!1}set maxPixelRatio(e){this._maxPixelRatio=e}get maxPixelRatio(){return this._maxPixelRatio}get deviceType(){return this._deviceType}getBoneLimit(){return this.boneLimit}setBoneLimit(e){this.boneLimit=e}startRenderPass(e){}endRenderPass(e){}startComputePass(){}endComputePass(){}frameStart(){this.renderPassIndex=0,this.renderVersion++}frameEnd(){}computeDispatch(e){}getRenderableHdrFormat(e=[c,u,f],t=!0){for(let i=0;i<e.length;i++){const s=e[i];switch(s){case c:if(this.textureRG11B10Renderable)return s;break;case u:if(this.textureHalfFloatRenderable&&(!t||this.textureHalfFloatFilterable))return s;break;case f:if(this.textureFloatRenderable&&(!t||this.textureFloatFilterable))return s}}}}B.EVENT_RESIZE="resizecanvas";export{B as GraphicsDevice};