diff --git a/content/blog/_index.md b/content/blog/_index.md index e8361a3..58ba92a 100644 --- a/content/blog/_index.md +++ b/content/blog/_index.md @@ -1,5 +1,6 @@ --- title: "Blog" +layout: "list" --- A blog?? \ No newline at end of file diff --git a/content/blog/astra-0.4.0-release.md b/content/blog/astra-0.4.0-release.md new file mode 100644 index 0000000..a07cb5b --- /dev/null +++ b/content/blog/astra-0.4.0-release.md @@ -0,0 +1,11 @@ +--- +title: "Astra 0.4.0 is released!" +date: 2022-05-04 +draft: false +--- + +I'm very sorry about the delay, but a new release of Astra is upon us! + +I have been working hard to get the Flatpak repository working (after some very troubling GPG issues) but the install process is now refined enough that it's a one-click install from the website. I hope Steam Deck users will enjoy the Flatpak, and I plan on making more exciting changes soon - such as Steam Proton support, Steam login, and a proper controller interface :-) + +You can read the full patch notes [here](https://xiv.zone/astra/changelog/0.4.0). Please note that I have pushed a quick bugfix update (0.4.1) for users that might have already downloaded a version of 0.4.0. Linux users are recommended to update as it fixes an issue with case-sensitive filesystems. Astra is now available for Linux (tarball or Flatpak), macOS and Windows, enjoy! diff --git a/content/blog/figure1/figure-review-mari-back.webp b/content/blog/figure1/figure-review-mari-back.webp new file mode 100644 index 0000000..bdfea0a Binary files /dev/null and b/content/blog/figure1/figure-review-mari-back.webp differ diff --git a/content/blog/figure1/figure-review-mari-front.webp b/content/blog/figure1/figure-review-mari-front.webp new file mode 100644 index 0000000..60afeb3 Binary files /dev/null and b/content/blog/figure1/figure-review-mari-front.webp differ diff --git a/content/blog/figure1/figure-review-mari-sega.jpg b/content/blog/figure1/figure-review-mari-sega.jpg new file mode 100644 index 0000000..f3dc3fd Binary files /dev/null and b/content/blog/figure1/figure-review-mari-sega.jpg differ diff --git a/content/blog/figure1/figure-review-mari-side.webp b/content/blog/figure1/figure-review-mari-side.webp new file mode 100644 index 0000000..9a8d11e Binary files /dev/null and b/content/blog/figure1/figure-review-mari-side.webp differ diff --git a/content/blog/figure1/index.md b/content/blog/figure1/index.md new file mode 100644 index 0000000..7566592 --- /dev/null +++ b/content/blog/figure1/index.md @@ -0,0 +1,31 @@ +--- +title: "Figure Review: Mari Makinami Illustrious (Sega LPM)" +date: 2021-09-09 +draft: false +tags: +- Figures +- Review +--- + +Hello again! This is my figure review of the [Mari Figure from Sega](https://myfigurecollection.net/item/945032). She was released around 2020 as a prize +figure celebrating the launch of "Evangelion 3.0+1.0", before it got pushed back to 2021. I +didn't preorder her on your typical reseller website but instead got her a little bit earlier by buying her on [buyee.jp](https://buyee.jp). + +**Edit:** I have a new camera and I retook all of the photos. They should look much better, enjoy! + +![Front view of Mari](figure-review-mari-front.webp) +![Side view of Mari](figure-review-mari-side.webp) +![Backside view of Mari](figure-review-mari-back.webp) + +This is one ofthe few times that I think the figure looks much better than it does in real life than the photos provided by the company: + +![The photo Sega provided](figure-review-mari-sega.jpg) +(Seriously?? Why doesn't she have _any_ background? I understand she is a prize figure but come on.) + +The materials are surprisingly decent and it has a nice premium feel to it, but she doesn't end up looking too glossy. The paint +job is also well done on mine, even on and behind the glasses. In my photos, you can see the glasses have the whole thing filled in +with transparent plastic, which is something not a whole lot of ther Mari figures do. Unfortunately, this figure has a structural issue on the hair, which required me to glue it back on (hopefully I got it looking "just right"!) + +The pose is excellent as well, it captures the "playful" aspect of her character and it doesn't look "stiff" like many Eva figures fall into the trap of. The base has a multicolored effect to it, and is very reflective as you can see in the photos. Unfortunately, it also collects fingerprints. + +I'm pretty happy with the figure's quality and sculpt despite it being a prize figure. It's earned it's place as one of my favorite Mari figures! diff --git a/content/blog/figure2/box.webp b/content/blog/figure2/box.webp new file mode 100644 index 0000000..1b30a7f Binary files /dev/null and b/content/blog/figure2/box.webp differ diff --git a/content/blog/figure2/cool-back.webp b/content/blog/figure2/cool-back.webp new file mode 100644 index 0000000..564738e Binary files /dev/null and b/content/blog/figure2/cool-back.webp differ diff --git a/content/blog/figure2/deluxe-back.webp b/content/blog/figure2/deluxe-back.webp new file mode 100644 index 0000000..7ef1644 Binary files /dev/null and b/content/blog/figure2/deluxe-back.webp differ diff --git a/content/blog/figure2/deluxe-face.webp b/content/blog/figure2/deluxe-face.webp new file mode 100644 index 0000000..2b503d5 Binary files /dev/null and b/content/blog/figure2/deluxe-face.webp differ diff --git a/content/blog/figure2/deluxe-front.webp b/content/blog/figure2/deluxe-front.webp new file mode 100644 index 0000000..1aade7a Binary files /dev/null and b/content/blog/figure2/deluxe-front.webp differ diff --git a/content/blog/figure2/dusties.webp b/content/blog/figure2/dusties.webp new file mode 100644 index 0000000..dbe2b15 Binary files /dev/null and b/content/blog/figure2/dusties.webp differ diff --git a/content/blog/figure2/index.md b/content/blog/figure2/index.md new file mode 100644 index 0000000..9cfd884 --- /dev/null +++ b/content/blog/figure2/index.md @@ -0,0 +1,50 @@ +--- +title: "Figure Review: YoRHa No. 2 Type B Illustrious (FLARE Reissue)" +date: 2022-05-03 +draft: false +tags: +- Figures +- Review +--- + +Today we're reviewing the Flare reissue of the YoRHa No. 2 Type B released by Square Enix, a company that despite being very, very controlling of their merchandise has the absolute worst online store ever. This isn't just a single case, you can read online where people have similiar experiences with Square Enix's online store. + +## The Buying Process + +Buying through the (USA) Square Enix store is usually more expensive than what you can find elsewhere, and they take **forever to ship**. Not only this, but coincidentally, **the day after I received the figure** - a _better_, and _cheaper_ (overall) one showed up in the preorder listings on AmiAmi. Excuse me? Better as in this is the normally-$220-deluxe version. For **$129.** Of course I'm picking that up! Despite the price tag difference, and a couple of accessories the two figures are virtually the same, so i'll be using them interchangably between photos. + +## The Figure + +Despite the horrendous ordering process, the figure itself is very well put together! Starting with the base, which is has a transparent, mirror-like appearance like in this photograph provided on the box: + +![advertising](box.webp) + +Wait a second! No it isn't! + +![reality](reality.webp) + +Huh?? Is this false advertising on the _packaging?_ Now I'm not sure if this is common for figures (as I tend to buy cheaper, and most figures I buy don't show off the base on the box) but this is a pretty egregious error for sure. Despite this, I actually prefer the nice, matte black base that actually comes with the figure. + +Be aware that this is a weird kind of plastic that will almost certainly attach itself to every dust particle in your vicinity as shown in this photo: + +![dusties](dusties.webp) + +The sculpt itself is quite nice, and there's quite a bit of detail on every inch of this thing. The materials even feel different depending on which piece it's trying to emulate, like the skin _feels softer_ somehow which is pretty impressive (<--- dead giveaway that I don't own a lot of expensive figures.) + +The Pod included in the deluxe version is pretty cool, and even posable. 2B herself is also ""posable"" as in you can twist her arms around, which is required to even put the sword on. + +![POD](pod.webp) +![back](cool-back.webp) + +And here's a couple of more photos, specificially on the deluxe version and it's exclusive self-destructing feature: + +![front](deluxe-front.webp) +![back](deluxe-back.webp) + +And one more thing, the face mask is removable as well: + +![face off](deluxe-face.webp) + +Overall, I definitely recommend this figure as a fellow 2B-fan. However, please **do not buy from the Square Enix Store**. You can find this figure elsewhere, usually for much much cheaper and will ship to you faster (even though that makes zero sense.) + +![sword](sword.webp) diff --git a/content/blog/figure2/pod.webp b/content/blog/figure2/pod.webp new file mode 100644 index 0000000..fbc10d7 Binary files /dev/null and b/content/blog/figure2/pod.webp differ diff --git a/content/blog/figure2/reality.webp b/content/blog/figure2/reality.webp new file mode 100644 index 0000000..90c9022 Binary files /dev/null and b/content/blog/figure2/reality.webp differ diff --git a/content/blog/figure2/sword.webp b/content/blog/figure2/sword.webp new file mode 100644 index 0000000..94f0698 Binary files /dev/null and b/content/blog/figure2/sword.webp differ diff --git a/content/blog/img/IMG_0246.jpg b/content/blog/img/IMG_0246.jpg new file mode 100644 index 0000000..7cc123b Binary files /dev/null and b/content/blog/img/IMG_0246.jpg differ diff --git a/content/blog/img/JezVKVk.mp4 b/content/blog/img/JezVKVk.mp4 new file mode 100644 index 0000000..78ab505 Binary files /dev/null and b/content/blog/img/JezVKVk.mp4 differ diff --git a/content/blog/img/PrismEditor_BT44VWksFY.png b/content/blog/img/PrismEditor_BT44VWksFY.png new file mode 100644 index 0000000..58158a8 Binary files /dev/null and b/content/blog/img/PrismEditor_BT44VWksFY.png differ diff --git a/content/blog/img/PrismEditor_Okvgr9cuI3.png b/content/blog/img/PrismEditor_Okvgr9cuI3.png new file mode 100644 index 0000000..3a63623 Binary files /dev/null and b/content/blog/img/PrismEditor_Okvgr9cuI3.png differ diff --git a/content/blog/img/Vulkan-Portability.svg b/content/blog/img/Vulkan-Portability.svg new file mode 100644 index 0000000..94352c4 --- /dev/null +++ b/content/blog/img/Vulkan-Portability.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/img/YAnFAQ140M.png b/content/blog/img/YAnFAQ140M.png new file mode 100644 index 0000000..dac3c82 Binary files /dev/null and b/content/blog/img/YAnFAQ140M.png differ diff --git a/content/blog/img/kaddressbook-settings.png b/content/blog/img/kaddressbook-settings.png new file mode 100644 index 0000000..51e4a13 Binary files /dev/null and b/content/blog/img/kaddressbook-settings.png differ diff --git a/content/blog/img/kdemarble-faraway.png b/content/blog/img/kdemarble-faraway.png new file mode 100644 index 0000000..cac6781 Binary files /dev/null and b/content/blog/img/kdemarble-faraway.png differ diff --git a/content/blog/img/kdemarble-fixed.png b/content/blog/img/kdemarble-fixed.png new file mode 100644 index 0000000..3c47f2f Binary files /dev/null and b/content/blog/img/kdemarble-fixed.png differ diff --git a/content/blog/img/masto-screen.png b/content/blog/img/masto-screen.png new file mode 100644 index 0000000..a8eb543 Binary files /dev/null and b/content/blog/img/masto-screen.png differ diff --git a/content/blog/img/prism-on-mac-vulkan.png b/content/blog/img/prism-on-mac-vulkan.png new file mode 100644 index 0000000..3bbdaa1 Binary files /dev/null and b/content/blog/img/prism-on-mac-vulkan.png differ diff --git a/content/blog/img/vkconfig-mac.png b/content/blog/img/vkconfig-mac.png new file mode 100644 index 0000000..1c57d5e Binary files /dev/null and b/content/blog/img/vkconfig-mac.png differ diff --git a/content/blog/move-to-sourcehut.md b/content/blog/move-to-sourcehut.md new file mode 100644 index 0000000..4d993a7 --- /dev/null +++ b/content/blog/move-to-sourcehut.md @@ -0,0 +1,19 @@ +--- +title: "Move to Sourcehut" +date: 2022-03-01 +draft: false +tags: +- GitHub +- sourcehut +--- + +Recently I've moved pretty much all of my repositories over to sourcehut! This is a huge change, as I haven't changed +my primary code hosting provider, Github, since 2-3 years ago. + +**Edit:** There is a follow up to my sourcehut migration located [here]({{}})! + +You'll notice all of the site's links now point to sourcehut repositories, and there should be no more +broken links (sorry!) Also, my Github is not going away, since I still like to contribute to +Github projects. So, I decided to keep hosting mirrors of my projects there and I'm still accepting PRs as well - +but if possible the issues/todos and the wikis are moving to sourcehut as well. You can see a good example for +[astra](https://sr.ht/~redstrate/astra). diff --git a/content/blog/moving-away-from-github.md b/content/blog/moving-away-from-github.md new file mode 100644 index 0000000..f2fec7c --- /dev/null +++ b/content/blog/moving-away-from-github.md @@ -0,0 +1,20 @@ +--- +title: "Moving Away from GitHub" +tags: +- GitHub +- sourcehut +draft: false +date: 2022-06-23 +--- + +Over the past few hours I did some serious cleaning up on my [GitHub account](https://github.com/redstrate), I basically removed every single original repository I had. I still need GitHub in order to contribute to some projects, so my forks are kept. + +For people trying to find my missing repositories, I added a profile README to direct people to my sourcehut instead. + +There were many reasons why I ditched GitHub, a couple are detailed below: +* I disliked the “social media” features that were just getting more and more prominent. I didn’t really care for these and I just saw it as introducing bloat and spam to the platform (cue small PRs just for a one line README change just to get a contribution award). +* [GitHub Copilot](https://drewdevault.com/2022/06/23/Copilot-GPL-washing.html). Enough said. +* GitHub is not [free software](https://drewdevault.com/2022/03/29/free-software-free-infrastructure.html). +* Complexity in working, (this is my own fault) but having three remotes to worry about was getting in my way. + +I will also be retiring [git.ryne.moe](https://git.ryne.moe/) (as a code archive) in order to reduce friction while working. I plan on making changes so I can have it pull my changes on sourcehut automatically, but that will come later. If you're wondering why did I choose sourcehut over my own GitLab, it's mostly because I don't want to lose everything due to my own incompetence ;-) diff --git a/content/blog/moving-to-sourcehut-followup.md b/content/blog/moving-to-sourcehut-followup.md new file mode 100644 index 0000000..2373314 --- /dev/null +++ b/content/blog/moving-to-sourcehut-followup.md @@ -0,0 +1,36 @@ +--- +title: "Follow-up: Move to Sourcehut" +date: 2022-04-26 +draft: false +tags: +- GitHub +- sourcehut +--- + +This is a follow-up post to my blog post detailing the changes I've made to how my source code is hosted. Basically, I'm trying to +move away from GitHub for my primary code hosting to a (in my opinion, better suited for me) platform. After some deliberation, I +ultimately landed on sourcehut, and plan to detail the benefits I've gained, and the things I've losted. Hint, it works pretty well, +so I'm excited to dig into my new workflow :-) + +First, I wanted to cover the topic of migrating stuff to sourcehut - which is probably what you're going to do if you had a bunch +of repositories hosted elsewhere (Github, Gitlab, etc) like me. Unfortunately, **sourcehut's HTTPS migration breaks your repository**. +Yes, I should get around to reporting this, but it's pretty bad. Basically, it looks like it clones your repository fine, but once +you actually try to do any git operations it fails to pickup on the refs. Very weird, but I ended up writing my own sourcehut +migration scripts here. This also includes remote fixups, because I push to multiple mirrors for most of the repositories I maintain. + +I also want to cover sourcehut's website functionality, compared to GitHub and GitLab. It's important to note that this is extremely +biased, as I do not like GitHub's features basically trending towards being more of a "social media site". The addition of the "For you" +tab pretty much solidifies my idea that this is what it's going to end up being, so there's that. sourcehut on the other hand, is +a programmer oriented first and foremost. This is most obvious in the UI, which is textbook definition of "minimally functional" - +this is not a bad thing to me, which is clear if you're on this website right now. + +Despite this, there is still a certain charm to how simple this website functions - and browsing the sourcecode is very similiar +to minimal git interfaces like cgit and gitweb which I very much enjoy. However, it's at this point where sourcehut starts exceeding +GitHub in certain aspects that I very much appreciate. An example of this is the Projects feature - which allows you to organize +source code repositories, mailing lists, issue trackers and stuff into a concise page. Here's an example of what it looks like +for Astra: + +This is extremely useful as it allows me to organize my projects into what they are - projects. Compare this to GitHub where +repository **is** a project and in my opinion this makes way more sense to me. Unfortunately, I have not tried out most of +sourcehut's features such as the mailing lists, issue trackers, build server etc but I'm already impressed by the speed of the +site and the ease of use. diff --git a/content/blog/opening-kaddressbook-addresses-with-kde-marble.md b/content/blog/opening-kaddressbook-addresses-with-kde-marble.md new file mode 100644 index 0000000..631586b --- /dev/null +++ b/content/blog/opening-kaddressbook-addresses-with-kde-marble.md @@ -0,0 +1,55 @@ +--- +title: "Opening KAddressBook Addresses With KDE Marble" +date: 2022-02-01 +draft: false +tags: +- KDE +--- + +This is probably the most specific use case I'll ever post on this blog :-p I noticed whenever I click an address in [KAddressBook](https://apps.kde.org/kaddressbook/), it opens it in [OpenStreetMap](https://www.openstreetmap.org/) in your web browser by default. Huh? + +**Edit:** Recent Plasma versions now have the ability to select KDE Marble as the default maps application, and KAddressBook dropped support for setting the "Show Address" function like as pictured below. However, KDE Marble still lacks a way to properly decode addresses, making this functionality useless still. I will further update the article once I find a workaround, or I contribute something upstream. + +But I learned that [KDE Marble](https://marble.kde.org/) exists, a native KDE app that's basically just FOSS Google Earth (the cool old version, I think it's called [Google Earth Pro](https://www.google.com/earth/versions/#earth-pro)?) Anyway, for some reason KAddressBook cannot open addresses with KDE Marble out of the box. Weird, right? So, I thought this would be a cool scripting exercise, and this is the solution I came up with: + +1. We set the "Show Address" to open an "External Application", this is where we'll call our python script `geo.py`: + +![KAddressBook settings](/articles/img/kaddressbook-settings.png) + +The full command is: + +```marble --latlon "$(python geo.py ""%s %l %r %c"")" --distance 0 --map "earth/openstreetmap/openstreetmap.dgml"``` + +2. Then we have a python script, using [GeoPy](https://geopy.readthedocs.io/en/stable/) and [Nominatim](https://nominatim.org/) (a free service run by OpenStreetMap, perfect since it's free, FOSS, and most importantly has reasonable rate limits for our personal use) + + +``` +from geopy.geocoders import Nominatim +from geopy import Point +import sys + +args = " ".join(sys.argv[1:]) + +geolocator = Nominatim(user_agent="kdemarble") +loc = geolocator.geocode(" ".join(sys.argv[1:])) +p = Point(loc.latitude, loc.longitude) +print(p.format(deg_char='°', min_char='\'', sec_char='')) +``` + +3. Then, simply click an address in KAddressBook and it'll open up in KDE Marble! + +## More Details + +This is actually quite interesting, as I would think KAddressBook would have this functionality out of the box, however it is more work than you might think it is. First, KAddressBook stores the address of your contacts literally, like a string - it stores the Address, Region, and Location separately (this is the `%s`, `%l`, `%r` variables as shown above). However, KDE Marble only accepts longitude and latitude as command line arguments. + +So this is where Nominatim comes in, which as said before - is a service run by OpenStreetMap. It's API is extremely simple, which is perfect. I originally tried to only do this in Shell and CURL, but it turned out to be much easier just to use GeoPy and Python. + +![KDE Marble without the extra arguments](/articles/img/kdemarble-faraway.png) + +Then, you'll notice if you don't add any extra arguments to Marble, it'll open up super far away and also in a weird default view that's not suitable for viewing addresses. Luckily, the developers already added some nice arguments to allow us to change this default behavior: + +` --distance 0 --map "earth/openstreetmap/openstreetmap.dgml"` + +This will set the initial distance to "0 km" and also changes the map view to OpenStreetMap, perfect! + +![KDE Marble in it's ideal view for streets](/articles/img/kdemarble-fixed.png) diff --git a/content/blog/prism-changes-feb-april-2021.md b/content/blog/prism-changes-feb-april-2021.md new file mode 100644 index 0000000..6e24ac1 --- /dev/null +++ b/content/blog/prism-changes-feb-april-2021.md @@ -0,0 +1,94 @@ +--- +title: "Prism Changelog: Feburary and April 2021" +date: 2021-04-04 +draft: false +tags: +- Prism +--- + +These two months contain some pretty big changes I made to Prism, following a short hiatus from the project. These include some pretty important changes to the project moving forward and I hope to keep documenting these in this nice and concise, visual way in the future! Also before you ask, this is Feburary _and_ April, I only made one small commit in March which is why it's not Feburary _to_ April. + +If you've never heard of Prism before, it's my ultimate graphics study project that is the culmination of everything I've learned in graphics development so far. It is built upon years of hard effort/learning and also extremely valuable help from multiple people in the graphics community. You can find the complete source code and even more information on it's [Github repository](https://www.github.com/redstrate/prism). + +### Vulkan is now moving to being a first-class backend + +The Vulkan backend is moving very quickly to reach feature parity soon with the Metal version, but now it is +fully usuable for most tasks on Windows and Linux! The main roadblock right now is implementing the last of the +functionality required for IBL and some other graphical features. + +![Screenshot of the material editor](/articles/img/PrismEditor_BT44VWksFY.png) +_This is the Material editor running on Vulkan, on Windows_ + +### SDL2 is the new default windowing system for Windows and Linux + +Previously, I had hand-written Win32 code and XCB/XLib code for the Windows and Linux backends respectively. However, I had run into a few issues: + +On Windows, my code was buggy and error prone. When getting around to implementing stuff like gamepads, multi-window support, I knew I didn't want to support this backend any longer. + +On the Linux side, there was an even bigger issue - [Wayland](https://wayland.freedesktop.org/)! Wayland is the new display and window server protocol on Linux, and I wanted to support it. However, I had no interest in supporting pretty much two divergent Linux backends - one for X11 and one for Wayland. I had enough trouble supporting ~4 windowing backends and just duplicating the work on Linux seems too much. + +Thus this is where using SDL2 became the perfect solution - I could have the _same_ code for Windows and Linux and it can run on Win32, Wayland and X11. That's pretty much three birds with one [industry-standard stone](https://youtu.be/MeMPCSqQ-34), which is pretty good! + +Right now SDL is used for Windows and Linux, and I have no plans on supporting it on macOS at the moment (even though it theroetically could). That's just because the macOS backend is the most feature complete, and the SDL2 backend is notably missing automatic theme detection as shown in the Windows screenshot featured above. + +### Windows now has multiviewports! + +{{< youtube 1WGRgIb9WJI >}} + +This is a pretty and clear nice benefit from using the SDL backend, because now it gets multiviewport support for free! If you've never seen this [dear imgui feature before](https://github.com/ocornut/imgui/wiki/Multi-Viewports), it's really cool to see it in action. It allows regular imgui windows to be dragged outside of the main window, and enables some really cool workflows and usecases you would normally see in other GUI toolkits like Qt and GTK. + +### The new render target system + +Before if you wanted to render to another window, static image, viewport you were required to create a whole new renderer instance. This was bad design for a multitude of reasons - duplicated work, resources and lack of proper cohesion or synchronization. This was because a single renderer instance only supported rendering to one target. Now everything is reworked and I can use just one renderer instance for the whole engine, even down to the tooling! + +![Screenshot of two viewports open at the same time](/articles/img/PrismEditor_Okvgr9cuI3.png) +_This is two editor viewports running at the same time in two different windows, something not possible before under the old system._ + +The new render target system is also the backbone of the new cross platform dear imgui multi-viewport support (try saying that 5x fast!) The API is also extremely easy to use: + +``` +auto render_target = renderer->allocate_render_target({100, 100}); +``` + +Simply pass an extent, and you are returned a handle to the render target that you use for subsequent +resizing, destruction, etc. When you want to render, simply pass it to the `render` function: + +``` +renderer->render(commandbuffer, scene, render_target, -1); +``` + +### Shader live editing + +As part of my on-going shader editing effort, I have finally implemented a form of shader editing you can perform in-engine: + +This allows you edit basic shaders, but at the moment only the sky shader is using this new system. More shaders will be supported in the future, including editing the shader templates used by my material system. Here's an example of registering a live reload shader: + +``` +pipelineInfo.shaders.vertex_src = register_shader("sky.vert"); +... +associate_shader_reload("sky.vert", [this] { + createSkyPipeline(); +}); +``` + +Not only that, but it's built on top of preexisting GFX and Shader Compiler APIs, meaning that as long as your backend supports both it will happen transparently! This is fully supported by the Vulkan and Metal backends. + +### New class and variable naming style + +I have finally decided on a new, standard naming style for everything in Prism. It is pretty much the same style that the C++ STL uses, and I thought it would be the best going forward: + +``` +auto imgui = std::make_unique(); +``` + +Now everything is `snake_case`, following the function naming I'm already using. Private member variables are now changed to remove any underscores. I also used this chance to _finally_ move every class that I own into the `prism` namespace to reduce naming conflicts, which happen more often than you think (believe it or not, a lot of operating systems have a `Rectangle` structure!) It is still an ongoing process, but a lot of the major classes are already refactored. + +### What's Next? + +In the short term I want to keep working on polishing the Vulkan stuff, so I can eventually start working on some cooler things like VR support. I also plan to keep working on the example app more, so it can serve as a better showcase. + +Some longer-term goals include DirectX support, an Android version, and eventually some form of raytracing/global illumination. I also want some easily accessible online documentation, leaveraging the pre-exsiting doxy docs that are included in the source code already. + +Very soon I plan on working on the CI stuff some more so releases can be automatically built and published which would really help testing this on other people's machines (and also stop me from breaking other platform builds!) + +**Edit:** I removed some old Github issue links that are now dead. Sorry! diff --git a/content/blog/prism-changes-may-march-2022.md b/content/blog/prism-changes-may-march-2022.md new file mode 100644 index 0000000..a02313f --- /dev/null +++ b/content/blog/prism-changes-may-march-2022.md @@ -0,0 +1,67 @@ +--- +title: "Prism Changelog: May 2021 to March 2022" +date: 2022-03-08 +draft: false +tags: +- Prism +--- + +It's uh, been a while since the last Prism changelog :-) Haha, well there's as always a ton of interesting changes to go over! + + + +### To WebGPU and no WebGPU + +If you've been paying attention to [my](https://git.sr.ht/~redstrate/prism/commit/a0d92be759450f09343bb04f4da913ccef505bbd) [recent](https://git.sr.ht/~redstrate/prism/commit/3229c4fa2cbb294e6af18649ce826831cd85eada) [commits](https://git.sr.ht/~redstrate/prism/commit/0a95ee2fa8fbf23ba8b3a17c78d6d3dc35ecfcd9), you'll see that I have done a ton of work to support WebGPU, but now I'm probably going to be reverting those changes - for a [myriad of reasons](https://knockout.chat/thread/21724/37#post-1210400). + +First, I'm not a huge fan of the opininated sense of the WebGPU design at all. From WGSL to weird decisions to omit some common API features such as push/root constants did not mix well with me. Is it weird to say that it actually might be easier to port Prism to WebGL? _Is it?_ + +It wasn't unitl I realized that I'm pulling apart my engine for no good reason just to support WebGPU that I realized it's not worth it. Maybe if I had designed the engine from the start to support it, things would've turned out differently but unfortunately I'm not convinced this is a part of Prism's future. For now, I'm going to refocus my efforts on the usual desktop-class graphics APIs. + +### DirectX12 support has begun + +I recently was able to get a [nice Windows setup going](https://knockout.chat/thread/25747/28#post-1207745), so now DX12 support is going to finally begin. This is one of the last APIs I plan to support officially, so this is exciting. Now I don't have any real excuse to not support this API. + +![Picture of my Linux/Windows desktop](/articles/img/IMG_0246.jpg) + +### Moving away from Objective-C + +In an effort to reduce my usage of Objective-c in the Metal backend, the whole backend is now C++ and uses metal-cpp which is Apple's official C++ wrapper. It works pretty great, and now my static analysis tools work great with it too. + +### Move to sourcehut +Prism now is primarily hosted on sourcehut, with mirrors on Github and ryne.moe. This is a pretty important goal for reducing my need on centralized serivces, and I'll be putting in some work to move off of Github wiki as well - just like I did with astra. + +### Multiple GFX support +There is now support for using more than one GFX backend (although not at the same time), and is now supported by the SDL backend and the offline shader compiler will automatically pick out which shader files to compile for you. This is important, as some platforms are now capable of using more than one. Right now, the priority is as follows: + +``` +DirectX12 -> Metal -> Vulkan -> Dummy +``` + +Of course, this is only if the platform supports those APIs, and it's significally shorter in the real world. And of course, you can override these at runtime with flags like `-vulkan` or `-metal`. + +### Vulkan is now a first-class GFX backend +You've seen that Vulkan has been a focus in the last changelog, but now since then it's now has first-class support for all of the available graphics functions. There's also a slew of renderer changes that exclusively focus around fixing some broken PCSS among other things, in preparation of making a nicer example app. + +Also part of this slew of changes is MoltenVK being fully supported by the Vulkan backend. More is detailed [in the related blog post]({{< ref "the-death-of-gfx" >}}), but we enable the portability subset if detected. + +### Example application available +There's now a real, working example application available +right in the source code repository. This has technically been around since the last changelog but now it's way more involved and focused around recreating some of the nice screenshots in the README. + +{{< rawhtml >}} + + + +{{< /rawhtml >}} + + +### Material system is being reworked +I ripped out the old material system and now it's going to be replaced with something way, way simpler. It was insanely complex, and had really no reason to exist. It was also the cause of a bunch of bugs. + +### Model compiler improvements +The model compiler saw a bunch of improvements recently, as part of it was caused by me actually using it to import models into the example app. Materials are now imported automatically for you, in the future textures will be copied as well but this makes it much easier to actually use this to import more complex scenes. + +Sorry about the really low-level and framework related changes this time around - there's basically no changes in the rendering or core libraries. In the next few months I want to actually use Prism to build something interested, so stay tuned! diff --git a/content/blog/purging-twitter.md b/content/blog/purging-twitter.md new file mode 100644 index 0000000..cf19b1b --- /dev/null +++ b/content/blog/purging-twitter.md @@ -0,0 +1,17 @@ +--- +title: "Purging Twitter" +date: 2022-06-28 +draft: false +--- + +In my series of purging my content on propietary platforms I don't align with anymore, the next on the chopping block is Twitter. Just like GitHub, I have several personal reasons why I'm not supporting Twitter any longer: + +* Focus on alogrithmic discovery as opposed to a simple, linear timeline. +* Supporting NFTs which I don't personally agree with. +* There's advertisements **everywhere**! So many ads! + * What's hilarious is that Twitter Blue (their premium subscription service.... to a multi-billion dollar company that doesn't need more money) doesn't seem to even remove these ads. What?? It only seems to remove ads on other websites. +* There is so much notification spam - which is related to their insistence that they know what you like better than you do - and it's purely just for the usual addiction factor. + +I don't even recieve much traffic on the site and I managed to completely cut off my Twitter addiction over the past couple of years, so I think this is the best time to do this. Right now my Twitter profile is set to private, as I still need it for DMs and my Knockout login, but I plan to completely sunset it sometime next year. If you still wish to read my microblogs, you can follow me from any ActivityPub-compliant service such as Mastodon/Pleroma/Pixelfed, etc at [@redstrate@pyra.sh](https://pyra.sh/redstrate). + +All of my previous tweets are now deleted however there was some Twitter-exclusive artwork that I didn't realize wasn't posted anywhere else, so I did some reorganizing of my [gallery](/gallery)! diff --git a/content/blog/silica-release.md b/content/blog/silica-release.md new file mode 100644 index 0000000..491b8bc --- /dev/null +++ b/content/blog/silica-release.md @@ -0,0 +1,8 @@ +--- +title: "Silica Viewer is now available on the App Store!" +date: 2021-09-15 +draft: false +--- + +"Silica Viewer" just landed on the macOS App Store today! You can check out more information +on it's [dedicated webpage](/silica-viewer). diff --git a/content/blog/the-death-of-gfx.md b/content/blog/the-death-of-gfx.md new file mode 100644 index 0000000..41813ca --- /dev/null +++ b/content/blog/the-death-of-gfx.md @@ -0,0 +1,35 @@ +--- +title: "Vulkan Portability Initiative: The Death of My GFX Abstractions?" +date: 2021-09-12 +draft: false +tags: +- Prism +- Vulkan +- Metal +--- + +In under an hour, I was able to port my already existing Vulkan code from [Prism](/projects/prism) +to Metal using [MoltenVK](https://github.com/KhronosGroup/MoltenVK). Here's a screenshot (very exciting): + +![Screenshot of Prism running on macOS over MoltenVK](/articles/img/prism-on-mac-vulkan.png) + +To clarify, Prism running on macOS is nothing new. In fact, a large portion of the engine was +developed natively on macOS using Metal. Vulkan was actually added after the fact, and since I already had plenty of +Vulkan experience it was no trouble. I initially chose to use Metal natively (over MoltenVK at the time) because the tooling was still too new, and I wanted to learn Metal. However something big has come along since then, the rise of the [Vulkan Portability Initiative](https://www.vulkan.org/portability)! + +![Vulkan Portability Logo](/articles/img/Vulkan-Portability.svg) + +The biggest thing to come out of this is the introduction of _first class macOS support_. If you've used the Vulkan SDK before on macOS, you _must_ give this new version a try. The new Vulkan SDK has an installer that takes cares of everything for you. Even the **Vulkan Configurator works**! This gets you the _same exact experience_ like as if you were developing with Vulkan on Windows or Linux. Yes, even the _Vulkan CMake module works out of the box_, thank you to every developer who worked on this! + +![Screenshot of Vulkan configurator running on macOS](/articles/img/vkconfig-mac.png) + +What does this mean for Prism? .. Not much yet except that it's awesome that it works pretty much of the box. However for any future graphics endaveours for me **I unfortunately won't be supporting Metal anymore**, there just isn't a reason to. I learned as much Metal as I wanted, and the Metal backend fullfilled that purpose. However, there's still a purpose to abstracting GFX away in Prism, _to make way for DirectX support_ :-) + +--- + +By the way, I would be interested to see if anyone develops a Vulkan Portable Subset -> WebGPU translation layer (maybe implementing it as a vulkan driver ala MoltenVK?) This would be amazing, but I have yet to find +anyone interested in doing this. I would be especially interested as I'm not interested in learning _yet another_ API with it's own quirks, and... WSL - ugh. ~~Insert XKCD comic reference here~~ + +--- + +**Edit:** It turns out that I already hit a few snags with MoltenVK (which have [already been solved](https://github.com/KhronosGroup/MoltenVK/pull/1539)) so the Metal backend is restored. My point still stands though, that the future for my enthusiast projects might be only Vulkan. diff --git a/content/blog/trinity-rerelease.md b/content/blog/trinity-rerelease.md new file mode 100644 index 0000000..19088df --- /dev/null +++ b/content/blog/trinity-rerelease.md @@ -0,0 +1,17 @@ +--- +title: "Trinity Re-release" +date: 2021-07-21 +draft: false +--- + +So around 2018 I was busy writing my own Matrix client, as anyone does. It was called Trinity, and it featured a Discord-like interface: + +TODO + +_Note: This is a very old screenshot, and later versions of the client looked much better than this. Unfortunately, I haven't found any later screenshots._ + +This was written in Qt5 and QML, and even though I'm testing this ~3 years later - the codebase will still work! Yes that's right, thats a testament to _my old programming ability_, Qt backwards compatibility, and Matrix's specification conformance. Pretty nice! For some reason, the directory and communities tab doesn't work but I haven't looked into why. + +For historical purposes, it is now archived on my [sourcehut](https://git.sr.ht/~redstrate/trinity), along with it's old [AUR package](https://git.sr.ht/~redstrate/pkgbuilds/tree/main/item/trinity-git/PKGBUILD). You can read more on it's project page. + +**Edit:** I updated the source code links to their new home at sourcehut. diff --git a/themes/red/layouts/_default/list.html b/themes/red/layouts/_default/list.html index 9d176a0..ca4242e 100644 --- a/themes/red/layouts/_default/list.html +++ b/themes/red/layouts/_default/list.html @@ -2,4 +2,35 @@

{{ .Title }}

{{ .Content }} + + + + {{ if in .File.Dir "projects" }} + + + + {{ else }} + + + + {{ end }} + + {{ range .Data.Pages.ByDate.Reverse }} + + + + + + + + {{ end }} +
NameDescriptionYear CreatedTitleSummaryDate
{{ .Title }} + {{ .Summary }} + + {{ if in .File.Dir "projects" }} + {{ .Date.Format " 2006"}} + {{ else }} + + {{ end }} +
{{ end }} diff --git a/themes/red/layouts/shortcodes/rawhtml.html b/themes/red/layouts/shortcodes/rawhtml.html new file mode 100644 index 0000000..520ec17 --- /dev/null +++ b/themes/red/layouts/shortcodes/rawhtml.html @@ -0,0 +1,2 @@ + +{{.Inner}} \ No newline at end of file diff --git a/themes/red/layouts/shortcodes/resource.html b/themes/red/layouts/shortcodes/resource.html new file mode 100644 index 0000000..a01bdea --- /dev/null +++ b/themes/red/layouts/shortcodes/resource.html @@ -0,0 +1,21 @@ +{{ $arg := .Get "page"}} +{{ $name := .Get "name" }} + +{{ $headless := .Site.GetPage $arg }} +{{ $image := ($headless.Resources.ByType "image") }} +{{ with $image }} +{{ range . }} + +{{ if eq .Name $name }} + + +
+{{ $resized := .Resize "x400 webp drawing" }} +{{ .Name }} +
"{{.Name}}" from {{ $headless.Title }}.
+{{ end }} +
+ +{{ end }} + +{{ end }}