当前位置: 首页 > news >正文

鄞州做网站h5网页制作app

鄞州做网站,h5网页制作app,做影视网站如何加速,网站建设整改报告当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离…当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离。 5. 用户操作和渲染系统调度并行机制。 6. 数据/语义驱动。 7. 异步并行的场景/模型载入。 8. computing与rendering用法机制一致性。 1). 构造过程一致性。 2). 启用过程一致性。 3). 自动兼容到material多pass以及material graph机制中。 当前示例运行效果: WGSL顶点与片段shader: struct VertexInput {location(0) pos: vec3f,location(1) uv : vec2f,builtin(instance_index) instance: u32 };struct VertexOutput {builtin(position) pos: vec4f,location(0) cell: vec2f,location(1) uv: vec2f,location(2) instance: f32, }; group(0) binding(0) varuniform grid: vec2f; group(0) binding(1) varstorage cellState: arrayu32; group(0) binding(2) varstorage lifeState: arrayf32; vertex fn vertMain(input: VertexInput) - VertexOutput {let i f32(input.instance);let cell vec2f(i % grid.x, floor(i / grid.x));let cellOffset cell / grid * 2.0;var state f32(cellState[input.instance]);let gridPos (input.pos.xy * state 1.0) / grid - 1.0 cellOffset;var output: VertexOutput;output.pos vec4f(gridPos, 0.0, 1.0);output.cell cell;output.uv input.uv;output.instance i;return output; }fragment fn fragMain(input: VertexOutput) - location(0) vec4f {let c input.cell / grid;var dis length(input.uv - vec2f32(0.5, 0.5));dis min(dis/0.15, 1.0);let i u32(input.instance);var f clamp((lifeState[i])/100.0, 0.0005, 1.0);dis (1.0 - pow(dis, 100.0)) * (1.0 - f) f;var c3 vec3f(c, (1.0 - c.x) * (1.0 - f) f) * dis;return vec4f(c3, 1.0); } 此示例基于此渲染系统实现当前示例TypeScript源码如下 const gridSize 64; const shdWorkGroupSize 8;const compShdCode group(0) binding(0) varuniform grid: vec2f;group(0) binding(1) varstorage cellStateIn: arrayu32; group(0) binding(2) varstorage, read_write cellStateOut: arrayu32; group(0) binding(3) varstorage, read_write lifeState: arrayf32;fn cellIndex(cell: vec2u) - u32 {return (cell.y % u32(grid.y)) * u32(grid.x) (cell.x % u32(grid.x)); }fn cellActive(x: u32, y: u32) - u32 {return cellStateIn[cellIndex(vec2(x, y))]; }compute workgroup_size(${shdWorkGroupSize}, ${shdWorkGroupSize}) fn compMain(builtin(global_invocation_id) cell: vec3u) {// Determine how many active neighbors this cell has.let activeNeighbors cellActive(cell.x1, cell.y1) cellActive(cell.x1, cell.y) cellActive(cell.x1, cell.y-1) cellActive(cell.x, cell.y-1) cellActive(cell.x-1, cell.y-1) cellActive(cell.x-1, cell.y) cellActive(cell.x-1, cell.y1) cellActive(cell.x, cell.y1);let i cellIndex(cell.xy);// Conways game of life rules:switch activeNeighbors {case 2: { // Active cells with 2 neighbors stay active.cellStateOut[i] cellStateIn[i];if(cellStateOut[i] 0) {lifeState[i] 0.5;} else {lifeState[i] - 0.5;}}case 3: { // Cells with 3 neighbors become or stay active.cellStateOut[i] 1;lifeState[i] 0.5;}default: { // Cells with 2 or 3 neighbors become inactive.cellStateOut[i] 0;lifeState[i] 0.01;}}if(lifeState[i] 0.01) { lifeState[i] 0.01; } }; export class GameOfLifePretty {private mRscene new RendererScene();initialize(): void {console.log(GameOfLifePretty::initialize() ...);const rc this.mRscene;rc.initialize();this.initScene();}private createUniformValues(): { ufvs0: WGRUniformValue[]; ufvs1: WGRUniformValue[] }[] {const gridsSizesArray new Float32Array([gridSize, gridSize]);const cellStateArray0 new Uint32Array(gridSize * gridSize);for (let i 0; i cellStateArray0.length; i) {cellStateArray0[i] Math.random() 0.8 ? 1 : 0;}const cellStateArray1 new Uint32Array(gridSize * gridSize);for (let i 0; i cellStateArray1.length; i) {cellStateArray1[i] i % 2;}const lifeStateArray3 new Float32Array(gridSize * gridSize);for (let i 0; i lifeStateArray3.length; i) {lifeStateArray3[i] 0.01;}let shared true;let sharedData0 { data: cellStateArray0 };let sharedData1 { data: cellStateArray1 };let sharedData3 { data: lifeStateArray3 };const v0 new WGRUniformValue({ data: gridsSizesArray, stride: 2, shared });v0.toVisibleAll();// build rendering uniformsconst va1 new WGRStorageValue({ sharedData: sharedData0, stride: 1, shared }).toVisibleVertComp();const vb1 new WGRStorageValue({ sharedData: sharedData1, stride: 1, shared }).toVisibleVertComp();const vc1 new WGRStorageValue({ sharedData: sharedData3, stride: 1, shared }).toVisibleAll();// build computing uniformsconst compva1 new WGRStorageValue({ sharedData: sharedData0, stride: 1, shared }).toVisibleVertComp();const compva2 new WGRStorageValue({ sharedData: sharedData1, stride: 1, shared }).toVisibleComp();compva2.toBufferForStorage();const compvb1 new WGRStorageValue({ sharedData: sharedData1, stride: 1, shared }).toVisibleVertComp();const compvb2 new WGRStorageValue({ sharedData: sharedData0, stride: 1, shared }).toVisibleComp();compvb2.toBufferForStorage();const compv3 new WGRStorageValue({ sharedData: sharedData3, stride: 1, shared }).toVisibleComp();compv3.toBufferForStorage();return [{ ufvs0: [v0, va1, vc1], ufvs1: [v0, vb1, vc1] },{ ufvs0: [v0, compva1, compva2, compv3], ufvs1: [v0, compvb1, compvb2, compv3] }];}private mEntity: FixScreenPlaneEntity;private mStep 0;private createMaterial(shaderCodeSrc: WGRShderSrcType, uniformValues: WGRUniformValue[], shadinguuid: string, instanceCount: number): WGMaterial {return new WGMaterial({shadinguuid,shaderCodeSrc,instanceCount,uniformValues});}private createCompMaterial(shaderCodeSrc: WGRShderSrcType, uniformValues: WGRUniformValue[], shadinguuid: string, workgroupCount 2): WGCompMaterial {return new WGCompMaterial({shadinguuid,shaderCodeSrc,uniformValues}).setWorkcounts(workgroupCount, workgroupCount);}private initScene(): void {const rc this.mRscene;const ufvsObjs this.createUniformValues();const instanceCount gridSize * gridSize;const workgroupCount Math.ceil(gridSize / shdWorkGroupSize);let shaderSrc {shaderSrc: {code: shaderWGSL,uuid: shader-gameOfLife,vertEntryPoint: vertMain,fragEntryPoint: fragMain}};let compShaderSrc {compShaderSrc: {code: compShdCode,uuid: shader-computing,compEntryPoint: compMain}};const materials: WGMaterial[] [// build ping-pong rendering processthis.createMaterial(shaderSrc, ufvsObjs[0].ufvs0, rshd0, instanceCount),this.createMaterial(shaderSrc, ufvsObjs[0].ufvs1, rshd1, instanceCount),// build ping-pong computing processthis.createCompMaterial(compShaderSrc, ufvsObjs[1].ufvs1, compshd0, workgroupCount),this.createCompMaterial(compShaderSrc, ufvsObjs[1].ufvs0, compshd1, workgroupCount),];let entity new FixScreenPlaneEntity({x: -0.8, y: -0.8, width: 1.6, height: 1.6,materials});rc.addEntity(entity);materials[0].visible false;materials[2].visible false;this.mEntity entity;}private mFrameDelay 3;run(): void {let rendering this.mEntity.isRendering();if (rendering) {if (this.mFrameDelay 0) {this.mFrameDelay--;return;}this.mFrameDelay 3;const ms this.mEntity.materials;for (let i 0; i ms.length; i) {ms[i].visible (this.mStep % 2 i) % 2 0;}this.mStep;}this.mRscene.run(rendering);} }
http://www.w-s-a.com/news/306247/

相关文章:

  • 网站管理助手建站教程国外网站做acm题目比较好
  • 网站开发框架排行专业网页制作服务商
  • 企业网站建设入账政务网站建设信息
  • 网络平台建设是什么江门排名优化怎么做
  • 响应式旅游网站模板下载网址做
  • 个人做网站名称可以随意更改吗惠州网站推广排名
  • 自己建设一个网站步骤网站认证怎么认证
  • 深圳建站公司开发费用沧州手机建站哪家好
  • 兰州网站设计公司排名百度怎么发布短视频
  • 大连模板开发建站泰州网站建设策划方案
  • 厦门好的网站设计局域网内建网站
  • 关键词那种网站正版网页游戏平台排行榜
  • 网站自助建设平台创建网址快捷方式
  • 坑梓网站建设包括哪些成都网站建设优创
  • 重庆网站seo公司哪家好超级优化大师
  • 成都网站建设推广详情邵阳市住房和城乡建设局网站
  • 淄博网站推广猎头公司有哪些
  • 局域网内建立网站90设计网怎么样
  • 域名备案和网站备案有什么不同工程项目建设网站
  • 做网站难吗?wordpress评论qq
  • 权威网站优化价格电子商务静态网站建设实验报告
  • 公司如何办网站北京网站建设公司内江
  • 六安建设网站企业营业执照查询系统入口
  • a5网站建设如果建设淘宝导购网站
  • html5响应式网站开发教程在国内做跨境电商怎么上外国网站
  • win7配置不能运行wordpress关键词快速优化排名软件
  • 餐饮公司最好的网站建设手机网站 搜索优化 百度
  • 17网站一起做网批做服装团购网站
  • 广州网站制作知名企业网站搭建品牌
  • 如何去除网站外链个人网页制作全过程