Deploying to gh-pages from @ sotrh/learn-wgpu@04276c1500 🚀

gh-pages
sotrh 1 year ago
parent 6a70d45f06
commit cf18862d4f

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -8,11 +8,11 @@
<meta name="description" content="">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/37.4abf0071.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/14.ae52f492.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/37.4abf0071.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/14.ae52f492.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>Looks like we've got some broken links.</blockquote> <a href="/learn-wgpu/" class="router-link-active">Take me home.</a></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/37.4abf0071.js" defer></script>
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>That's a Four-Oh-Four.</blockquote> <a href="/learn-wgpu/" class="router-link-active">Take me home.</a></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/37.4abf0071.js" defer></script>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{445:function(t,r,e){},541:function(t,r,e){"use strict";var a=e(1),n=e(2),o=e(32),i=e(64),u=e(14),s=n("".slice),l=Math.max,c=Math.min;a({target:"String",proto:!0,forced:!"".substr||"b"!=="ab".substr(-1)},{substr:function(t,r){var e,a,n=u(o(this)),_=n.length,m=i(t);return m===1/0&&(m=0),m<0&&(m=l(_+m,0)),(e=void 0===r?_:i(r))<=0||e===1/0||m>=(a=c(m+e,_))?"":s(n,m,a)}})},542:function(t,r,e){var a={"./tutorial10_lighting/tutorial10_lighting.js":[545,0,2,48],"./tutorial10_lighting/tutorial10_lighting_bg.js":[363,0,2],"./tutorial11_normals/tutorial11_normals.js":[556,0,3,49],"./tutorial11_normals/tutorial11_normals_bg.js":[364,0,3],"./tutorial12_camera/tutorial12_camera.js":[557,0,4,50],"./tutorial12_camera/tutorial12_camera_bg.js":[365,0,4],"./tutorial2_surface/tutorial2_surface.js":[558,0,6,51],"./tutorial2_surface/tutorial2_surface_bg.js":[373,0,6],"./tutorial3_pipeline/tutorial3_pipeline.js":[559,0,7,52],"./tutorial3_pipeline/tutorial3_pipeline_bg.js":[371,0,7],"./tutorial4_buffer/tutorial4_buffer.js":[560,0,8,53],"./tutorial4_buffer/tutorial4_buffer_bg.js":[372,0,8],"./tutorial5_textures/tutorial5_textures.js":[561,0,9,54],"./tutorial5_textures/tutorial5_textures_bg.js":[367,0,9],"./tutorial6_uniforms/tutorial6_uniforms.js":[562,0,10,55],"./tutorial6_uniforms/tutorial6_uniforms_bg.js":[368,0,10],"./tutorial7_instancing/tutorial7_instancing.js":[563,0,11,56],"./tutorial7_instancing/tutorial7_instancing_bg.js":[369,0,11],"./tutorial8_depth/tutorial8_depth.js":[564,0,12,57],"./tutorial8_depth/tutorial8_depth_bg.js":[370,0,12],"./tutorial9_models/tutorial9_models.js":[565,0,5,58],"./tutorial9_models/tutorial9_models_bg.js":[366,0,5]};function n(t){if(!e.o(a,t))return Promise.resolve().then((function(){var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}));var r=a[t],n=r[0];return Promise.all(r.slice(1).map(e.e)).then((function(){return e(n)}))}n.keys=function(){return Object.keys(a)},n.id=542,t.exports=n},543:function(t,r,e){"use strict";e(445)},570:function(t,r,e){"use strict";e.r(r);var a=e(87);e(135),e(29),e(93),e(541),e(8),e(18),e(25),e(123);var n={name:"WasmExample",props:{example:"",autoLoad:!1},data:function(){return{error:"",loading:!1,exampleStarted:!1}},computed:{exampleName:function(){return this.example.replace(/\w\S*/g,(function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}))}},methods:{loadExample:function(){var t=this;return Object(a.a)(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return t.loading=!0,r.prev=1,r.next=4,e(542)("./".concat(t.example,"/").concat(t.example,".js"));case 4:r.next=9;break;case 6:r.prev=6,r.t0=r.catch(1),"Error: Using exceptions for control flow, don't mind me. This isn't actually an error!"!="".concat(r.t0)?(t.error='An error occurred loading "'.concat(t.example,'": ').concat(r.t0),console.error(r.t0),t.exampleStarted=!1):t.exampleStarted=!0;case 9:t.loading=!1;case 10:case"end":return r.stop()}}),r,null,[[1,6]])})))()}},mounted:function(){var t=this;return Object(a.a)(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,t.$nextTick();case 2:if(!t.autoLoad){r.next=5;break}return r.next=5,t.loadExample();case 5:case"end":return r.stop()}}),r)})))()}},o=(e(543),e(23)),i=Object(o.a)(n,(function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("div",{attrs:{id:"wasm-example"}},[t.error?e("div",{staticClass:"error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e(),t._v(" "),t.exampleStarted||t.autoLoad?t._e():e("button",{attrs:{disabled:t.loading},on:{click:function(r){return t.loadExample()}}},[t._v("Try "+t._s(t.exampleName)+"!")])])}),[],!1,null,null,null);r.default=i.exports}}]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{445:function(t,r,e){},541:function(t,r,e){"use strict";var a=e(1),n=e(2),o=e(32),i=e(64),u=e(14),s=n("".slice),l=Math.max,c=Math.min;a({target:"String",proto:!0,forced:!"".substr||"b"!=="ab".substr(-1)},{substr:function(t,r){var e,a,n=u(o(this)),_=n.length,m=i(t);return m===1/0&&(m=0),m<0&&(m=l(_+m,0)),(e=void 0===r?_:i(r))<=0||e===1/0||m>=(a=c(m+e,_))?"":s(n,m,a)}})},542:function(t,r,e){var a={"./tutorial10_lighting/tutorial10_lighting.js":[545,0,2,48],"./tutorial10_lighting/tutorial10_lighting_bg.js":[363,0,2],"./tutorial11_normals/tutorial11_normals.js":[556,0,3,49],"./tutorial11_normals/tutorial11_normals_bg.js":[364,0,3],"./tutorial12_camera/tutorial12_camera.js":[557,0,4,50],"./tutorial12_camera/tutorial12_camera_bg.js":[365,0,4],"./tutorial2_surface/tutorial2_surface.js":[558,0,6,51],"./tutorial2_surface/tutorial2_surface_bg.js":[367,0,6],"./tutorial3_pipeline/tutorial3_pipeline.js":[559,0,7,52],"./tutorial3_pipeline/tutorial3_pipeline_bg.js":[368,0,7],"./tutorial4_buffer/tutorial4_buffer.js":[560,0,8,53],"./tutorial4_buffer/tutorial4_buffer_bg.js":[369,0,8],"./tutorial5_textures/tutorial5_textures.js":[561,0,9,54],"./tutorial5_textures/tutorial5_textures_bg.js":[370,0,9],"./tutorial6_uniforms/tutorial6_uniforms.js":[562,0,10,55],"./tutorial6_uniforms/tutorial6_uniforms_bg.js":[371,0,10],"./tutorial7_instancing/tutorial7_instancing.js":[563,0,11,56],"./tutorial7_instancing/tutorial7_instancing_bg.js":[372,0,11],"./tutorial8_depth/tutorial8_depth.js":[564,0,12,57],"./tutorial8_depth/tutorial8_depth_bg.js":[373,0,12],"./tutorial9_models/tutorial9_models.js":[565,0,5,58],"./tutorial9_models/tutorial9_models_bg.js":[366,0,5]};function n(t){if(!e.o(a,t))return Promise.resolve().then((function(){var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}));var r=a[t],n=r[0];return Promise.all(r.slice(1).map(e.e)).then((function(){return e(n)}))}n.keys=function(){return Object.keys(a)},n.id=542,t.exports=n},543:function(t,r,e){"use strict";e(445)},570:function(t,r,e){"use strict";e.r(r);var a=e(87);e(135),e(29),e(93),e(541),e(8),e(18),e(25),e(123);var n={name:"WasmExample",props:{example:"",autoLoad:!1},data:function(){return{error:"",loading:!1,exampleStarted:!1}},computed:{exampleName:function(){return this.example.replace(/\w\S*/g,(function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()}))}},methods:{loadExample:function(){var t=this;return Object(a.a)(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return t.loading=!0,r.prev=1,r.next=4,e(542)("./".concat(t.example,"/").concat(t.example,".js"));case 4:r.next=9;break;case 6:r.prev=6,r.t0=r.catch(1),"Error: Using exceptions for control flow, don't mind me. This isn't actually an error!"!="".concat(r.t0)?(t.error='An error occurred loading "'.concat(t.example,'": ').concat(r.t0),console.error(r.t0),t.exampleStarted=!1):t.exampleStarted=!0;case 9:t.loading=!1;case 10:case"end":return r.stop()}}),r,null,[[1,6]])})))()}},mounted:function(){var t=this;return Object(a.a)(regeneratorRuntime.mark((function r(){return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,t.$nextTick();case 2:if(!t.autoLoad){r.next=5;break}return r.next=5,t.loadExample();case 5:case"end":return r.stop()}}),r)})))()}},o=(e(543),e(23)),i=Object(o.a)(n,(function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("div",{attrs:{id:"wasm-example"}},[t.error?e("div",{staticClass:"error"},[t._v("\n "+t._s(t.error)+"\n ")]):t._e(),t._v(" "),t.exampleStarted||t.autoLoad?t._e():e("button",{attrs:{disabled:t.loading},on:{click:function(r){return t.loadExample()}}},[t._v("Try "+t._s(t.exampleName)+"!")])])}),[],!1,null,null,null);r.default=i.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{571:function(t,e,a){"use strict";a.r(e);var r=a(23),n=Object(r.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("h2",{attrs:{id:"what-is-wgpu"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-wgpu"}},[t._v("#")]),t._v(" What is wgpu?")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/gfx-rs/wgpu",target:"_blank",rel:"noopener noreferrer"}},[t._v("Wgpu"),a("OutboundLink")],1),t._v(" is a Rust implementation of the "),a("a",{attrs:{href:"https://gpuweb.github.io/gpuweb/",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebGPU API spec"),a("OutboundLink")],1),t._v(". WebGPU is a specification published by the GPU for the Web Community Group. It aims to allow web code access to GPU functions in a safe and reliable manner. It does this by mimicking the Vulkan API, and translating that down to whatever API the host hardware is using (ie. DirectX, Metal, Vulkan).")]),t._v(" "),a("p",[t._v("Wgpu is still in development, so some of this doc is subject to change.")]),t._v(" "),a("h2",{attrs:{id:"why-rust"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#why-rust"}},[t._v("#")]),t._v(" Why Rust?")]),t._v(" "),a("p",[t._v("Wgpu actually has C bindings to allow you to write C/C++ code with it, as well as use other languages that interface with C. That being said, wgpu is written in Rust, and it has some convenient Rust bindings that don't have to jump through any hoops. On top of that, I've been enjoying writing in Rust.")]),t._v(" "),a("p",[t._v("You should be fairly familiar with Rust before using this tutorial as I won't go into much detail on Rust syntax. If you're not super comfortable with Rust you can review the "),a("a",{attrs:{href:"https://www.rust-lang.org/learn",target:"_blank",rel:"noopener noreferrer"}},[t._v("Rust tutorial"),a("OutboundLink")],1),t._v(". You should also be familiar with "),a("a",{attrs:{href:"https://doc.rust-lang.org/cargo/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Cargo"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("I'm using this project to learn wgpu myself, so I might miss some important details, or explain things badly. I'm always open to constructive feedback.")]),t._v(" "),a("h2",{attrs:{id:"contribution-and-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contribution-and-support"}},[t._v("#")]),t._v(" Contribution and Support")]),t._v(" "),a("ul",[a("li",[t._v("I accept pull requests ("),a("a",{attrs:{href:"https://github.com/sotrh/learn-wgpu",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub repo"),a("OutboundLink")],1),t._v(") for fixing issues with this tutorial such as typos, incorrect information, and other inconsistencies.")]),t._v(" "),a("li",[t._v("Due to wgpu's rapidly changing api, I'm not accepting any new pull requests for showcase demos.")]),t._v(" "),a("li",[t._v("If you want to support me directly, check out my "),a("a",{attrs:{href:"https://www.patreon.com/sotrh",target:"_blank",rel:"noopener noreferrer"}},[t._v("patreon"),a("OutboundLink")],1),t._v("!")])]),t._v(" "),a("h2",{attrs:{id:"translations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#translations"}},[t._v("#")]),t._v(" Translations")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://jinleili.github.io/learn-wgpu-zh/",target:"_blank",rel:"noopener noreferrer"}},[t._v("中文版: 增加了与 App 的集成与调试系列章节"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"special-thanks-to-these-patrons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#special-thanks-to-these-patrons"}},[t._v("#")]),t._v(" Special thanks to these patrons!")]),t._v(" "),a("ul",[a("li",[t._v("David Laban")]),t._v(" "),a("li",[t._v("Gunstein Vatnar")]),t._v(" "),a("li",[t._v("Lennart")]),t._v(" "),a("li",[t._v("Ian Gowen")]),t._v(" "),a("li",[t._v("Aron Granberg")]),t._v(" "),a("li",[t._v("Bernard Llanos")]),t._v(" "),a("li",[t._v("Jan Šipr")]),t._v(" "),a("li",[t._v("Zeh Fernando")]),t._v(" "),a("li",[t._v("Felix")]),t._v(" "),a("li",[t._v("Youngsuk Kim")]),t._v(" "),a("li",[t._v("オリトイツキ")]),t._v(" "),a("li",[t._v("Andrea Postal")]),t._v(" "),a("li",[t._v("charlesk")])])])}),[],!1,null,null,null);e.default=n.exports}}]);
(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{571:function(t,e,a){"use strict";a.r(e);var r=a(23),n=Object(r.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"introduction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#introduction"}},[t._v("#")]),t._v(" Introduction")]),t._v(" "),a("h2",{attrs:{id:"what-is-wgpu"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-wgpu"}},[t._v("#")]),t._v(" What is wgpu?")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/gfx-rs/wgpu",target:"_blank",rel:"noopener noreferrer"}},[t._v("Wgpu"),a("OutboundLink")],1),t._v(" is a Rust implementation of the "),a("a",{attrs:{href:"https://gpuweb.github.io/gpuweb/",target:"_blank",rel:"noopener noreferrer"}},[t._v("WebGPU API spec"),a("OutboundLink")],1),t._v(". WebGPU is a specification published by the GPU for the Web Community Group. It aims to allow web code access to GPU functions in a safe and reliable manner. It does this by mimicking the Vulkan API, and translating that down to whatever API the host hardware is using (ie. DirectX, Metal, Vulkan).")]),t._v(" "),a("p",[t._v("Wgpu is still in development, so some of this doc is subject to change.")]),t._v(" "),a("h2",{attrs:{id:"why-rust"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#why-rust"}},[t._v("#")]),t._v(" Why Rust?")]),t._v(" "),a("p",[t._v("Wgpu actually has C bindings to allow you to write C/C++ code with it, as well as use other languages that interface with C. That being said, wgpu is written in Rust, and it has some convenient Rust bindings that don't have to jump through any hoops. On top of that, I've been enjoying writing in Rust.")]),t._v(" "),a("p",[t._v("You should be fairly familiar with Rust before using this tutorial as I won't go into much detail on Rust syntax. If you're not super comfortable with Rust you can review the "),a("a",{attrs:{href:"https://www.rust-lang.org/learn",target:"_blank",rel:"noopener noreferrer"}},[t._v("Rust tutorial"),a("OutboundLink")],1),t._v(". You should also be familiar with "),a("a",{attrs:{href:"https://doc.rust-lang.org/cargo/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Cargo"),a("OutboundLink")],1),t._v(".")]),t._v(" "),a("p",[t._v("I'm using this project to learn wgpu myself, so I might miss some important details, or explain things badly. I'm always open to constructive feedback.")]),t._v(" "),a("h2",{attrs:{id:"contribution-and-support"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#contribution-and-support"}},[t._v("#")]),t._v(" Contribution and Support")]),t._v(" "),a("ul",[a("li",[t._v("I accept pull requests ("),a("a",{attrs:{href:"https://github.com/sotrh/learn-wgpu",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub repo"),a("OutboundLink")],1),t._v(") for fixing issues with this tutorial such as typos, incorrect information, and other inconsistencies.")]),t._v(" "),a("li",[t._v("Due to wgpu's rapidly changing api, I'm not accepting any new pull requests for showcase demos.")]),t._v(" "),a("li",[t._v("If you want to support me directly, check out my "),a("a",{attrs:{href:"https://www.patreon.com/sotrh",target:"_blank",rel:"noopener noreferrer"}},[t._v("patreon"),a("OutboundLink")],1),t._v("!")])]),t._v(" "),a("h2",{attrs:{id:"translations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#translations"}},[t._v("#")]),t._v(" Translations")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://jinleili.github.io/learn-wgpu-zh/",target:"_blank",rel:"noopener noreferrer"}},[t._v("中文版: 增加了与 App 的集成与调试系列章节"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"special-thanks-to-these-patrons"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#special-thanks-to-these-patrons"}},[t._v("#")]),t._v(" Special thanks to these patrons!")]),t._v(" "),a("ul",[a("li",[t._v("David Laban")]),t._v(" "),a("li",[t._v("Lennart")]),t._v(" "),a("li",[t._v("Ian Gowen")]),t._v(" "),a("li",[t._v("Aron Granberg")]),t._v(" "),a("li",[t._v("Bernard Llanos")]),t._v(" "),a("li",[t._v("Jan Šipr")]),t._v(" "),a("li",[t._v("Zeh Fernando")]),t._v(" "),a("li",[t._v("Youngsuk Kim")]),t._v(" "),a("li",[t._v("オリトイツキ")]),t._v(" "),a("li",[t._v("Andrea Postal")]),t._v(" "),a("li",[t._v("Julius Liu")]),t._v(" "),a("li",[t._v("Feng Liang")]),t._v(" "),a("li",[t._v("Mattia Samiolo")]),t._v(" "),a("li",[t._v("Joris Willems")]),t._v(" "),a("li",[t._v("Jani Turkia")]),t._v(" "),a("li",[t._v("papyDoctor")]),t._v(" "),a("li",[t._v("Filip")])])])}),[],!1,null,null,null);e.default=n.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Dependencies and the window">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/39.7af96606.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/39.5c1b2b6b.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -27,7 +27,7 @@
<span class="token key property">winit</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.27&quot;</span>
<span class="token key property">env_logger</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.10&quot;</span>
<span class="token key property">log</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.4&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.14&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.15&quot;</span>
</code></pre></div><h2 id="using-rust-s-new-resolver"><a href="#using-rust-s-new-resolver" class="header-anchor">#</a> Using Rust's new resolver</h2> <p>As of version 0.10, wgpu requires cargo's <a href="https://doc.rust-lang.org/cargo/reference/resolver.html#feature-resolver-version-2" target="_blank" rel="noopener noreferrer">newest feature resolver<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>, which is the default in the 2021 edition (any new project started with Rust version 1.56.0 or newer). However, if you are still using the 2018 edition, you must include <code>resolver = &quot;2&quot;</code> in either the <code>[package]</code> section of <code>Cargo.toml</code> if you are working on a single crate, or the <code>[workspace]</code> section of the root <code>Cargo.toml</code> in a workspace.</p> <h2 id="env-logger"><a href="#env-logger" class="header-anchor">#</a> env_logger</h2> <p>It is very important to enable logging via <code>env_logger::init();</code>.
When wgpu hits any error it panics with a generic message, while logging the real error via the log crate.
This means if you don't include <code>env_logger::init()</code>, wgpu will fail silently, leaving you very confused!<br>
@ -78,7 +78,7 @@ This means if you don't include <code>env_logger::init()</code>, wgpu will fail
<span class="token punctuation">[</span><span class="token table class-name">target.'cfg(target_arch = &quot;wasm32&quot;)'.dependencies</span><span class="token punctuation">]</span>
<span class="token key property">console_error_panic_hook</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.1.6&quot;</span>
<span class="token key property">console_log</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2.0&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.14&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token string">&quot;webgl&quot;</span><span class="token punctuation">]</span><span class="token punctuation">}</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.15&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token string">&quot;webgl&quot;</span><span class="token punctuation">]</span><span class="token punctuation">}</span>
<span class="token key property">wasm-bindgen</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2&quot;</span>
<span class="token key property">wasm-bindgen-futures</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.4.30&quot;</span>
<span class="token key property">web-sys</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.3&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span>
@ -150,7 +150,7 @@ I won't get into the specifics of wasm-bindgen, so if you need a primer (or just
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span>
</code></pre></div></div> <p>Press the button below and you will see the code running!</p> <div id="wasm-example"><!----> <button>Try Tutorial1_window!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial1-window/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div></div> <p>Press the button below and you will see the code running!</p> <div id="wasm-example"><!----> <button>Try Tutorial1_window!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial1-window/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/" class="prev router-link-active">
Introduction
@ -159,6 +159,6 @@ I won't get into the specifics of wasm-bindgen, so if you need a primer (or just
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/39.7af96606.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/39.5c1b2b6b.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="The Surface">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/26.471ae32b.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/26.4e4ba6a9.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -68,13 +68,16 @@
<span class="token comment">// The instance is a handle to our GPU</span>
<span class="token comment">// Backends::all =&gt; Vulkan + Metal + DX12 + Browser WebGPU</span>
<span class="token keyword">let</span> instance <span class="token operator">=</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Instance</span><span class="token punctuation">::</span><span class="token function">new</span><span class="token punctuation">(</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Backends</span><span class="token punctuation">::</span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">let</span> instance <span class="token operator">=</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Instance</span><span class="token punctuation">::</span><span class="token function">new</span><span class="token punctuation">(</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">InstanceDescriptor</span> <span class="token punctuation">{</span>
backends<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Backends</span><span class="token punctuation">::</span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
dx12_shader_compiler<span class="token punctuation">:</span> <span class="token class-name">Default</span><span class="token punctuation">::</span><span class="token function">default</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// # Safety</span>
<span class="token comment">//</span>
<span class="token comment">// The surface needs to live as long as the window that created it.</span>
<span class="token comment">// State owns the window so this should be safe.</span>
<span class="token keyword">let</span> surface <span class="token operator">=</span> <span class="token keyword">unsafe</span> <span class="token punctuation">{</span> instance<span class="token punctuation">.</span><span class="token function">create_surface</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>window<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">let</span> surface <span class="token operator">=</span> <span class="token keyword">unsafe</span> <span class="token punctuation">{</span> instance<span class="token punctuation">.</span><span class="token function">create_surface</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>window<span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">unwrap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">let</span> adapter <span class="token operator">=</span> instance<span class="token punctuation">.</span><span class="token function">request_adapter</span><span class="token punctuation">(</span>
<span class="token operator">&amp;</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">RequestAdapterOptions</span> <span class="token punctuation">{</span>
@ -89,11 +92,11 @@ is to create <code>Adapter</code>s and <code>Surface</code>s.</p> <p>The <code>a
<span class="token punctuation">.</span><span class="token function">enumerate_adapters</span><span class="token punctuation">(</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Backends</span><span class="token punctuation">::</span><span class="token function">all</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token closure-params"><span class="token closure-punctuation punctuation">|</span>adapter<span class="token closure-punctuation punctuation">|</span></span> <span class="token punctuation">{</span>
<span class="token comment">// Check if this adapter supports our surface</span>
<span class="token operator">!</span>surface<span class="token punctuation">.</span><span class="token function">get_supported_formats</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>adapter<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">is_empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
adapter<span class="token punctuation">.</span><span class="token function">is_surface_supported</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>surface<span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">unwrap</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre></div><p>Another thing to note is that <code>Adapter</code>s are locked to a specific backend. If you are on Windows and have 2 graphics cards you'll have at least 4 adapters available to use, 2 Vulkan and 2 DirectX.</p> <p>For more fields you can use to refine your search, <a href="https://docs.rs/wgpu/latest/wgpu/struct.Adapter.html" target="_blank" rel="noopener noreferrer">check out the docs<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p></div> <h3 id="the-surface-2"><a href="#the-surface-2" class="header-anchor">#</a> The Surface</h3> <p>The <code>surface</code> is the part of the window that we draw to. We need it to draw directly to the screen. Our <code>window</code> needs to implement <a href="https://crates.io/crates/raw-window-handle" target="_blank" rel="noopener noreferrer">raw-window-handle<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>'s <code>HasRawWindowHandle</code> trait to create a surface. Fortunately, winit's <code>Window</code> fits the bill. We also need it to request our <code>adapter</code>.</p> <h3 id="device-and-queue"><a href="#device-and-queue" class="header-anchor">#</a> Device and Queue</h3> <p>Let's use the <code>adapter</code> to create the device and queue.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">let</span> <span class="token punctuation">(</span>device<span class="token punctuation">,</span> queue<span class="token punctuation">)</span> <span class="token operator">=</span> adapter<span class="token punctuation">.</span><span class="token function">request_device</span><span class="token punctuation">(</span>
</code></pre></div><p>One thing to note is that <code>enumerate_adapters</code> isn't available on WASM, so you have to use <code>request_adapter</code>.</p> <p>Another thing to note is that <code>Adapter</code>s are locked to a specific backend. If you are on Windows and have 2 graphics cards you'll have at least 4 adapters available to use, 2 Vulkan and 2 DirectX.</p> <p>For more fields you can use to refine your search, <a href="https://docs.rs/wgpu/latest/wgpu/struct.Adapter.html" target="_blank" rel="noopener noreferrer">check out the docs<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p></div> <h3 id="the-surface-2"><a href="#the-surface-2" class="header-anchor">#</a> The Surface</h3> <p>The <code>surface</code> is the part of the window that we draw to. We need it to draw directly to the screen. Our <code>window</code> needs to implement <a href="https://crates.io/crates/raw-window-handle" target="_blank" rel="noopener noreferrer">raw-window-handle<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>'s <code>HasRawWindowHandle</code> trait to create a surface. Fortunately, winit's <code>Window</code> fits the bill. We also need it to request our <code>adapter</code>.</p> <h3 id="device-and-queue"><a href="#device-and-queue" class="header-anchor">#</a> Device and Queue</h3> <p>Let's use the <code>adapter</code> to create the device and queue.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">let</span> <span class="token punctuation">(</span>device<span class="token punctuation">,</span> queue<span class="token punctuation">)</span> <span class="token operator">=</span> adapter<span class="token punctuation">.</span><span class="token function">request_device</span><span class="token punctuation">(</span>
<span class="token operator">&amp;</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">DeviceDescriptor</span> <span class="token punctuation">{</span>
features<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">Features</span><span class="token punctuation">::</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token comment">// WebGL doesn't support all of wgpu's features, so if</span>
@ -107,19 +110,29 @@ is to create <code>Adapter</code>s and <code>Surface</code>s.</p> <p>The <code>a
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token class-name">None</span><span class="token punctuation">,</span> <span class="token comment">// Trace path</span>
<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token keyword">await</span><span class="token punctuation">.</span><span class="token function">unwrap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>The <code>features</code> field on <code>DeviceDescriptor</code>, allows us to specify what extra features we want. For this simple example, I've decided not to use any extra features.</p> <div class="note"><p>The graphics card you have limits the features you can use. If you want to use certain features you may need to limit what devices you support or provide workarounds.</p> <p>You can get a list of features supported by your device using <code>adapter.features()</code>, or <code>device.features()</code>.</p> <p>You can view a full list of features <a href="https://docs.rs/wgpu/latest/wgpu/struct.Features.html" target="_blank" rel="noopener noreferrer">here<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p></div> <p>The <code>limits</code> field describes the limit of certain types of resources that we can create. We'll use the defaults for this tutorial, so we can support most devices. You can view a list of limits <a href="https://docs.rs/wgpu/latest/wgpu/struct.Limits.html" target="_blank" rel="noopener noreferrer">here<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">let</span> config <span class="token operator">=</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">SurfaceConfiguration</span> <span class="token punctuation">{</span>
</code></pre></div><p>The <code>features</code> field on <code>DeviceDescriptor</code>, allows us to specify what extra features we want. For this simple example, I've decided not to use any extra features.</p> <div class="note"><p>The graphics card you have limits the features you can use. If you want to use certain features you may need to limit what devices you support or provide workarounds.</p> <p>You can get a list of features supported by your device using <code>adapter.features()</code>, or <code>device.features()</code>.</p> <p>You can view a full list of features <a href="https://docs.rs/wgpu/latest/wgpu/struct.Features.html" target="_blank" rel="noopener noreferrer">here<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p></div> <p>The <code>limits</code> field describes the limit of certain types of resources that we can create. We'll use the defaults for this tutorial, so we can support most devices. You can view a list of limits <a href="https://docs.rs/wgpu/latest/wgpu/struct.Limits.html" target="_blank" rel="noopener noreferrer">here<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">let</span> surface_caps <span class="token operator">=</span> surface<span class="token punctuation">.</span><span class="token function">get_capabilities</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>adapter<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Shader code in this tutorial assumes an Srgb surface texture. Using a different</span>
<span class="token comment">// one will result all the colors comming out darker. If you want to support non</span>
<span class="token comment">// Srgb surfaces, you'll need to account for that when drawing to the frame.</span>
<span class="token keyword">let</span> surface_format <span class="token operator">=</span> surface_caps<span class="token punctuation">.</span>formats<span class="token punctuation">.</span><span class="token function">iter</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">copied</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span><span class="token closure-params"><span class="token closure-punctuation punctuation">|</span>f<span class="token closure-punctuation punctuation">|</span></span> f<span class="token punctuation">.</span><span class="token function">describe</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>srgb<span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">.</span><span class="token function">unwrap_or</span><span class="token punctuation">(</span>surface_caps<span class="token punctuation">.</span>formats<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">let</span> config <span class="token operator">=</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">SurfaceConfiguration</span> <span class="token punctuation">{</span>
usage<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">RENDER_ATTACHMENT</span><span class="token punctuation">,</span>
format<span class="token punctuation">:</span> surface<span class="token punctuation">.</span><span class="token function">get_supported_formats</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>adapter<span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
format<span class="token punctuation">:</span> surface_format<span class="token punctuation">,</span>
width<span class="token punctuation">:</span> size<span class="token punctuation">.</span>width<span class="token punctuation">,</span>
height<span class="token punctuation">:</span> size<span class="token punctuation">.</span>height<span class="token punctuation">,</span>
present_mode<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">PresentMode</span><span class="token punctuation">::</span><span class="token class-name">Fifo</span><span class="token punctuation">,</span>
alpha_mode<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">CompositeAlphaMode</span><span class="token punctuation">::</span><span class="token class-name">Auto</span><span class="token punctuation">,</span>
present_mode<span class="token punctuation">:</span> surface_caps<span class="token punctuation">.</span>present_modes<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
alpha_mode<span class="token punctuation">:</span> surface_caps<span class="token punctuation">.</span>alpha_modes<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
view_formats<span class="token punctuation">:</span> <span class="token macro property">vec!</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
surface<span class="token punctuation">.</span><span class="token function">configure</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>device<span class="token punctuation">,</span> <span class="token operator">&amp;</span>config<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>Here we are defining a config for our surface. This will define how the surface creates its underlying <code>SurfaceTexture</code>s. We will talk about <code>SurfaceTexture</code> when we get to the <code>render</code> function. For now, let's talk about the config's fields.</p> <p>The <code>usage</code> field describes how <code>SurfaceTexture</code>s will be used. <code>RENDER_ATTACHMENT</code> specifies that the textures will be used to write to the screen (we'll talk about more <code>TextureUsages</code>s later).</p> <p>The <code>format</code> defines how <code>SurfaceTexture</code>s will be stored on the gpu. <code>surface.get_supported_formats(&amp;adapter)</code> returns a <code>Vec</code> of the formats that are supported by that surface. While a surface may support many formats, it usually has a format that it prefers, in which case it places that format first in the returned <code>Vec</code>. We use the format in the first position (<code>[0]</code>) to get the best format to use for that particular surface.</p> <p><code>width</code> and <code>height</code> are the width and the height in pixels of a <code>SurfaceTexture</code>. This should usually be the width and the height of the window.</p> <div class="warning">
</code></pre></div><p>Here we are defining a config for our surface. This will define how the surface creates its underlying <code>SurfaceTexture</code>s. We will talk about <code>SurfaceTexture</code> when we get to the <code>render</code> function. For now, let's talk about the config's fields.</p> <p>The <code>usage</code> field describes how <code>SurfaceTexture</code>s will be used. <code>RENDER_ATTACHMENT</code> specifies that the textures will be used to write to the screen (we'll talk about more <code>TextureUsages</code>s later).</p> <p>The <code>format</code> defines how <code>SurfaceTexture</code>s will be stored on the gpu. We can get a supported format from the <code>SurfaceCapabilities</code>.</p> <p><code>width</code> and <code>height</code> are the width and the height in pixels of a <code>SurfaceTexture</code>. This should usually be the width and the height of the window.</p> <div class="warning">
Make sure that the width and height of the `SurfaceTexture` are not 0, as that can cause your app to crash.
</div> <p><code>present_mode</code> uses <code>wgpu::PresentMode</code> enum which determines how to sync the surface with the display. The option we picked, <code>PresentMode::Fifo</code>, will cap the display rate at the display's framerate. This is essentially VSync. This mode is guaranteed to be supported on all platforms. There are other options and you can see all of them <a href="https://docs.rs/wgpu/latest/wgpu/enum.PresentMode.html" target="_blank" rel="noopener noreferrer">in the docs<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <div class="note"><p>If you want to let your users pick what <code>PresentMode</code> they use, you can use <a href="https://docs.rs/wgpu/latest/wgpu/struct.Surface.html#method.get_supported_modes" target="_blank" rel="noopener noreferrer">Surface::get_supported_modes()<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> to get a list of all the <code>PresentMode</code>s the surface supports:</p> <div class="language-rust extra-class"><pre class="language-rust"><code><span class="token keyword">let</span> modes <span class="token operator">=</span> surface<span class="token punctuation">.</span><span class="token function">get_supported_modes</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>adapter<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>Regardless, <code>PresentMode::Fifo</code> will always be supported, and <code>PresentMode::AutoVsync</code> and <code>PresentMode::AutoNoVsync</code> have fallback support and therefore will work on all platforms.</p></div> <p>Now that we've configured our surface properly we can add these new fields at the end of the method.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">async</span> <span class="token keyword">fn</span> <span class="token function-definition function">new</span><span class="token punctuation">(</span>window<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token class-name">Window</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token keyword">Self</span> <span class="token punctuation">{</span>
</div> <p><code>present_mode</code> uses <code>wgpu::PresentMode</code> enum which determines how to sync the surface with the display. The option we picked, <code>PresentMode::Fifo</code>, will cap the display rate at the display's framerate. This is essentially VSync. This mode is guaranteed to be supported on all platforms. There are other options and you can see all of them <a href="https://docs.rs/wgpu/latest/wgpu/enum.PresentMode.html" target="_blank" rel="noopener noreferrer">in the docs<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <div class="note"><p>If you want to let your users pick what <code>PresentMode</code> they use, you can use <a href="https://docs.rs/wgpu/latest/wgpu/struct.SurfaceCapabilities.html#structfield.present_modes" target="_blank" rel="noopener noreferrer">SurfaceCapabilities::present_modes<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> to get a list of all the <code>PresentMode</code>s the surface supports:</p> <div class="language-rust extra-class"><pre class="language-rust"><code><span class="token keyword">let</span> modes <span class="token operator">=</span> <span class="token operator">&amp;</span>surface_caps<span class="token punctuation">.</span>present_modes<span class="token punctuation">;</span>
</code></pre></div><p>Regardless, <code>PresentMode::Fifo</code> will always be supported, and <code>PresentMode::AutoVsync</code> and <code>PresentMode::AutoNoVsync</code> have fallback support and therefore will work on all platforms.</p></div> <p><code>alpha_mode</code> is honestly not something I'm familiar with. I believe it has something to do with transparent windows, but feel free to open a pull request. For now we'll just use the first <code>AlphaMode</code> in the list given by <code>surface_caps</code>.</p> <p><code>view_formats</code> is a list of <code>TextureFormat</code>s that you can use when creating <code>TextureView</code>s (we'll cover those briefly later in the this tutorial as well as more in depth <a href="../beginner/tutorial5-textures">in the texture tutorial</a>). As of writing this means that if your surface is srgb color space, you can create a texture view that uses a linear color space.</p> <p>Now that we've configured our surface properly we can add these new fields at the end of the method.</p> <div class="language-rust extra-class"><pre class="language-rust"><code> <span class="token keyword">async</span> <span class="token keyword">fn</span> <span class="token function-definition function">new</span><span class="token punctuation">(</span>window<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token class-name">Window</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token keyword">Self</span> <span class="token punctuation">{</span>
<span class="token comment">// ...</span>
<span class="token keyword">Self</span> <span class="token punctuation">{</span>
@ -149,13 +162,13 @@ Make sure that the width and height of the `SurfaceTexture` are not 0, as that c
<span class="token key property">winit</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.27&quot;</span>
<span class="token key property">env_logger</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.10&quot;</span>
<span class="token key property">log</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.4&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.14&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.15&quot;</span>
<span class="token key property">pollster</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2&quot;</span>
<span class="token punctuation">[</span><span class="token table class-name">target.'cfg(target_arch = &quot;wasm32&quot;)'.dependencies</span><span class="token punctuation">]</span>
<span class="token key property">console_error_panic_hook</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.1.6&quot;</span>
<span class="token key property">console_log</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2.0&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.14&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token string">&quot;webgl&quot;</span><span class="token punctuation">]</span><span class="token punctuation">}</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.15&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span><span class="token string">&quot;webgl&quot;</span><span class="token punctuation">]</span><span class="token punctuation">}</span>
<span class="token key property">wasm-bindgen</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2&quot;</span>
<span class="token key property">wasm-bindgen-futures</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.4&quot;</span>
<span class="token key property">web-sys</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.3&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span>
@ -305,7 +318,7 @@ event_loop<span class="token punctuation">.</span><span class="token function">r
store<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
</code></pre></div><p>The <code>RenderPassColorAttachment</code> has the <code>view</code> field which informs <code>wgpu</code> what texture to save the colors to. In this case we specify the <code>view</code> that we created using <code>surface.get_current_texture()</code>. This means that any colors we draw to this attachment will get drawn to the screen.</p> <p>The <code>resolve_target</code> is the texture that will receive the resolved output. This will be the same as <code>view</code> unless multisampling is enabled. We don't need to specify this, so we leave it as <code>None</code>.</p> <p>The <code>ops</code> field takes a <code>wpgu::Operations</code> object. This tells wgpu what to do with the colors on the screen (specified by <code>view</code>). The <code>load</code> field tells wgpu how to handle colors stored from the previous frame. Currently, we are clearing the screen with a bluish color. The <code>store</code> field tells wgpu whether we want to store the rendered results to the <code>Texture</code> behind our <code>TextureView</code> (in this case it's the <code>SurfaceTexture</code>). We use <code>true</code> as we do want to store our render results.</p> <div class="note"><p>It's not uncommon to not clear the screen if the screen is going to be completely covered up with objects. If your scene doesn't cover the entire screen however you can end up with something like this.</p> <p><img src="/learn-wgpu/assets/img/no-clear.753f913f.png" alt="./no-clear.png"></p></div> <h2 id="validation-errors"><a href="#validation-errors" class="header-anchor">#</a> Validation Errors?</h2> <p>If wgpu is using Vulkan on your machine, you may run into validation errors if you are running an older version of the Vulkan SDK. You should be using at least version <code>1.2.182</code> as older versions can give out some false positives. If errors persist, you may have encountered a bug in wgpu. You can post an issue at <a href="https://github.com/gfx-rs/wgpu" target="_blank" rel="noopener noreferrer">https://github.com/gfx-rs/wgpu<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Modify the <code>input()</code> method to capture mouse events, and update the clear color using that. <em>Hint: you'll probably need to use <code>WindowEvent::CursorMoved</code></em>.</p> <div id="wasm-example"><!----> <button>Try Tutorial2_surface!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial2-surface/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>The <code>RenderPassColorAttachment</code> has the <code>view</code> field which informs <code>wgpu</code> what texture to save the colors to. In this case we specify the <code>view</code> that we created using <code>surface.get_current_texture()</code>. This means that any colors we draw to this attachment will get drawn to the screen.</p> <p>The <code>resolve_target</code> is the texture that will receive the resolved output. This will be the same as <code>view</code> unless multisampling is enabled. We don't need to specify this, so we leave it as <code>None</code>.</p> <p>The <code>ops</code> field takes a <code>wpgu::Operations</code> object. This tells wgpu what to do with the colors on the screen (specified by <code>view</code>). The <code>load</code> field tells wgpu how to handle colors stored from the previous frame. Currently, we are clearing the screen with a bluish color. The <code>store</code> field tells wgpu whether we want to store the rendered results to the <code>Texture</code> behind our <code>TextureView</code> (in this case it's the <code>SurfaceTexture</code>). We use <code>true</code> as we do want to store our render results.</p> <div class="note"><p>It's not uncommon to not clear the screen if the screen is going to be completely covered up with objects. If your scene doesn't cover the entire screen however you can end up with something like this.</p> <p><img src="/learn-wgpu/assets/img/no-clear.753f913f.png" alt="./no-clear.png"></p></div> <h2 id="validation-errors"><a href="#validation-errors" class="header-anchor">#</a> Validation Errors?</h2> <p>If wgpu is using Vulkan on your machine, you may run into validation errors if you are running an older version of the Vulkan SDK. You should be using at least version <code>1.2.182</code> as older versions can give out some false positives. If errors persist, you may have encountered a bug in wgpu. You can post an issue at <a href="https://github.com/gfx-rs/wgpu" target="_blank" rel="noopener noreferrer">https://github.com/gfx-rs/wgpu<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Modify the <code>input()</code> method to capture mouse events, and update the clear color using that. <em>Hint: you'll probably need to use <code>WindowEvent::CursorMoved</code></em>.</p> <div id="wasm-example"><!----> <button>Try Tutorial2_surface!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial2-surface/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial1-window/" class="prev">
Dependencies and the window
@ -314,6 +327,6 @@ event_loop<span class="token punctuation">.</span><span class="token function">r
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/26.471ae32b.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/26.4e4ba6a9.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Textures and bind groups">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/18.50af6d13.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/18.db314664.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -55,6 +55,14 @@
<span class="token comment">// COPY_DST means that we want to copy data to this texture</span>
usage<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">TEXTURE_BINDING</span> <span class="token operator">|</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">COPY_DST</span><span class="token punctuation">,</span>
label<span class="token punctuation">:</span> <span class="token class-name">Some</span><span class="token punctuation">(</span><span class="token string">&quot;diffuse_texture&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token comment">// This is the same as with the SurfaceConfig. It</span>
<span class="token comment">// specifies what texture formats can be used to</span>
<span class="token comment">// create TextureViews for this texture. The base</span>
<span class="token comment">// texture format (Rgba8UnormSrgb in this case) is</span>
<span class="token comment">// always supported. Note that using a different</span>
<span class="token comment">// texture format is not supported on the WebGL2</span>
<span class="token comment">// backend.</span>
view_formats<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><h2 id="getting-data-into-a-texture"><a href="#getting-data-into-a-texture" class="header-anchor">#</a> Getting data into a Texture</h2> <p>The <code>Texture</code> struct has no methods to interact with the data directly. However, we can use a method on the <code>queue</code> we created earlier called <code>write_texture</code> to load the texture in. Let's take a look at how we do that:</p> <div class="language-rust extra-class"><pre class="language-rust"><code>queue<span class="token punctuation">.</span><span class="token function">write_texture</span><span class="token punctuation">(</span>
@ -287,7 +295,7 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
<span class="token key property">env_logger</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.10&quot;</span>
<span class="token key property">log</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.4&quot;</span>
<span class="token key property">pollster</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.2&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.14&quot;</span>
<span class="token key property">wgpu</span> <span class="token punctuation">=</span> <span class="token string">&quot;0.15&quot;</span>
<span class="token key property">bytemuck</span> <span class="token punctuation">=</span> <span class="token punctuation">{</span> <span class="token key property">version</span> <span class="token punctuation">=</span> <span class="token string">&quot;1.12&quot;</span><span class="token punctuation">,</span> <span class="token key property">features</span> <span class="token punctuation">=</span> <span class="token punctuation">[</span> <span class="token string">&quot;derive&quot;</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span>
<span class="token key property">anyhow</span> <span class="token punctuation">=</span> <span class="token string">&quot;1.0&quot;</span> <span class="token comment"># NEW!</span>
</code></pre></div><p>Then, in a new file called <code>src/texture.rs</code>, add the following:</p> <div class="language-rust extra-class"><pre class="language-rust"><code><span class="token keyword">use</span> <span class="token namespace">image<span class="token punctuation">::</span></span><span class="token class-name">GenericImageView</span><span class="token punctuation">;</span>
@ -333,6 +341,7 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
dimension<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureDimension</span><span class="token punctuation">::</span><span class="token constant">D2</span><span class="token punctuation">,</span>
format<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureFormat</span><span class="token punctuation">::</span><span class="token class-name">Rgba8UnormSrgb</span><span class="token punctuation">,</span>
usage<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">TEXTURE_BINDING</span> <span class="token operator">|</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">COPY_DST</span><span class="token punctuation">,</span>
view_formats<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
@ -406,7 +415,7 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre></div><p>Phew!</p> <p>With these changes in place, the code should be working the same as it was before, but we now have a much easier way to create textures.</p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Create another texture and swap it out when you press the space key.</p> <div id="wasm-example"><!----> <button>Try Tutorial5_textures!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial5-textures/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>Phew!</p> <p>With these changes in place, the code should be working the same as it was before, but we now have a much easier way to create textures.</p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Create another texture and swap it out when you press the space key.</p> <div id="wasm-example"><!----> <button>Try Tutorial5_textures!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial5-textures/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial4-buffer/" class="prev">
Buffers and Indices
@ -415,6 +424,6 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/18.50af6d13.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/18.db314664.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Uniform buffers and a 3d camera">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/30.a1f387de.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/30.a1f387de.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -319,7 +319,7 @@ fn vs_main(
<span class="token keyword">self</span><span class="token punctuation">.</span>camera_uniform<span class="token punctuation">.</span><span class="token function">update_view_proj</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>camera<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">self</span><span class="token punctuation">.</span>queue<span class="token punctuation">.</span><span class="token function">write_buffer</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>camera_buffer<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token namespace">bytemuck<span class="token punctuation">::</span></span><span class="token function">cast_slice</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token punctuation">[</span><span class="token keyword">self</span><span class="token punctuation">.</span>camera_uniform<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>That's all we need to do. If you run the code now you should see a pentagon with our tree texture that you can rotate around and zoom into with the wasd/arrow keys.</p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Have our model rotate on its own independently of the camera. <em>Hint: you'll need another matrix for this.</em></p> <div id="wasm-example"><!----> <button>Try Tutorial6_uniforms!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial6-uniforms/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>That's all we need to do. If you run the code now you should see a pentagon with our tree texture that you can rotate around and zoom into with the wasd/arrow keys.</p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Have our model rotate on its own independently of the camera. <em>Hint: you'll need another matrix for this.</em></p> <div id="wasm-example"><!----> <button>Try Tutorial6_uniforms!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial6-uniforms/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial5-textures/" class="prev">
Textures and bind groups
@ -328,6 +328,6 @@ fn vs_main(
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/30.a1f387de.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/30.a1f387de.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Instancing">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/31.6f9d8284.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/31.6f9d8284.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -183,7 +183,7 @@ fn vs_main(
out.clip_position = camera.view_proj * model_matrix * vec4&lt;f32&gt;(model.position, 1.0);
return out;
}
</code></pre></div><p>With all that done, we should have a forest of trees!</p> <p><img src="/learn-wgpu/assets/img/forest.5c5cf3ad.png" alt="./forest.png"></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Modify the position and/or rotation of the instances every frame.</p> <div id="wasm-example"><!----> <button>Try Tutorial7_instancing!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial7-instancing/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>With all that done, we should have a forest of trees!</p> <p><img src="/learn-wgpu/assets/img/forest.5c5cf3ad.png" alt="./forest.png"></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Modify the position and/or rotation of the instances every frame.</p> <div id="wasm-example"><!----> <button>Try Tutorial7_instancing!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial7-instancing/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial6-uniforms/" class="prev">
Uniform buffers and a 3d camera
@ -192,6 +192,6 @@ fn vs_main(
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/31.6f9d8284.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/31.6f9d8284.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="The Depth Buffer">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/28.93966b96.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/28.93966b96.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -122,7 +122,7 @@
stencil_ops<span class="token punctuation">:</span> <span class="token class-name">None</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>And that's all we have to do! No shader code needed! If you run the application, the depth issues will be fixed.</p> <p><img src="/learn-wgpu/assets/img/forest_fixed.a77f70f6.png" alt="forest_fixed.png"></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Since the depth buffer is a texture, we can sample it in the shader. Because it's a depth texture, we'll have to use the <code>sampler_comparison</code> uniform type and the <code>textureSampleCompare</code> function instead of <code>sampler</code>, and <code>sampler2D</code> respectively. Create a bind group for the depth texture (or reuse an existing one), and render it to the screen.</p> <div id="wasm-example"><!----> <button>Try Tutorial8_depth!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial8-depth/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>And that's all we have to do! No shader code needed! If you run the application, the depth issues will be fixed.</p> <p><img src="/learn-wgpu/assets/img/forest_fixed.a77f70f6.png" alt="forest_fixed.png"></p> <h2 id="challenge"><a href="#challenge" class="header-anchor">#</a> Challenge</h2> <p>Since the depth buffer is a texture, we can sample it in the shader. Because it's a depth texture, we'll have to use the <code>sampler_comparison</code> uniform type and the <code>textureSampleCompare</code> function instead of <code>sampler</code>, and <code>sampler2D</code> respectively. Create a bind group for the depth texture (or reuse an existing one), and render it to the screen.</p> <div id="wasm-example"><!----> <button>Try Tutorial8_depth!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial8-depth/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial7-instancing/" class="prev">
Instancing
@ -131,6 +131,6 @@
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/28.93966b96.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/28.93966b96.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Model Loading">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/23.e16260ad.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/23.e16260ad.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -422,7 +422,7 @@ render_pass<span class="token punctuation">.</span><span class="token function">
</code></pre></div><p>The code in <code>lib.rs</code> will change accordingly.</p> <div class="language-rust extra-class"><pre class="language-rust"><code>render_pass<span class="token punctuation">.</span><span class="token function">set_vertex_buffer</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token keyword">self</span><span class="token punctuation">.</span>instance_buffer<span class="token punctuation">.</span><span class="token function">slice</span><span class="token punctuation">(</span><span class="token punctuation">..</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
render_pass<span class="token punctuation">.</span><span class="token function">set_pipeline</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>render_pipeline<span class="token punctuation">)</span><span class="token punctuation">;</span>
render_pass<span class="token punctuation">.</span><span class="token function">draw_model_instanced</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>obj_model<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">..</span><span class="token keyword">self</span><span class="token punctuation">.</span>instances<span class="token punctuation">.</span><span class="token function">len</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token keyword">u32</span><span class="token punctuation">,</span> <span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>camera_bind_group<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><div id="wasm-example"><!----> <button>Try Tutorial9_models!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial9-models/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><div id="wasm-example"><!----> <button>Try Tutorial9_models!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial9-models/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial8-depth/" class="prev">
The Depth Buffer
@ -431,6 +431,6 @@ render_pass<span class="token punctuation">.</span><span class="token function">
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/23.e16260ad.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/23.e16260ad.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Sources">
<meta property="og:type" content="website">
@ -19,11 +19,11 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/40.8f1c5e70.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/40.8f1c5e70.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="inner"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/learn-wgpu/" class="home-link router-link-active"><!----> <span class="site-name">Learn Wgpu</span></a> <div class="links"><!----> <div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div></div></div></header> <div class="sidebar-mask"></div> <div class="docs-layout"><aside class="sidebar"><!----> <ul class="sidebar-links"><li><a href="/learn-wgpu/" aria-current="page" class="sidebar-link">Introduction</a></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Beginner</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/learn-wgpu/beginner/tutorial1-window/" class="sidebar-link">Dependencies and the window</a></li><li><a href="/learn-wgpu/beginner/tutorial2-surface/" class="sidebar-link">The Surface</a></li><li><a href="/learn-wgpu/beginner/tutorial3-pipeline/" class="sidebar-link">The Pipeline</a></li><li><a href="/learn-wgpu/beginner/tutorial4-buffer/" class="sidebar-link">Buffers and Indices</a></li><li><a href="/learn-wgpu/beginner/tutorial5-textures/" class="sidebar-link">Textures and bind groups</a></li><li><a href="/learn-wgpu/beginner/tutorial6-uniforms/" class="sidebar-link">Uniform buffers and a 3d camera</a></li><li><a href="/learn-wgpu/beginner/tutorial7-instancing/" class="sidebar-link">Instancing</a></li><li><a href="/learn-wgpu/beginner/tutorial8-depth/" class="sidebar-link">The Depth Buffer</a></li><li><a href="/learn-wgpu/beginner/tutorial9-models/" class="sidebar-link">Model Loading</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Intermediate</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/learn-wgpu/intermediate/tutorial10-lighting/" class="sidebar-link">Working with Lights</a></li><li><a href="/learn-wgpu/intermediate/tutorial11-normals/" class="sidebar-link">Normal Mapping</a></li><li><a href="/learn-wgpu/intermediate/tutorial12-camera/" class="sidebar-link">A Better Camera</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Showcase</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>News</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="sources"><a href="#sources" class="header-anchor">#</a> Sources</h1> <ul><li>https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-shading/diffuse-lambertian-shading</li> <li>http://jimmiejohnsson84.me/pages/rendering_pbr.html</li></ul></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <!----> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/40.8f1c5e70.js" defer></script>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="inner"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/learn-wgpu/" class="home-link router-link-active"><!----> <span class="site-name">Learn Wgpu</span></a> <div class="links"><!----> <div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div></div></div></header> <div class="sidebar-mask"></div> <div class="docs-layout"><aside class="sidebar"><!----> <ul class="sidebar-links"><li><a href="/learn-wgpu/" aria-current="page" class="sidebar-link">Introduction</a></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Beginner</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/learn-wgpu/beginner/tutorial1-window/" class="sidebar-link">Dependencies and the window</a></li><li><a href="/learn-wgpu/beginner/tutorial2-surface/" class="sidebar-link">The Surface</a></li><li><a href="/learn-wgpu/beginner/tutorial3-pipeline/" class="sidebar-link">The Pipeline</a></li><li><a href="/learn-wgpu/beginner/tutorial4-buffer/" class="sidebar-link">Buffers and Indices</a></li><li><a href="/learn-wgpu/beginner/tutorial5-textures/" class="sidebar-link">Textures and bind groups</a></li><li><a href="/learn-wgpu/beginner/tutorial6-uniforms/" class="sidebar-link">Uniform buffers and a 3d camera</a></li><li><a href="/learn-wgpu/beginner/tutorial7-instancing/" class="sidebar-link">Instancing</a></li><li><a href="/learn-wgpu/beginner/tutorial8-depth/" class="sidebar-link">The Depth Buffer</a></li><li><a href="/learn-wgpu/beginner/tutorial9-models/" class="sidebar-link">Model Loading</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Intermediate</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/learn-wgpu/intermediate/tutorial10-lighting/" class="sidebar-link">Working with Lights</a></li><li><a href="/learn-wgpu/intermediate/tutorial11-normals/" class="sidebar-link">Normal Mapping</a></li><li><a href="/learn-wgpu/intermediate/tutorial12-camera/" class="sidebar-link">A Better Camera</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Showcase</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>News</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="sources"><a href="#sources" class="header-anchor">#</a> Sources</h1> <ul><li>https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-shading/diffuse-lambertian-shading</li> <li>http://jimmiejohnsson84.me/pages/rendering_pbr.html</li></ul></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <!----> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/40.8f1c5e70.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Working with Lights">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/15.84e6424a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/15.84e6424a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -640,7 +640,7 @@ let specular_color = specular_strength * light.color;
let half_dir = normalize(view_dir + light_dir);
let specular_strength = pow(max(dot(in.world_normal, half_dir), 0.0), 32.0);
</code></pre></div><p>It's hard to tell the difference, but here are the results.</p> <p><img src="/learn-wgpu/assets/img/half_dir.bbcc23b8.png" alt="./half_dir.png"></p> <div id="wasm-example"><!----> <button>Try Tutorial10_lighting!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial10-lighting/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>It's hard to tell the difference, but here are the results.</p> <p><img src="/learn-wgpu/assets/img/half_dir.bbcc23b8.png" alt="./half_dir.png"></p> <div id="wasm-example"><!----> <button>Try Tutorial10_lighting!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial10-lighting/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/beginner/tutorial9-models/" class="prev">
Model Loading
@ -649,6 +649,6 @@ let specular_strength = pow(max(dot(in.world_normal, half_dir), 0.0), 32.0);
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/15.84e6424a.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/15.84e6424a.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Normal Mapping">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/16.64e800c9.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/16.b46265b1.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -359,6 +359,12 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
is_normal_map<span class="token punctuation">:</span> <span class="token keyword">bool</span><span class="token punctuation">,</span> <span class="token comment">// NEW!</span>
<span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token class-name">Result</span><span class="token operator">&lt;</span><span class="token keyword">Self</span><span class="token operator">&gt;</span> <span class="token punctuation">{</span>
<span class="token comment">// ...</span>
<span class="token comment">// NEW!</span>
<span class="token keyword">let</span> format <span class="token operator">=</span> <span class="token keyword">if</span> is_normal_map <span class="token punctuation">{</span>
<span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureFormat</span><span class="token punctuation">::</span><span class="token class-name">Rgba8Unorm</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureFormat</span><span class="token punctuation">::</span><span class="token class-name">Rgba8UnormSrgb</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">let</span> texture <span class="token operator">=</span> device<span class="token punctuation">.</span><span class="token function">create_texture</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureDescriptor</span> <span class="token punctuation">{</span>
label<span class="token punctuation">,</span>
size<span class="token punctuation">,</span>
@ -366,12 +372,9 @@ fn fs_main(in: VertexOutput) -&gt; @location(0) vec4&lt;f32&gt; {
sample_count<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
dimension<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureDimension</span><span class="token punctuation">::</span><span class="token constant">D2</span><span class="token punctuation">,</span>
<span class="token comment">// UPDATED!</span>
format<span class="token punctuation">:</span> <span class="token keyword">if</span> is_normal_map <span class="token punctuation">{</span>
<span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureFormat</span><span class="token punctuation">::</span><span class="token class-name">Rgba8Unorm</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureFormat</span><span class="token punctuation">::</span><span class="token class-name">Rgba8UnormSrgb</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
format<span class="token punctuation">,</span>
usage<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">TEXTURE_BINDING</span> <span class="token operator">|</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">TextureUsages</span><span class="token punctuation">::</span><span class="token constant">COPY_DST</span><span class="token punctuation">,</span>
view_formats<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// ...</span>
@ -483,7 +486,7 @@ render_pass<span class="token punctuation">.</span><span class="token function">
<span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>camera_bind_group<span class="token punctuation">,</span>
<span class="token operator">&amp;</span><span class="token keyword">self</span><span class="token punctuation">.</span>light_bind_group<span class="token punctuation">,</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>That gives us something like this.</p> <p><img src="/learn-wgpu/assets/img/debug_material.b374492b.png" alt=""></p> <p>You can find the textures I use in the Github Repository.</p> <div id="wasm-example"><!----> <button>Try Tutorial11_normals!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial11-normals/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>That gives us something like this.</p> <p><img src="/learn-wgpu/assets/img/debug_material.b374492b.png" alt=""></p> <p>You can find the textures I use in the Github Repository.</p> <div id="wasm-example"><!----> <button>Try Tutorial11_normals!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial11-normals/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/intermediate/tutorial10-lighting/" class="prev">
Working with Lights
@ -492,6 +495,6 @@ render_pass<span class="token punctuation">.</span><span class="token function">
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/16.64e800c9.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/16.b46265b1.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="A Better Camera">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/29.872bafe5.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.143159cd.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/29.872bafe5.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/19.75b95072.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -381,7 +381,7 @@
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>With that, we should be able to move our camera wherever we want.</p> <p><img src="/learn-wgpu/assets/img/screenshot.4f5740bc.png" alt="./screenshot.png"></p> <div id="wasm-example"><!----> <button>Try Tutorial12_camera!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial12-camera/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>With that, we should be able to move our camera wherever we want.</p> <p><img src="/learn-wgpu/assets/img/screenshot.4f5740bc.png" alt="./screenshot.png"></p> <div id="wasm-example"><!----> <button>Try Tutorial12_camera!</button></div> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/intermediate/tutorial12-camera/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/intermediate/tutorial11-normals/" class="prev">
Normal Mapping
@ -390,6 +390,6 @@
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/29.872bafe5.js" defer></script><script src="/learn-wgpu/assets/js/19.143159cd.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/29.872bafe5.js" defer></script><script src="/learn-wgpu/assets/js/19.75b95072.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Procedural Terrain">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/21.0d1e41d4.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/21.0d1e41d4.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -134,7 +134,7 @@ fn gen_terrain(
gen_terrain(global_invocation_id)
</code></pre></div><p>If you want learn more about workgroups <a href="https://www.w3.org/TR/WGSL/#compute-shader-workgroups" target="_blank" rel="noopener noreferrer">check out the docs<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p></div> <p>TODO:</p> <ul><li>Note changes to <code>create_render_pipeline</code></li> <li>Mention <code>swizzle</code> feature for cgmath</li> <li>Compare workgroups and workgroups sizes to nested for loops
<ul><li>Maybe make a diagram in blender?</li></ul></li> <li>Change to camera movement speed</li></ul></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <!----> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/21.0d1e41d4.js" defer></script>
<ul><li>Maybe make a diagram in blender?</li></ul></li> <li>Change to camera movement speed</li></ul></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <!----> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/21.0d1e41d4.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Update to 0.12!">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/41.f2ce7221.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/41.f2ce7221.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -61,7 +61,7 @@ I needed to do was add a padding field:</p> <div class="language-rust extra-clas
breaks glob imports (aka. <code>use anyhow::*</code>), I had to switch qualified
imports and uses (ie. <code>anyhow::Result</code>). This was mostly an issue on my
build scripts for some of the showcase examples.</p> <p>The main tutorial examples weren't affected, and the changes are minor, so
if you're curious feel free to look at the repo.</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
if you're curious feel free to look at the repo.</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/news/0.13/" class="prev">
Update to 0.13!
@ -70,6 +70,6 @@ if you're curious feel free to look at the repo.</p></div> <footer class="page-e
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/41.f2ce7221.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/41.f2ce7221.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Update to 0.13!">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/42.9444bcb9.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/42.9444bcb9.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -58,7 +58,7 @@ output_buffer<span class="token punctuation">.</span><span class="token function
<span class="token punctuation">}</span>
output_buffer<span class="token punctuation">.</span><span class="token function">unmap</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>You can explore the reasoning for the change to <code>map_async</code> in <a href="https://github.com/gfx-rs/wgpu/pull/2698" target="_blank" rel="noopener noreferrer">this PR<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <p>Another thing to note is that presentation modes need to match what the surface supports. You can get a list of supported modes from <a href="https://docs.rs/wgpu/latest/wgpu/struct.Surface.html#method.get_supported_modes" target="_blank" rel="noopener noreferrer">Surface::get_surface_modes()<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <p>As always, let me know if I missed anything in the migration process. You can open an issue/submit a PR on the <a href="https://github.com/sotrh/learn-wgpu" target="_blank" rel="noopener noreferrer">Learn Wgpu repo<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>!</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>You can explore the reasoning for the change to <code>map_async</code> in <a href="https://github.com/gfx-rs/wgpu/pull/2698" target="_blank" rel="noopener noreferrer">this PR<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <p>Another thing to note is that presentation modes need to match what the surface supports. You can get a list of supported modes from <a href="https://docs.rs/wgpu/latest/wgpu/struct.Surface.html#method.get_supported_modes" target="_blank" rel="noopener noreferrer">Surface::get_surface_modes()<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>.</p> <p>As always, let me know if I missed anything in the migration process. You can open an issue/submit a PR on the <a href="https://github.com/sotrh/learn-wgpu" target="_blank" rel="noopener noreferrer">Learn Wgpu repo<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>!</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/news/0.14/" class="prev">
Update to 0.14!
@ -67,6 +67,6 @@ output_buffer<span class="token punctuation">.</span><span class="token function
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/42.9444bcb9.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/42.9444bcb9.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Update to 0.14!">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/43.e076a900.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/43.e076a900.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -32,7 +32,7 @@
alpha_mode<span class="token punctuation">:</span> <span class="token namespace">wgpu<span class="token punctuation">::</span></span><span class="token class-name">CompositeAlphaMode</span><span class="token punctuation">::</span><span class="token class-name">Auto</span><span class="token punctuation">,</span> <span class="token comment">// NEW!</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</code></pre></div><h2 id="winit-updated"><a href="#winit-updated" class="header-anchor">#</a> Winit updated</h2> <p>Winit has been updated to version &quot;0.27&quot; so if you build on linux you may need to update some of your packages:</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> libfontconfig libfontconfig1-dev
</code></pre></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/showcase/alignment/" class="prev">
Memory Layout in WGSL
@ -41,6 +41,6 @@
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/43.e076a900.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/43.e076a900.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="News (Pre 0.12)">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/32.552c49b8.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/17.a06f58e2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/32.552c49b8.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/17.a06f58e2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -54,11 +54,11 @@ surface<span class="token punctuation">.</span><span class="token function">conf
</code></pre></div><ol start="2"><li>The <code>request_device</code> method now returns a <code>(Device, Queue)</code> tuple. This means that you can borrow the <code>Queue</code> mutably while using the <code>Device</code> immutably. Because of this change, submitting <code>CommandBuffer</code>s to the queue uses the <code>submit</code> method on the <code>Queue</code> directly.</li></ol> <div class="language-rust extra-class"><pre class="language-rust"><code><span class="token keyword">self</span><span class="token punctuation">.</span>queue<span class="token punctuation">.</span><span class="token function">submit</span><span class="token punctuation">(</span><span class="token operator">&amp;</span><span class="token punctuation">[</span>
encoder<span class="token punctuation">.</span><span class="token function">finish</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><ol start="3"><li>The <code>create</code> method on <code>Surface</code> takes in any struct that implements the <code>HasRawWindow</code> trait, instead of a <code>RawWindowHandle</code>. This means that the <code>raw-window-handle = &quot;0.3&quot;</code> line in <code>Cargo.toml</code> is no longer needed.</li></ol> <p>I don't know if this is a change from 0.4, but you use <code>wgpu = &quot;0.4&quot;</code> line in dependencies instead of the <code>[dependencies.wgpu]</code> as wgpu will determine the best back end for you.</p> <h2 id="new-recent-articles"><a href="#new-recent-articles" class="header-anchor">#</a> New/Recent Articles</h2> <div><ul><li><a></a></li><li><a></a></li><li><a></a></li><li><a></a></li><li><a></a></li></ul></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><ol start="3"><li>The <code>create</code> method on <code>Surface</code> takes in any struct that implements the <code>HasRawWindow</code> trait, instead of a <code>RawWindowHandle</code>. This means that the <code>raw-window-handle = &quot;0.3&quot;</code> line in <code>Cargo.toml</code> is no longer needed.</li></ol> <p>I don't know if this is a change from 0.4, but you use <code>wgpu = &quot;0.4&quot;</code> line in dependencies instead of the <code>[dependencies.wgpu]</code> as wgpu will determine the best back end for you.</p> <h2 id="new-recent-articles"><a href="#new-recent-articles" class="header-anchor">#</a> New/Recent Articles</h2> <div><ul><li><a></a></li><li><a></a></li><li><a></a></li><li><a></a></li><li><a></a></li></ul></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/news/0.12/" class="prev">
Update to 0.12!
</a></span> <!----></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/32.552c49b8.js" defer></script><script src="/learn-wgpu/assets/js/17.a06f58e2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/32.552c49b8.js" defer></script><script src="/learn-wgpu/assets/js/17.a06f58e2.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Memory Layout in WGSL">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/45.9a1f2d9a.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/45.9a1f2d9a.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/22.42d34407.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/24.deb3c0a2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -48,7 +48,7 @@ AlignOf(S) = max(AlignOfMember(S, M1), ... , AlignOfMember(S, Mn))
|
= note: source type: `LightUniform` (256 bits)
= note: target type: `_::{closure#0}::TypeWithoutPadding` (192 bits)
</code></pre></div><h2 id="additional-resources"><a href="#additional-resources" class="header-anchor">#</a> Additional resources</h2> <p>If you're looking for more information check out the <a href="https://gist.github.com/teoxoy/936891c16c2a3d1c3c5e7204ac6cd76c" target="_blank" rel="noopener noreferrer">write-up<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> by @teoxoy.</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><h2 id="additional-resources"><a href="#additional-resources" class="header-anchor">#</a> Additional resources</h2> <p>If you're looking for more information check out the <a href="https://gist.github.com/teoxoy/936891c16c2a3d1c3c5e7204ac6cd76c" target="_blank" rel="noopener noreferrer">write-up<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> by @teoxoy.</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/showcase/compute/" class="prev">
Compute Example: Tangents and Bitangents
@ -57,6 +57,6 @@ AlignOf(S) = max(AlignOfMember(S, M1), ... , AlignOfMember(S, Mn))
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/45.9a1f2d9a.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/45.9a1f2d9a.js" defer></script>
</body>
</html>

@ -7,7 +7,7 @@
<meta name="generator" content="VuePress 1.9.7">
<meta name="description" content="">
<meta property="article:modified_time" content="2023-01-28T19:26:06.000Z">
<meta property="article:modified_time" content="2023-02-02T17:52:36.000Z">
<meta property="og:site_name" content="Learn Wgpu">
<meta property="og:title" content="Compute Example: Tangents and Bitangents">
<meta property="og:type" content="website">
@ -19,7 +19,7 @@
<meta name="twitter:data1" content="Benjamin Hansen">
<meta name="twitter:creator" content="https://twitter.com/sotrh760">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.7203a39a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/22.42d34407.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.7f9295ff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.e36cff55.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.5b54f24c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.64e800c9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.50af6d13.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.143159cd.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.bdb394de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.471ae32b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.3264ef66.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.af68cb86.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.5de252c2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.a1365c71.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.9362517c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.7af96606.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.d5cd2553.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.44d9508f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.b5ee9446.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.d50daa42.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.6742c156.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.e8616e35.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.46abb0d8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.31707f23.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.37c883f3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.84aa3e80.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.379d3cff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.c31da686.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.7109993e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.708853e8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.9d3288eb.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.c7e6df4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.a935a89c.js">
<link rel="preload" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css" as="style"><link rel="preload" href="/learn-wgpu/assets/js/app.cab34c5a.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/14.ae52f492.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/22.42d34407.js" as="script"><link rel="preload" href="/learn-wgpu/assets/js/24.deb3c0a2.js" as="script"><link rel="prefetch" href="/learn-wgpu/assets/js/0.ca1c2622.js"><link rel="prefetch" href="/learn-wgpu/assets/js/10.9a8aaf99.js"><link rel="prefetch" href="/learn-wgpu/assets/js/11.5eb307d2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/12.a1c0e722.js"><link rel="prefetch" href="/learn-wgpu/assets/js/15.84e6424a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/16.b46265b1.js"><link rel="prefetch" href="/learn-wgpu/assets/js/17.a06f58e2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/18.db314664.js"><link rel="prefetch" href="/learn-wgpu/assets/js/19.75b95072.js"><link rel="prefetch" href="/learn-wgpu/assets/js/2.b40c0774.js"><link rel="prefetch" href="/learn-wgpu/assets/js/20.7d43cf4e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/21.0d1e41d4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/23.e16260ad.js"><link rel="prefetch" href="/learn-wgpu/assets/js/25.a612b130.js"><link rel="prefetch" href="/learn-wgpu/assets/js/26.4e4ba6a9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/27.15fb3eff.js"><link rel="prefetch" href="/learn-wgpu/assets/js/28.93966b96.js"><link rel="prefetch" href="/learn-wgpu/assets/js/29.872bafe5.js"><link rel="prefetch" href="/learn-wgpu/assets/js/3.e386129f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/30.a1f387de.js"><link rel="prefetch" href="/learn-wgpu/assets/js/31.6f9d8284.js"><link rel="prefetch" href="/learn-wgpu/assets/js/32.552c49b8.js"><link rel="prefetch" href="/learn-wgpu/assets/js/33.fc371e11.js"><link rel="prefetch" href="/learn-wgpu/assets/js/34.8e3a54f7.js"><link rel="prefetch" href="/learn-wgpu/assets/js/35.c4600f02.js"><link rel="prefetch" href="/learn-wgpu/assets/js/36.75118dac.js"><link rel="prefetch" href="/learn-wgpu/assets/js/37.4abf0071.js"><link rel="prefetch" href="/learn-wgpu/assets/js/38.7f1be385.js"><link rel="prefetch" href="/learn-wgpu/assets/js/39.5c1b2b6b.js"><link rel="prefetch" href="/learn-wgpu/assets/js/4.6845899f.js"><link rel="prefetch" href="/learn-wgpu/assets/js/40.8f1c5e70.js"><link rel="prefetch" href="/learn-wgpu/assets/js/41.f2ce7221.js"><link rel="prefetch" href="/learn-wgpu/assets/js/42.9444bcb9.js"><link rel="prefetch" href="/learn-wgpu/assets/js/43.e076a900.js"><link rel="prefetch" href="/learn-wgpu/assets/js/44.1fffcec3.js"><link rel="prefetch" href="/learn-wgpu/assets/js/45.9a1f2d9a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/46.62b4be7a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/47.5bfa960c.js"><link rel="prefetch" href="/learn-wgpu/assets/js/48.f25bea4d.js"><link rel="prefetch" href="/learn-wgpu/assets/js/49.1b1db5fe.js"><link rel="prefetch" href="/learn-wgpu/assets/js/5.7b0bd849.js"><link rel="prefetch" href="/learn-wgpu/assets/js/50.805e0ff4.js"><link rel="prefetch" href="/learn-wgpu/assets/js/51.dc7fc8f2.js"><link rel="prefetch" href="/learn-wgpu/assets/js/52.b36ae93a.js"><link rel="prefetch" href="/learn-wgpu/assets/js/53.717d25bc.js"><link rel="prefetch" href="/learn-wgpu/assets/js/54.c1e23291.js"><link rel="prefetch" href="/learn-wgpu/assets/js/55.74ea0bea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/56.7c288c91.js"><link rel="prefetch" href="/learn-wgpu/assets/js/57.9e8c4f3e.js"><link rel="prefetch" href="/learn-wgpu/assets/js/58.a830f268.js"><link rel="prefetch" href="/learn-wgpu/assets/js/6.35ad3e49.js"><link rel="prefetch" href="/learn-wgpu/assets/js/7.4d795aea.js"><link rel="prefetch" href="/learn-wgpu/assets/js/8.4a300570.js"><link rel="prefetch" href="/learn-wgpu/assets/js/9.f5d923c8.js">
<link rel="stylesheet" href="/learn-wgpu/assets/css/1.styles.a09ac8f8.css">
</head>
<body>
@ -124,7 +124,7 @@
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
flat_triangle_map<span class="token punctuation">.</span><span class="token function">extend</span><span class="token punctuation">(</span>t_list<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></div><p>I ultimately decided against this method as it was more complicated, and I haven't had time to benchmark it to see if it's faster than the simple method.</p> <h2 id="results"><a href="#results" class="header-anchor">#</a> Results</h2> <p>The tangents and bitangents are now getting calculated correctly and on the GPU!</p> <p><img src="/learn-wgpu/assets/img/results.7918efc1.png" alt="./results.png"></p> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/showcase/compute/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">1/28/2023, 7:26:06 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
</code></pre></div><p>I ultimately decided against this method as it was more complicated, and I haven't had time to benchmark it to see if it's faster than the simple method.</p> <h2 id="results"><a href="#results" class="header-anchor">#</a> Results</h2> <p>The tangents and bitangents are now getting calculated correctly and on the GPU!</p> <p><img src="/learn-wgpu/assets/img/results.7918efc1.png" alt="./results.png"></p> <div class="auto-github-link"><a href="https://github.com/sotrh/learn-wgpu/tree/master/code/showcase/compute/" target="_blank" rel="noopener noreferrer">Check out the code!</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">Last Updated: </span> <span class="time">2/2/2023, 5:52:36 PM</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/learn-wgpu/showcase/pong/" class="prev">
Pong
@ -133,6 +133,6 @@
</a>
</span></p></div> </main></div></div><div class="global-ui"><!----></div></div>
<script src="/learn-wgpu/assets/js/app.7203a39a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/22.42d34407.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
<script src="/learn-wgpu/assets/js/app.cab34c5a.js" defer></script><script src="/learn-wgpu/assets/js/14.ae52f492.js" defer></script><script src="/learn-wgpu/assets/js/22.42d34407.js" defer></script><script src="/learn-wgpu/assets/js/24.deb3c0a2.js" defer></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save