@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 3.47 kB
JavaScript
import{SEMANTIC_POSITION as t,TYPE_FLOAT32 as e,SEMANTIC_TEXCOORD0 as r,BUFFER_STREAM as s,INDEXFORMAT_UINT16 as i,BUFFER_STATIC as a,PRIMITIVE_TRIANGLES as n,CULLFACE_NONE as h,BLENDEQUATION_ADD as o,BLENDMODE_SRC_ALPHA as m,BLENDMODE_ONE_MINUS_SRC_ALPHA as c,BLENDMODE_ONE as p}from"../../platform/graphics/constants.js";import{DepthState as l}from"../../platform/graphics/depth-state.js";import{BlendState as f}from"../../platform/graphics/blend-state.js";import{GraphNode as d}from"../../scene/graph-node.js";import{MeshInstance as u}from"../../scene/mesh-instance.js";import{Material as v}from"../../scene/materials/material.js";import{Mesh as g}from"../../scene/mesh.js";import{IndexBuffer as w}from"../../platform/graphics/index-buffer.js";import{VertexBuffer as x}from"../../platform/graphics/vertex-buffer.js";import{VertexFormat as b}from"../../platform/graphics/vertex-format.js";import{shaderChunks as y}from"../../scene/shader-lib/chunks/chunks.js";class S{constructor(S,j=512){const F=new b(S,[{semantic:t,components:3,type:e},{semantic:r,components:4,type:e}]),T=new Uint16Array(6*j);for(let t=0;t<j;++t)T[6*t+0]=4*t,T[6*t+1]=4*t+1,T[6*t+2]=4*t+2,T[6*t+3]=4*t,T[6*t+4]=4*t+2,T[6*t+5]=4*t+3;const _=y.createShaderFromCode(S,"\nattribute vec3 vertex_position;\nattribute vec4 vertex_texCoord0;\nvarying vec4 uv0;\nvarying float wordFlag;\nvoid main(void) {\n\tgl_Position = vec4(vertex_position.xy * 2.0 - 1.0, 0.5, 1.0);\n\tuv0 = vertex_texCoord0;\n\twordFlag = vertex_position.z;\n}","\nvarying vec4 uv0;\nvarying float wordFlag;\nuniform vec4 clr;\nuniform sampler2D graphTex;\nuniform sampler2D wordsTex;\nvoid main (void) {\n\tvec4 graphSample = texture2D(graphTex, uv0.xy);\n\tvec4 graph;\n\tif (uv0.w < graphSample.r)\n\t\tgraph = vec4(0.7, 0.2, 0.2, 1.0);\n\telse if (uv0.w < graphSample.g)\n\t\tgraph = vec4(0.2, 0.7, 0.2, 1.0);\n\telse if (uv0.w < graphSample.b)\n\t\tgraph = vec4(0.2, 0.2, 0.7, 1.0);\n\telse\n\t\tgraph = vec4(0.0, 0.0, 0.0, 1.0 - 0.25 * sin(uv0.w * 3.14159));\n\tvec4 words = texture2D(wordsTex, vec2(uv0.x, 1.0 - uv0.y));\n\tgl_FragColor = mix(graph, words, wordFlag) * clr;\n}","mini-stats");this.device=S,this.buffer=new x(S,F,4*j,{usage:s}),this.data=new Float32Array(this.buffer.numBytes/4),this.indexBuffer=new w(S,i,6*j,a,T),this.prim={type:n,indexed:!0,base:0,count:0},this.quads=0,this.mesh=new g(S),this.mesh.vertexBuffer=this.buffer,this.mesh.indexBuffer[0]=this.indexBuffer,this.mesh.primitive=[this.prim];const z=new v;this.material=z,z.cull=h,z.shader=_,z.depthState=l.NODEPTH,z.blendState=new f(!0,o,m,c,o,p,p),z.update(),this.meshInstance=new u(this.mesh,z,new d("MiniStatsMesh")),this.uniforms={clr:new Float32Array(4)},this.targetSize={width:S.width,height:S.height}}quad(t,e,r,s,i,a,n,h,o,m=0){const c=this.targetSize.width,p=this.targetSize.height,l=t/c,f=e/p,d=(t+r)/c,u=(e+s)/p,v=o.width,g=o.height,w=i/v,x=a/g,b=(i+(null!=n?n:r))/v,y=(a+(null!=h?h:s))/g;this.data.set([l,f,m,w,x,0,0,d,f,m,b,x,1,0,d,u,m,b,y,1,1,l,u,m,w,y,0,1],28*this.quads),this.quads++,this.prim.count+=6}startFrame(){this.quads=0,this.prim.count=0,this.targetSize.width=this.device.canvas.scrollWidth,this.targetSize.height=this.device.canvas.scrollHeight}render(t,e,r,s,i,a){this.buffer.setData(this.data.buffer),this.uniforms.clr.set(i,0),this.material.setParameter("clr",this.uniforms.clr),this.material.setParameter("graphTex",r),this.material.setParameter("wordsTex",s),t.drawMeshInstance(this.meshInstance,e)}}export{S as Render2d};