@@ -723,6 +723,57 @@ <h3 id="building-blocks"><a href="https://github.com/bonsairobo/building-blocks"
723723when doing large edits and working with large maps:</ p >
724724< p > < img src ="https://rust-gamedev.github.io/posts/newsletter-015/voxel-mapper.gif " alt ="Terraforming demo " /> </ p >
725725< p > Join < a href ="https://discord.gg/CnTNjwb "> Building Blocks's Discord server</ a > .</ p >
726+ < h3 id ="rust-gpu-v0-1 "> < a href ="https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.1 "> Rust GPU v0.1</ a > < a class ="anchor " href ="#rust-gpu-v0-1 " aria-hidden ="true "> #</ a >
727+ </ h3 >
728+ < p > < img src ="https://rust-gamedev.github.io/posts/newsletter-015/rustgpu.jpg " alt ="Rust GPU Sky " />
729+ < em > Sky example in Rust GPU</ em > </ p >
730+ < p > < a href ="https://github.com/EmbarkStudios/rust-gpu "> Rust GPU</ a > is a project backed by < a href ="https://www.embark-studios.com/ "> Embark Studios</ a >
731+ to make Rust a first-class language and ecosystem for building GPU code.</ p >
732+ < p > Although still in very early stages of development,
733+ < a href ="https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.1 "> Rust GPU released v0.1 in October</ a > ,
734+ and has already garnered over 2000 stars on Github.
735+ Currently, compiling and running very simple shaders
736+ works, and a significant portion of the core library also compiles. While things
737+ like if-statements and while-loops are working, many things aren't implemented yet.
738+ For example, for-loops, iterators and match/switch aren't supported yet. That
739+ means that while being technically usable, Rust GPU is far from being
740+ production-ready.</ p >
741+ < p > The motivation behind the project:</ p >
742+ < blockquote >
743+ < p > Historically in games, GPU programming has been done through writing either
744+ HLSL, or to a lesser extent GLSL. These are simple programming languages that
745+ have evolved along with rendering APIs over the years. However, as game engines
746+ have evolved, these languages have failed to provide mechanisms for dealing with
747+ large codebases, and have generally stayed behind the curve compared to other
748+ programming languages.</ p >
749+ < p > In part this is because it's a niche language for a niche market, and in part
750+ this has been because the industry as a whole has sunk quite a lot of time and
751+ effort into the status quo. While over-all better alternatives to both languages
752+ exist, none of them are in a place to replace HLSL or GLSL. Either because they
753+ are vendor locked, or because they don't support the traditional graphics
754+ pipeline. Examples of this include CUDA and OpenCL. And while attempts have been
755+ made to create language in this space, none of them have gained any notable
756+ traction in the gamedev community.</ p >
757+ </ blockquote >
758+ < p > The code for the sky example above:</ p >
759+ < pre style ="background-color:#2b303b; ">
760+ < code > < span style ="color:#c0c5ce; "> #[</ span > < span style ="color:#bf616a; "> spirv</ span > < span style ="color:#c0c5ce; "> (entry = "</ span > < span style ="color:#a3be8c; "> fragment</ span > < span style ="color:#c0c5ce; "> ")]
761+ </ span > < span style ="color:#b48ead; "> pub fn </ span > < span style ="color:#8fa1b3; "> main_fs</ span > < span style ="color:#c0c5ce; "> (</ span > < span style ="color:#bf616a; "> input</ span > < span style ="color:#c0c5ce; "> : Input<Vec4>, </ span > < span style ="color:#b48ead; "> mut </ span > < span style ="color:#bf616a; "> output</ span > < span style ="color:#c0c5ce; "> : Output<Vec4>) {
762+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> dir: Vec3 = input.</ span > < span style ="color:#96b5b4; "> load</ span > < span style ="color:#c0c5ce; "> ().</ span > < span style ="color:#96b5b4; "> truncate</ span > < span style ="color:#c0c5ce; "> ();
763+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> cs_pos = Vec4(dir.</ span > < span style ="color:#d08770; "> 0</ span > < span style ="color:#c0c5ce; "> , -dir.</ span > < span style ="color:#d08770; "> 1</ span > < span style ="color:#c0c5ce; "> , </ span > < span style ="color:#d08770; "> 1.0</ span > < span style ="color:#c0c5ce; "> , </ span > < span style ="color:#d08770; "> 1.0</ span > < span style ="color:#c0c5ce; "> );
764+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> ws_pos = {
765+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> p = clip_to_world.</ span > < span style ="color:#96b5b4; "> mul_vec4</ span > < span style ="color:#c0c5ce; "> (cs_pos);
766+ p.</ span > < span style ="color:#96b5b4; "> truncate</ span > < span style ="color:#c0c5ce; "> () / p.</ span > < span style ="color:#d08770; "> 3
767+ </ span > < span style ="color:#c0c5ce; "> };
768+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> dir = (ws_pos - eye_pos).</ span > < span style ="color:#96b5b4; "> normalize</ span > < span style ="color:#c0c5ce; "> ();
769+ </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> color = </ span > < span style ="color:#96b5b4; "> sky</ span > < span style ="color:#c0c5ce; "> (dir, sun_pos); </ span > < span style ="color:#65737e; "> // evaluate Preetham sky model
770+ </ span > < span style ="color:#c0c5ce; "> output.</ span > < span style ="color:#96b5b4; "> store</ span > < span style ="color:#c0c5ce; "> (color.</ span > < span style ="color:#96b5b4; "> extend</ span > < span style ="color:#c0c5ce; "> (</ span > < span style ="color:#d08770; "> 0.0</ span > < span style ="color:#c0c5ce; "> ))
771+ }
772+ </ span > </ code > </ pre >
773+ < p > < em > Discussions:
774+ < a href ="https://reddit.com/r/rust/comments/jg056t/introducing_rustgpu_v01 "> /r/rust</ a > ,
775+ < a href ="https://news.ycombinator.com/item?id=24858172 "> Hacker News</ a > ,
776+ < a href ="https://twitter.com/repi/status/1319274584915365888 "> Twitter</ a > </ em > </ p >
726777< h3 id ="gfx-rs "> < a href ="https://github.com/gfx-rs/gfx "> gfx-rs</ a > < a class ="anchor " href ="#gfx-rs " aria-hidden ="true "> #</ a >
727778</ h3 >
728779< p > gfx-rs support for D3D has been improved. < a href ="https://github.com/kvark "> @kvark</ a > landed a few critical fixes
@@ -958,57 +1009,6 @@ <h3 id="proton-5-13-1"><a href="https://github.com/ValveSoftware/Proton">Proton<
9581009< p > Documentation for building Proton is available on < a href ="https://github.com/ValveSoftware/Proton "> Github</ a > .
9591010Further documentation on Media Converter and its source code is available
9601011on the module's < a href ="https://github.com/ValveSoftware/Proton/tree/proton_5.13/media-converter "> repository</ a > </ p >
961- < h3 id ="rust-gpu-v0-1 "> < a href ="https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.1 "> Rust GPU v0.1</ a > < a class ="anchor " href ="#rust-gpu-v0-1 " aria-hidden ="true "> #</ a >
962- </ h3 >
963- < p > < img src ="https://rust-gamedev.github.io/posts/newsletter-015/rustgpu.jpg " alt ="Rust GPU Sky " />
964- < em > Sky example in Rust GPU</ em > </ p >
965- < p > < a href ="https://github.com/EmbarkStudios/rust-gpu "> Rust GPU</ a > is a project backed by < a href ="https://www.embark-studios.com/ "> Embark Studios</ a >
966- to make Rust a first-class language and ecosystem for building GPU code.</ p >
967- < p > Although still in very early stages of development,
968- < a href ="https://github.com/EmbarkStudios/rust-gpu/releases/tag/v0.1 "> Rust GPU released v0.1 in October</ a > ,
969- and has already garnered over 2000 stars on Github.
970- Currently, compiling and running very simple shaders
971- works, and a significant portion of the core library also compiles. While things
972- like if-statements and while-loops are working, many things aren't implemented yet.
973- For example, for-loops, iterators and match/switch aren't supported yet. That
974- means that while being technically usable, Rust GPU is far from being
975- production-ready.</ p >
976- < p > The motivation behind the project:</ p >
977- < blockquote >
978- < p > Historically in games, GPU programming has been done through writing either
979- HLSL, or to a lesser extent GLSL. These are simple programming languages that
980- have evolved along with rendering APIs over the years. However, as game engines
981- have evolved, these languages have failed to provide mechanisms for dealing with
982- large codebases, and have generally stayed behind the curve compared to other
983- programming languages.</ p >
984- < p > In part this is because it's a niche language for a niche market, and in part
985- this has been because the industry as a whole has sunk quite a lot of time and
986- effort into the status quo. While over-all better alternatives to both languages
987- exist, none of them are in a place to replace HLSL or GLSL. Either because they
988- are vendor locked, or because they don't support the traditional graphics
989- pipeline. Examples of this include CUDA and OpenCL. And while attempts have been
990- made to create language in this space, none of them have gained any notable
991- traction in the gamedev community.</ p >
992- </ blockquote >
993- < p > The code for the sky example above:</ p >
994- < pre style ="background-color:#2b303b; ">
995- < code > < span style ="color:#c0c5ce; "> #[</ span > < span style ="color:#bf616a; "> spirv</ span > < span style ="color:#c0c5ce; "> (entry = "</ span > < span style ="color:#a3be8c; "> fragment</ span > < span style ="color:#c0c5ce; "> ")]
996- </ span > < span style ="color:#b48ead; "> pub fn </ span > < span style ="color:#8fa1b3; "> main_fs</ span > < span style ="color:#c0c5ce; "> (</ span > < span style ="color:#bf616a; "> input</ span > < span style ="color:#c0c5ce; "> : Input<Vec4>, </ span > < span style ="color:#b48ead; "> mut </ span > < span style ="color:#bf616a; "> output</ span > < span style ="color:#c0c5ce; "> : Output<Vec4>) {
997- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> dir: Vec3 = input.</ span > < span style ="color:#96b5b4; "> load</ span > < span style ="color:#c0c5ce; "> ().</ span > < span style ="color:#96b5b4; "> truncate</ span > < span style ="color:#c0c5ce; "> ();
998- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> cs_pos = Vec4(dir.</ span > < span style ="color:#d08770; "> 0</ span > < span style ="color:#c0c5ce; "> , -dir.</ span > < span style ="color:#d08770; "> 1</ span > < span style ="color:#c0c5ce; "> , </ span > < span style ="color:#d08770; "> 1.0</ span > < span style ="color:#c0c5ce; "> , </ span > < span style ="color:#d08770; "> 1.0</ span > < span style ="color:#c0c5ce; "> );
999- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> ws_pos = {
1000- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> p = clip_to_world.</ span > < span style ="color:#96b5b4; "> mul_vec4</ span > < span style ="color:#c0c5ce; "> (cs_pos);
1001- p.</ span > < span style ="color:#96b5b4; "> truncate</ span > < span style ="color:#c0c5ce; "> () / p.</ span > < span style ="color:#d08770; "> 3
1002- </ span > < span style ="color:#c0c5ce; "> };
1003- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> dir = (ws_pos - eye_pos).</ span > < span style ="color:#96b5b4; "> normalize</ span > < span style ="color:#c0c5ce; "> ();
1004- </ span > < span style ="color:#b48ead; "> let</ span > < span style ="color:#c0c5ce; "> color = </ span > < span style ="color:#96b5b4; "> sky</ span > < span style ="color:#c0c5ce; "> (dir, sun_pos); </ span > < span style ="color:#65737e; "> // evaluate Preetham sky model
1005- </ span > < span style ="color:#c0c5ce; "> output.</ span > < span style ="color:#96b5b4; "> store</ span > < span style ="color:#c0c5ce; "> (color.</ span > < span style ="color:#96b5b4; "> extend</ span > < span style ="color:#c0c5ce; "> (</ span > < span style ="color:#d08770; "> 0.0</ span > < span style ="color:#c0c5ce; "> ))
1006- }
1007- </ span > </ code > </ pre >
1008- < p > < em > Discussions:
1009- < a href ="https://reddit.com/r/rust/comments/jg056t/introducing_rustgpu_v01 "> /r/rust</ a > ,
1010- < a href ="https://news.ycombinator.com/item?id=24858172 "> Hacker News</ a > ,
1011- < a href ="https://twitter.com/repi/status/1319274584915365888 "> Twitter</ a > </ em > </ p >
10121012< h2 id ="popular-workgroup-issues-in-github "> Popular Workgroup Issues in Github < a class ="anchor " href ="#popular-workgroup-issues-in-github " aria-hidden ="true "> #</ a >
10131013</ h2 >
10141014<!-- Up to 10 links to interesting issues -->
0 commit comments