vi.js
Version:
12 lines (10 loc) • 10.5 kB
JavaScript
const ue=function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const o of n)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function r(n){const o={};return n.integrity&&(o.integrity=n.integrity),n.referrerpolicy&&(o.referrerPolicy=n.referrerpolicy),n.crossorigin==="use-credentials"?o.credentials="include":n.crossorigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(n){if(n.ep)return;n.ep=!0;const o=r(n);fetch(n.href,o)}};ue();async function le(){if(!navigator.gpu)throw new Error("WebGPU not supported");const e=await navigator.gpu.requestAdapter();if(!e)throw new Error("WebGPU not supported");const t=await(e==null?void 0:e.requestDevice()),r=document.querySelector("canvas");if(!r)throw new Error("No canvas found");const s=r.getContext("webgpu");if(!s)throw new Error("WebGPU not supported");const n=s.getPreferredFormat(e),o=[r.clientHeight*window.devicePixelRatio,r.height*window.devicePixelRatio];return s.configure({device:t,format:n,size:o,compositingAlphaMode:"opaque"}),{adapter:e,device:t,context:s,format:n}}var he=`
fn main( position: vec3<f32>) -> vec4<f32> {
return vec4<f32>(position, 1.0);
}
`,de=` var<uniform> color : vec4<f32>;
fn main() -> vec4<f32> {
return color;
}
`;function pe(e,t){const r=Object.create(null),s=e.split(",");for(let n=0;n<s.length;n++)r[s[n]]=!0;return t?n=>!!r[n.toLowerCase()]:n=>!!r[n]}const ge=Object.assign,we=Object.prototype.hasOwnProperty,R=(e,t)=>we.call(e,t),p=Array.isArray,I=e=>J(e)==="[object Map]",_e=e=>typeof e=="string",z=e=>typeof e=="symbol",y=e=>e!==null&&typeof e=="object",be=Object.prototype.toString,J=e=>be.call(e),me=e=>J(e).slice(8,-1),C=e=>_e(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Q=(e,t)=>!Object.is(e,t);let Ee;function Z(e,t=Ee){t&&t.active&&t.effects.push(e)}const k=e=>{const t=new Set(e);return t.w=0,t.n=0,t},ee=e=>(e.w&g)>0,te=e=>(e.n&g)>0,Se=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=g},ve=e=>{const{deps:t}=e;if(t.length){let r=0;for(let s=0;s<t.length;s++){const n=t[s];ee(n)&&!te(n)?n.delete(e):t[r++]=n,n.w&=~g,n.n&=~g}t.length=r}},K=new WeakMap;let E=0,g=1;const j=30;let h;const b=Symbol(""),U=Symbol("");class Pe{constructor(t,r=null,s){this.fn=t,this.scheduler=r,this.active=!0,this.deps=[],this.parent=void 0,Z(this,s)}run(){if(!this.active)return this.fn();let t=h,r=m;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=h,h=this,m=!0,g=1<<++E,E<=j?Se(this):V(this),this.fn()}finally{E<=j&&ve(this),g=1<<--E,h=this.parent,m=r,this.parent=void 0,this.deferStop&&this.stop()}}stop(){h===this?this.deferStop=!0:this.active&&(V(this),this.onStop&&this.onStop(),this.active=!1)}}function V(e){const{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}function Me(e,t){e.effect&&(e=e.effect.fn);const r=new Pe(e);t&&(ge(r,t),t.scope&&Z(r,t.scope)),(!t||!t.lazy)&&r.run();const s=r.run.bind(r);return s.effect=r,s}let m=!0;const ne=[];function Oe(){ne.push(m),m=!1}function xe(){const e=ne.pop();m=e===void 0?!0:e}function l(e,t,r){if(m&&h){let s=K.get(e);s||K.set(e,s=new Map);let n=s.get(r);n||s.set(r,n=k()),Te(n)}}function Te(e,t){let r=!1;E<=j?te(e)||(e.n|=g,r=!ee(e)):r=!e.has(h),r&&(e.add(h),h.deps.push(e))}function w(e,t,r,s,n,o){const i=K.get(e);if(!i)return;let c=[];if(t==="clear")c=[...i.values()];else if(r==="length"&&p(e))i.forEach((f,u)=>{(u==="length"||u>=s)&&c.push(f)});else switch(r!==void 0&&c.push(i.get(r)),t){case"add":p(e)?C(r)&&c.push(i.get("length")):(c.push(i.get(b)),I(e)&&c.push(i.get(U)));break;case"delete":p(e)||(c.push(i.get(b)),I(e)&&c.push(i.get(U)));break;case"set":I(e)&&c.push(i.get(b));break}if(c.length===1)c[0]&&F(c[0]);else{const f=[];for(const u of c)u&&f.push(...u);F(k(f))}}function F(e,t){for(const r of p(e)?e:[...e])(r!==h||r.allowRecurse)&&(r.scheduler?r.scheduler():r.run())}const Ie=pe("__proto__,__v_isRef,__isVue"),re=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(z)),Re=se(),ye=se(!0),D=Be();function Be(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){const s=a(this);for(let o=0,i=this.length;o<i;o++)l(s,"get",o+"");const n=s[t](...r);return n===-1||n===!1?s[t](...r.map(a)):n}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...r){Oe();const s=a(this)[t].apply(this,r);return xe(),s}}),e}function se(e=!1,t=!1){return function(s,n,o){if(n==="__v_isReactive")return!e;if(n==="__v_isReadonly")return e;if(n==="__v_isShallow")return t;if(n==="__v_raw"&&o===(e?t?Ye:ce:t?He:ie).get(s))return s;const i=p(s);if(!e&&i&&R(D,n))return Reflect.get(D,n,o);const c=Reflect.get(s,n,o);return(z(n)?re.has(n):Ie(n))||(e||l(s,"get",n),t)?c:S(c)?!i||!C(n)?c.value:c:y(c)?e?ae(c):N(c):c}}const Ae=Ke();function Ke(e=!1){return function(r,s,n,o){let i=r[s];if(G(i)&&S(i)&&!S(n))return!1;if(!e&&!G(n)&&(Je(n)||(n=a(n),i=a(i)),!p(r)&&S(i)&&!S(n)))return i.value=n,!0;const c=p(r)&&C(s)?Number(s)<r.length:R(r,s),f=Reflect.set(r,s,n,o);return r===a(o)&&(c?Q(n,i)&&w(r,"set",s,n):w(r,"add",s,n)),f}}function je(e,t){const r=R(e,t);e[t];const s=Reflect.deleteProperty(e,t);return s&&r&&w(e,"delete",t,void 0),s}function Ue(e,t){const r=Reflect.has(e,t);return(!z(t)||!re.has(t))&&l(e,"has",t),r}function Ge(e){return l(e,"iterate",p(e)?"length":b),Reflect.ownKeys(e)}const ze={get:Re,set:Ae,deleteProperty:je,has:Ue,ownKeys:Ge},Ce={get:ye,set(e,t){return!0},deleteProperty(e,t){return!0}},L=e=>e,B=e=>Reflect.getPrototypeOf(e);function P(e,t,r=!1,s=!1){e=e.__v_raw;const n=a(e),o=a(t);t!==o&&!r&&l(n,"get",t),!r&&l(n,"get",o);const{has:i}=B(n),c=s?L:r?q:W;if(i.call(n,t))return c(e.get(t));if(i.call(n,o))return c(e.get(o));e!==n&&e.get(t)}function M(e,t=!1){const r=this.__v_raw,s=a(r),n=a(e);return e!==n&&!t&&l(s,"has",e),!t&&l(s,"has",n),e===n?r.has(e):r.has(e)||r.has(n)}function O(e,t=!1){return e=e.__v_raw,!t&&l(a(e),"iterate",b),Reflect.get(e,"size",e)}function H(e){e=a(e);const t=a(this);return B(t).has.call(t,e)||(t.add(e),w(t,"add",e,e)),this}function Y(e,t){t=a(t);const r=a(this),{has:s,get:n}=B(r);let o=s.call(r,e);o||(e=a(e),o=s.call(r,e));const i=n.call(r,e);return r.set(e,t),o?Q(t,i)&&w(r,"set",e,t):w(r,"add",e,t),this}function $(e){const t=a(this),{has:r,get:s}=B(t);let n=r.call(t,e);n||(e=a(e),n=r.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return n&&w(t,"delete",e,void 0),o}function X(){const e=a(this),t=e.size!==0,r=e.clear();return t&&w(e,"clear",void 0,void 0),r}function x(e,t){return function(s,n){const o=this,i=o.__v_raw,c=a(i),f=t?L:e?q:W;return!e&&l(c,"iterate",b),i.forEach((u,_)=>s.call(n,f(u),f(_),o))}}function T(e,t,r){return function(...s){const n=this.__v_raw,o=a(n),i=I(o),c=e==="entries"||e===Symbol.iterator&&i,f=e==="keys"&&i,u=n[e](...s),_=r?L:t?q:W;return!t&&l(o,"iterate",f?U:b),{next(){const{value:v,done:A}=u.next();return A?{value:v,done:A}:{value:c?[_(v[0]),_(v[1])]:_(v),done:A}},[Symbol.iterator](){return this}}}}function d(e){return function(...t){return e==="delete"?!1:this}}function Le(){const e={get(o){return P(this,o)},get size(){return O(this)},has:M,add:H,set:Y,delete:$,clear:X,forEach:x(!1,!1)},t={get(o){return P(this,o,!1,!0)},get size(){return O(this)},has:M,add:H,set:Y,delete:$,clear:X,forEach:x(!1,!0)},r={get(o){return P(this,o,!0)},get size(){return O(this,!0)},has(o){return M.call(this,o,!0)},add:d("add"),set:d("set"),delete:d("delete"),clear:d("clear"),forEach:x(!0,!1)},s={get(o){return P(this,o,!0,!0)},get size(){return O(this,!0)},has(o){return M.call(this,o,!0)},add:d("add"),set:d("set"),delete:d("delete"),clear:d("clear"),forEach:x(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=T(o,!1,!1),r[o]=T(o,!0,!1),t[o]=T(o,!1,!0),s[o]=T(o,!0,!0)}),[e,r,t,s]}const[Ne,We,qe,Ve]=Le();function oe(e,t){const r=t?e?Ve:qe:e?We:Ne;return(s,n,o)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?s:Reflect.get(R(r,n)&&n in s?r:s,n,o)}const Fe={get:oe(!1,!1)},De={get:oe(!0,!1)},ie=new WeakMap,He=new WeakMap,ce=new WeakMap,Ye=new WeakMap;function $e(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Xe(e){return e.__v_skip||!Object.isExtensible(e)?0:$e(me(e))}function N(e){return G(e)?e:fe(e,!1,ze,Fe,ie)}function ae(e){return fe(e,!0,Ce,De,ce)}function fe(e,t,r,s,n){if(!y(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=n.get(e);if(o)return o;const i=Xe(e);if(i===0)return e;const c=new Proxy(e,i===2?s:r);return n.set(e,c),c}function G(e){return!!(e&&e.__v_isReadonly)}function Je(e){return!!(e&&e.__v_isShallow)}function a(e){const t=e&&e.__v_raw;return t?a(t):e}const W=e=>y(e)?N(e):e,q=e=>y(e)?ae(e):e;function S(e){return!!(e&&e.__v_isRef===!0)}async function Qe(e,t){const r=new Float32Array([0,.5,0,-.5,-.5,0,.5,-.5,0]),s=e.createBuffer({size:r.byteLength,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST});e.queue.writeBuffer(s,0,r);const n=new Float32Array([1,0,0,1]),o=e.createBuffer({size:n.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});e.queue.writeBuffer(o,0,n);const i={vertex:{module:e.createShaderModule({code:he}),entryPoint:"main",buffers:[{arrayStride:3*4,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]}]},fragment:{module:e.createShaderModule({code:de}),entryPoint:"main",targets:[{format:t}]}},c={vertex:r,vertexBuffer:s,vertexCount:3},f=await e.createRenderPipelineAsync(i),u=e.createBindGroup({layout:f.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:o}}]}),_=N({color:n,colorBuffer:o,group:u});return{pipeline:f,vertexObj:c,colorObj:_}}function Ze(e,t,r,s,n){const o=e.createCommandEncoder(),i=o.beginRenderPass({colorAttachments:[{view:r.getCurrentTexture().createView(),loadOp:"clear",storeOp:"store",clearValue:{r:1,g:1,b:1,a:1}}]});i.setPipeline(t),i.setVertexBuffer(0,s.vertexBuffer),i.setBindGroup(0,n.group),i.draw(s.vertexCount),i.end();const c=o.finish();e.queue.submit([c])}async function ke(){const{device:e,format:t,context:r}=await le(),{pipeline:s,vertexObj:n,colorObj:o}=await Qe(e,t);Me(()=>{e.queue.writeBuffer(o.colorBuffer,0,o.color),Ze(e,s,r,n,o)}),setTimeout(()=>{o.color=new Float32Array([0,1,0,1])},1e3)}ke();