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

宁波网站建设鲤斯设计网红推广接单平台

宁波网站建设鲤斯设计,网红推广接单平台,仿别人网站,网站开发语言查看器在 WebGPU 开发中, GPUDevice 是一个至关重要的对象,它是与 GPU 进行交互的核心接口。通过 GPUDevice ,开发者可以创建和管理 GPU 资源(如缓冲区、纹理、管线等),并提交命令缓冲区以执行渲染和计算任…

        在 WebGPU 开发中,  GPUDevice   是一个至关重要的对象,它是与 GPU 进行交互的核心接口。通过   GPUDevice  ,开发者可以创建和管理 GPU 资源(如缓冲区、纹理、管线等),并提交命令缓冲区以执行渲染和计算任务。本文将详细介绍   GPUDevice   的核心属性和方法,并通过实际代码示例展示如何使用它来实现高性能的图形和计算任务。

什么是   GPUDevice  ?

        GPUDevice   是 WebGPU API 中的一个接口,表示逻辑 GPU 设备。它是从   GPUAdapter   请求而来的,用于创建和管理 GPU 资源,以及提交命令缓冲区以执行 GPU 操作。  GPUDevice   是开发者与 GPU 交互的主要接口,几乎所有与 GPU 相关的操作都需要通过它来完成。

GPUDevice   的核心属性

1.   features  

  • 类型:  GPUSupportedFeatures  
  • 描述:返回一个集合,表示该设备支持的特性(如纹理格式、管线特性等)。
  • 示例:
    const device = await adapter.requestDevice();
    console.log("Supported Features:", device.features);
    

2.   limits  

  • 类型:  GPUSupportedLimits  
  • 描述:返回一个对象,表示该设备支持的资源限制(如最大纹理大小、最大缓冲区大小等)。
  • 示例:
    const device = await adapter.requestDevice();
    console.log("Supported Limits:", device.limits);
    

3.   queue

  • 类型:  GPUQueue  
  • 描述:返回一个   GPUQueue   对象,用于提交命令缓冲区以执行 GPU 操作。
  • 示例:
    const device = await adapter.requestDevice();
    const queue = device.queue;
    

 GPUDevice   的核心方法

1.   createBuffer()

  • 返回值:  GPUBuffer  
  • 描述:创建一个 GPU 缓冲区,用于存储顶点数据、索引数据或通用计算数据。
  • 参数:descriptor  :一个对象,描述缓冲区的大小、用途等。
  • 示例:
    const buffer = device.createBuffer({size: 1024, // 缓冲区大小(字节)usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST, // 缓冲区用途
    });
    

2.   createTexture()  

  • 返回值:  GPUTexture  
  • 描述:创建一个 GPU 纹理,用于存储图像数据或作为渲染目标。
  • 参数:descriptor  :一个对象,描述纹理的格式、大小和用途。
  • 示例:
    const texture = device.createTexture({size: { width: 512, height: 512, depthOrArrayLayers: 1 },format: 'rgba8unorm',usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
    });
    

3.   createShaderModule()  

  • 返回值:  GPUShaderModule  
  • 描述:创建一个着色器模块,用于定义顶点着色器和片元着色器的代码。
  • 参数:descriptor  :一个对象,包含着色器代码(WGSL)。
  • 示例:
    const shaderModule = device.createShaderModule({code: `@vertex fn vs_main() -> @builtin(position) vec4<f32> {return vec4<f32>(0.0, 0.0, 0.0, 1.0);}@fragment fn fs_main() -> @location(0) vec4<f32> {return vec4<f32>(1.0, 0.0, 0.0, 1.0);}`
    });
    

4.   createCommandEncoder()  

  • 返回值:  GPUCommandEncoder  
  • 描述:创建一个命令编码器,用于记录 GPU 操作命令。
  • 示例:
    const commandEncoder = device.createCommandEncoder();
    

5.   createRenderPipeline()  

  • 返回值:  GPURenderPipeline  
  • 描述:创建一个渲染管线,用于定义渲染流程。
  • 参数:descriptor  :一个对象,描述管线的顶点着色器、片元着色器、目标格式等。
  • 示例:
    const pipeline = device.createRenderPipeline({vertex: {module: shaderModule,entryPoint: 'vs_main',},fragment: {module: shaderModule,entryPoint: 'fs_main',targets: [{ format: 'bgra8unorm' }],},
    });
    

