UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 2.83 kB
import{BindGroupFormat as t,BindUniformBufferFormat as e}from"../bind-group-format.js";import{UniformBufferFormat as r,UniformFormat as n}from"../uniform-buffer-format.js";import{BlendState as o}from"../blend-state.js";import{SHADERLANGUAGE_WGSL as s,UNIFORMTYPE_VEC4 as i,UNIFORMTYPE_FLOAT as u,UNIFORM_BUFFER_DEFAULT_SLOT_NAME as a,SHADERSTAGE_VERTEX as d,SHADERSTAGE_FRAGMENT as f,CLEARFLAG_COLOR as l,CLEARFLAG_DEPTH as h,CLEARFLAG_STENCIL as p,CULLFACE_NONE as c,BINDGROUP_MESH as m,PRIMITIVE_TRISTRIP as v}from"../constants.js";import{Shader as b}from"../shader.js";import{BindGroup as x}from"../bind-group.js";import{UniformBuffer as g}from"../uniform-buffer.js";import{DepthState as w}from"../depth-state.js";const B={type:v,base:0,count:4,indexed:!1};class I{constructor(o){const l="\n\n\t\t\t\t\t\tstruct ub_mesh {\n\t\t\t\t\t\t\t\tcolor : vec4f,\n\t\t\t\t\t\t\t\tdepth: f32\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@group(0) @binding(0) var<uniform> ubMesh : ub_mesh;\n\n\t\t\t\t\t\tvar<private> pos : array<vec2f, 4> = array<vec2f, 4>(\n\t\t\t\t\t\t\t\tvec2(-1.0, 1.0), vec2(1.0, 1.0),\n\t\t\t\t\t\t\t\tvec2(-1.0, -1.0), vec2(1.0, -1.0)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tstruct VertexOutput {\n\t\t\t\t\t\t\t\t@builtin(position) position : vec4f\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@vertex\n\t\t\t\t\t\tfn vertexMain(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n\t\t\t\t\t\t\t\tvar output : VertexOutput;\n\t\t\t\t\t\t\t\toutput.position = vec4(pos[vertexIndex], ubMesh.depth, 1.0);\n\t\t\t\t\t\t\t\treturn output;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t@fragment\n\t\t\t\t\t\tfn fragmentMain() -> @location(0) vec4f {\n\t\t\t\t\t\t\t\treturn ubMesh.color;\n\t\t\t\t\t\t}\n\t\t\t\t";this.shader=new b(o,{name:"WebGPUClearRendererShader",shaderLanguage:s,vshader:l,fshader:l}),this.uniformBuffer=new g(o,new r(o,[new n("color",i),new n("depth",u)]),!1);const h=new t(o,[new e(a,d|f)]);this.bindGroup=new x(o,h,this.uniformBuffer),this.colorData=new Float32Array(4),this.colorId=o.scope.resolve("color"),this.depthId=o.scope.resolve("depth")}destroy(){this.shader.destroy(),this.shader=null,this.uniformBuffer.destroy(),this.uniformBuffer=null,this.bindGroup.destroy(),this.bindGroup=null}clear(t,e,r,n){var s;const i=null!=(s=(r=r||n).flags)?s:n.flags;if(0!==i){if(i&l&&(e.colorBuffer||e.impl.assignedColorTexture)){var u;const e=null!=(u=r.color)?u:n.color;this.colorData.set(e),t.setBlendState(o.NOBLEND)}else t.setBlendState(o.NOWRITE);if(this.colorId.setValue(this.colorData),i&h&&e.depth){var a;const e=null!=(a=r.depth)?a:n.depth;this.depthId.setValue(e),t.setDepthState(w.WRITEDEPTH)}else this.depthId.setValue(1),t.setDepthState(w.NODEPTH);i&p&&e.stencil,t.setCullMode(c),t.setShader(this.shader);const s=this.bindGroup;s.defaultUniformBuffer.update(),s.update(),t.setBindGroup(m,s),t.draw(B)}}}export{I as WebgpuClearRenderer};