====== NervLand: Environment setup & Introduction to Rust ======
* First thing first I need a Rust development environment for that project.
* Downloading rustup from https://www.rust-lang.org/fr/tools/install
* Other installation pacakges available at: https://forge.rust-lang.org/infra/other-installation-methods.html
* To install in a correct folder: set CARGO_HOME=D:\Softs\Cargo
rustup-init.exe
* => rust now installed in **D:/Softs/Cargo**
* Installing the extensions for visual studio code: **rust-analyzer** and **rust**
* Now creating our new **NervLand** git project: **OK**
* Checking out project: $ git clone ssh://git@gitlab.nervtech.org:22002/nerv/nervland.git NervLand/*//*/
* Preparing script to support **nvl_home**: **OK**
* Creating initial rust project: cargo init NervLand
* Now following tutorial on https://sotrh.github.io/learn-wgpu/
* Update .git/config file with content: [core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
autocrlf = false
* Found this page with a lot of resources for game development in Rust: https://arewegameyet.rs/
* ECS library: bevy_ecs or specs
* cf. https://bevy-cheatbook.github.io/
* Documentation for WGSL language: https://www.w3.org/TR/WGSL/
* Documentation to read on Rust: https://doc.rust-lang.org/book/
* Implemented RenderPipeline test tutorial from: https://sotrh.github.io/learn-wgpu/beginner/tutorial3-pipeline/#what-s-a-pipeline
* Working on tutorial https://sotrh.github.io/learn-wgpu/beginner/tutorial5-textures/:
* But I get the ERROR message: 2022-02-21T08:03:06Z ERROR wgpu_hal::dx12::instance] ID3D12Device::CopyDescriptors: Source ranges and dest ranges overlap, which results in
undefined behavior. [ EXECUTION ERROR #653: COPY_DESCRIPTORS_INVALID_RANGES]
error: process didn't exit successfully: `target\debug\nerv_land.exe` (exit code: 1)
* => trying to use the source files from: https://github.com/sotrh/learn-wgpu/tree/master/code/beginner/tutorial5-textures/src
* => **Updating the nvidia drivers** fixed this issue.
* **Note**: it's a good idea to use ''cargo check'' regularly to speed up the development process.
* To build a release version with cargo we use: $ cargo build --release
* Continuing with https://sotrh.github.io/learn-wgpu/beginner/tutorial6-uniforms/: **OK**
* Continuing with https://sotrh.github.io/learn-wgpu/beginner/tutorial7-instancing/: **OK**
* wgpu documentation access: https://docs.rs/wgpu/0.12.0/wgpu/struct.RenderPass.html#method.draw_indexed
* Continuing with https://sotrh.github.io/learn-wgpu/beginner/tutorial8-depth/: **OK**
* Continuing with https://sotrh.github.io/learn-wgpu/beginner/tutorial9-models/: **OK**
* Enabled "Run build script" for rust-analyzer in VSCode with ''"rust-analyzer.cargo.runBuildScripts": true'' in settings.json
* Now I should really read the [[https://doc.rust-lang.org/book/|Rust programming book]]: **OK**
* Written notes at: [[public:books:rust_programming_language:intro|The Rust Programming Language]]
* **Note** Found the [[https://docs.rs/fibers/latest/fibers/|fibers crate for Rust]]: can use this to execute tasks in fibers.
* **Note** Found the [[https://docs.rs/veryfast/0.2.0/veryfast/pool/index.html|veryfast]] crate to build a memory pool allocator (?)
* One thing that is starting to be a pain here is that I canno use a rust brush with syntaxhighlighter4 plugin for dokuwiki lol => So let's see if I can add that myself.
* Add rust brush function in **wiki/lib/plugins/syntaxhighlighter4/dist/syntaxhighlighter.js** at the end of the function list:
/* 63 */
/***/ (function(module, exports, __webpack_require__) {
// This is an extension function to support the rust brush:
'use strict';
var BrushBase = __webpack_require__(22);
var regexLib = __webpack_require__(3).commonRegExp;
function Brush() {
var keywords = 'break case catch class continue ' + 'default delete do else enum export extends false ' + 'for function if implements import in instanceof ' + 'interface let new null package private protected ' + 'static return super switch ' + 'this throw true try typeof var while with yield' + ' any bool declare get module never number public readonly set string'; // TypeScript-specific, everything above is common with JavaScript
this.regexList = [{
regex: regexLib.multiLineDoubleQuotedString,
css: 'string'
}, {
regex: regexLib.multiLineSingleQuotedString,
css: 'string'
}, {
regex: regexLib.singleLineCComments,
css: 'comments'
}, {
regex: regexLib.multiLineCComments,
css: 'comments'
}, {
regex: new RegExp(this.getKeywords(keywords), 'gm'),
css: 'keyword'
}];
this.forHtmlScript(regexLib.scriptScriptTags);
};
Brush.prototype = new BrushBase();
Brush.aliases = ['rust'];
module.exports = Brush;
/***/ })
* And registering that function at the beginning of the file: console.log("Registering rust brush!");
registerBrush(__webpack_require__(63)); // rust
* But that doesn't seem to be enough: maybe we need to "reload" our plugin somehow ?
* Hmmm not quite working: checking if we can modify one of the existing brush. => Nope, no effect either. So let's restart the server then.
* Damn it, still not working! So maybe I really need to refer to a dedicated git project to install the plugin then: let's try that.
* Arrggh... still not working at all. There is something I'm missing here...
* okay so: this is really starting to piss me off now 🤬! I just want a minor change in that source .js file man, come on!
* Fewww.... So in the end this was simply a collection of ''rm -Rf cache/*'' + running in private web page to avoid the cache + restarting the server and all: but now it seem I can finally get that rust brush to start working! Let's try to finalize it.
* => okay, so, not the best parsing yet, but it's not that bad ;-) for a start.
* Added support for rust code snippet in vscode: "CodeRust": {
"prefix": "cccrs",
"body": [
"${1}$0"
]
},
/*//*/
* => Now updating my overall project structure: I'm considering placing everything for Rust in my NervSeed project directly 🤔:
* I could create a rust folder, and store multiple rust workspaces in there (?)
* OK, trying that, starting with an **nvtask** library in there: $ cargo new nvtask --lib
* Running default cargo workspace tests: $ cargo test
* Ignore **target/** folder with .gitignore file: **OK**