6.   createComputePipeline()  

  • 返回值:  GPUComputePipeline
  • 描述:创建一个计算管线,用于定义通用计算任务。
  • 参数:descriptor  :一个对象,描述管线的计算着色器。
  • 示例:
    const computePipeline = device.createComputePipeline({compute: {module: shaderModule,entryPoint: 'cs_main',},
    });
    

示例代码:初始化 WebGPU 并创建资源

async function initWebGPU() {// 检查浏览器是否支持 WebGPUif (!navigator.gpu) {throw new Error("WebGPU is not supported on this browser.");}// 请求 GPU 适配器const adapter = await navigator.gpu.requestAdapter();if (!adapter) {throw new Error("Couldn't request WebGPU adapter.");}// 请求 GPU 设备const device = await adapter.requestDevice();// 获取画布上下文const canvas = document.querySelector("canvas");const context = canvas.getContext("webgpu");// 获取首选画布格式const format = navigator.gpu.getPreferredCanvasFormat();// 配置画布上下文context.configure({device,format,});// 创建着色器模块const shaderModule = device.createShaderModule({code: `@vertex fn vs_main() -> @builtin(position) vec4<f32> {return vec4<f32>(0.0, 0.0, 0.0, 1.0);}@fragment fn fs_main() -> @location(0) vec4<f32> {return vec4<f32>(1.0, 0.0, 0.0, 1.0);}`,});// 创建渲染管线const pipeline = device.createRenderPipeline({vertex: {module: shaderModule,entryPoint: 'vs_main',},fragment: {module: shaderModule,entryPoint: 'fs_main',targets: [{ format }],},});// 创建命令编码器const commandEncoder = device.createCommandEncoder();// 获取当前纹理视图const textureView = context.getCurrentTexture().createView();// 创建渲染通道描述符const renderPassDescriptor = {colorAttachments: [{view: textureView,loadOp: 'clear',clearValue: { r: 0, g: 0, b: 0, a: 1 },storeOp: 'store',}],};// 开始渲染通道const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);passEncoder.setPipeline(pipeline);passEncoder.draw(3, 1, 0, 0);passEncoder.end();// 提交命令缓冲区device.queue.submit([commandEncoder.finish()]);
}initWebGPU().catch((error) => {console.error("Failed to initialize WebGPU:", error);
});

http://www.dtcms.com/wzjs/73450.html

相关文章:

  • 网站建设公司价格黑客入侵网课
  • 基于mvc的jsp网站开发快速优化关键词排名
  • 商务网站主页设计公司哈尔滨关键词排名工具
  • 培训网页设计吗合肥网站seo公司
  • 网站添加音乐有哪些平台可以免费发广告
  • 网站建设人力资源人员配置大连百度网站排名优化
  • 网站维护和推广方案媒体公关
  • 网站系统维护中企业网站设计模板
  • 房地产网站怎么做免费网络推广网站
  • 临沂公司做网站线上推广公司
  • 不用开源程序怎么做网站网站自助建站系统
  • 企业网站建设需要提供什么内容长尾关键词搜索网站
  • 网站的开发流程有哪几个阶段seo推广优化培训
  • b2b电子商务网站有哪些特点搜索引擎优化seo的英文全称是
  • 可以做彩票广告的网站吗爱战网关键词
  • 威海网站建设上海百度整站优化服务
  • 无网站做cpa防疫测温健康码核验一体机
  • 生物医药网站建设收录排名好的发帖网站
  • 胶南网站建设百度推广的五大优势
  • 网络公司排名100名河南网站seo靠谱
  • 网站建设及运营互联网营销主要学什么
  • 网页设计与网站建设的概述英文seo外链
  • 网页设计与制作教程期末考试题电商seo引流
  • 网站建设目标和功能介绍友情链接的检查方法
  • 网站建设公司模板苏州百度代理公司
  • 介休门户网站2023年8月新冠
  • 中国专门做统计网站河南制作网站
  • 成都房地产最新政策信息流广告优化师培训
  • 深圳网络公司视频东莞seo优化
  • vr 做的网站文件关键词搜索工具