Grammar pass
This commit is contained in:
parent
6123690792
commit
6cbc1f795b
28 changed files with 101 additions and 102 deletions
|
@ -10,6 +10,6 @@ I'm very sorry about the delay, but a new release of Astra is upon us!
|
||||||
|
|
||||||
<!--more-->
|
<!--more-->
|
||||||
|
|
||||||
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 :-)
|
I have been working hard to get the Flatpak repository working (after some very troubling GPG issues) but the installation process is now refined enough that it's a one-click installation 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!
|
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!
|
||||||
|
|
|
@ -11,7 +11,7 @@ tags:
|
||||||
Hello and welcome to the first of many "Vulkan Deep Dives" I plan on writing this year. What are these?
|
Hello and welcome to the first of many "Vulkan Deep Dives" I plan on writing this year. What are these?
|
||||||
|
|
||||||
Well to put it simply, there is _a lot_ of Vulkan content on the Internet now. Which is great, but what ends up
|
Well to put it simply, there is _a lot_ of Vulkan content on the Internet now. Which is great, but what ends up
|
||||||
happening is that someone gets knee deep in writing their tutorial and end up losing steam once they get past the
|
happening is that someone gets knee-deep in writing their tutorial and end up losing steam once they get past the
|
||||||
"really basic 90%". This is stuff like initialization (boring), device creation (snooze), render passes (eugh) and pipeline creation (woo?).
|
"really basic 90%". This is stuff like initialization (boring), device creation (snooze), render passes (eugh) and pipeline creation (woo?).
|
||||||
There is a **lot** of these kind of tutorials out there, and I don't want to add to that pile. What I want to do instead, is show
|
There is a **lot** of these kind of tutorials out there, and I don't want to add to that pile. What I want to do instead, is show
|
||||||
you the 10% of your Vulkan renderer, the one that implements these cool techniques! I will also cover how
|
you the 10% of your Vulkan renderer, the one that implements these cool techniques! I will also cover how
|
||||||
|
@ -21,7 +21,7 @@ Today we'll be covering PCSS, or Percentage Close Soft Shadows.
|
||||||
|
|
||||||
## Theory
|
## Theory
|
||||||
|
|
||||||
For most naive soft shadow mapping techniques, there is usually a PCF or other similiar kernel
|
For most naive soft shadow mapping techniques, there is usually a PCF or other similar kernel
|
||||||
applied uniformly to the whole map. This works if the shadows are far away, and not supposed to be
|
applied uniformly to the whole map. This works if the shadows are far away, and not supposed to be
|
||||||
extremely detailed, but as games are becoming more "realistic" and the camera zooms farther and farther in - this becomes an issue.
|
extremely detailed, but as games are becoming more "realistic" and the camera zooms farther and farther in - this becomes an issue.
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ I recommend reading the paper beforehand, as it's an incredibly simple technique
|
||||||
* Use manually adjusted light sizes.
|
* Use manually adjusted light sizes.
|
||||||
|
|
||||||
The first and last points are extremely easy, use a 32-bit floating point depth map, and you must be able to
|
The first and last points are extremely easy, use a 32-bit floating point depth map, and you must be able to
|
||||||
pass another light parameter to your shader. Where it get's interesting is how PCSS actually determines how to make
|
pass another light parameter to your shader. Where it gets interesting is how PCSS actually determines how to make
|
||||||
shadows soft, or hard.
|
shadows soft, or hard.
|
||||||
|
|
||||||
<example PCSS>
|
<example PCSS>
|
||||||
|
@ -63,9 +63,9 @@ in darkness!
|
||||||
Alright, that's enough - we care about soft shadowing. If you remember, the farther away from the object, the softer
|
Alright, that's enough - we care about soft shadowing. If you remember, the farther away from the object, the softer
|
||||||
the shadow should be. Actually, let's call that object the "blocker". PCSS is broken up into these steps:
|
the shadow should be. Actually, let's call that object the "blocker". PCSS is broken up into these steps:
|
||||||
|
|
||||||
* Find the blocker for that pixel/fragment. This is of course, impossible so we get the average.
|
* Find the blocker for that pixel/fragment. This is of course, impossible, so we get the average.
|
||||||
* The search width is dependent on the light size, which is tied to how large your shadow map is.
|
* The search width is dependent on the light size, which is tied to how large your shadow map is.
|
||||||
* If there is something blocking, then we must figure out the proper shadow penumbra, based off of the (average) blocker depth
|
* If there is something blocking, then we must figure out the proper shadow penumbra, based off of the (average) blocker depth,
|
||||||
and then we calculate a proper filter radius.
|
and then we calculate a proper filter radius.
|
||||||
* Pass this new filter radius to PCF, or your favorite kernel .
|
* Pass this new filter radius to PCF, or your favorite kernel .
|
||||||
|
|
||||||
|
@ -76,12 +76,12 @@ And the results are _amazing_, let's take a look at a comparison between hard sh
|
||||||
Just this small change to calculate the blocker average depth gives a ton of realism to the scene, even
|
Just this small change to calculate the blocker average depth gives a ton of realism to the scene, even
|
||||||
when nothing else has changed. However, there is a couple of drawbacks:
|
when nothing else has changed. However, there is a couple of drawbacks:
|
||||||
|
|
||||||
* The PCSS whitepaper only covers sun-type, infinite distance lights. How does PCSS integrate into say, point and spot lights?
|
* The PCSS whitepaper only covers sun-type, infinite distance lights. How does PCSS integrate into say, point and spotlights?
|
||||||
* What is the cost of running PCSS compared to PCF?
|
* What is the cost of running PCSS compared to PCF?
|
||||||
* What is the correct "light size"?
|
* What is the correct "light size"?
|
||||||
|
|
||||||
Unfortunately the PCSS paper only covers light sources that are assumed to be infinitely far away, which is fine
|
Unfortunately the PCSS paper only covers light sources that are assumed to be infinitely far away, which is fine
|
||||||
but this technique is useful for things like spot lights. Thankfully, I have the relevant code below:
|
but this technique is useful for things like spotlights. Thankfully, I have the relevant code below:
|
||||||
|
|
||||||
|
|
||||||
There are a few changes related to removing the parallel plane estimation, and the changes you have to make
|
There are a few changes related to removing the parallel plane estimation, and the changes you have to make
|
||||||
|
@ -99,8 +99,8 @@ However, a word of warning, this is _extremely_ expensive. Let's do some really
|
||||||
|
|
||||||
PCSS is _not_ cheap, and should be used sparingly. If you only apply it to just the main sun lamp in your
|
PCSS is _not_ cheap, and should be used sparingly. If you only apply it to just the main sun lamp in your
|
||||||
scene, it would easily be real-time - but scaling it to every kind of light will easily slow everything down. As shown,
|
scene, it would easily be real-time - but scaling it to every kind of light will easily slow everything down. As shown,
|
||||||
point lights increase your depth samples by 1200%! Of course you might turn down the samples, but imagien having even one more
|
point lights increase your depth samples by 1200%! Of course, you might turn down the samples, but imagien having even one more
|
||||||
point light in your scene. This is a similiar problem with PCF applied to point lights,
|
point light in your scene. This is a similar problem with PCF applied to point lights,
|
||||||
but it is exacerbated with PCSS since we are easily doubling the samples or more.
|
but it is exacerbated with PCSS since we are easily doubling the samples or more.
|
||||||
|
|
||||||
When it comes to light size, it is not physically based but instead another knob or artists.
|
When it comes to light size, it is not physically based but instead another knob or artists.
|
||||||
|
@ -109,5 +109,5 @@ When it comes to light size, it is not physically based but instead another knob
|
||||||
|
|
||||||
PCSS is an extremely easy way to increase realism for your shadows, but at a possibly heavy
|
PCSS is an extremely easy way to increase realism for your shadows, but at a possibly heavy
|
||||||
cost. I highly recommend implementing it into your engine, but definitely watch how many samples
|
cost. I highly recommend implementing it into your engine, but definitely watch how many samples
|
||||||
it's using. Using it for point lights and spot lights result in great
|
it's using. Using it for point lights and spotlights result in great
|
||||||
looking scenery but is still not really possible in real-time.
|
looking scenery but is still not really possible in real-time.
|
|
@ -38,7 +38,7 @@ Logs are very important, but some don't know that you can get more information f
|
||||||
|
|
||||||
Paying attention to shader warnings is also important, as it might point out stuff like missing shader inputs.
|
Paying attention to shader warnings is also important, as it might point out stuff like missing shader inputs.
|
||||||
|
|
||||||
How you enable logs depends on how you compile your shaders. If you use GLSlang, simply get the log out:
|
How you enable logs depends on how you compile your shaders. If you use GLSlang, simply get the log-out:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
```
|
```
|
||||||
|
@ -79,7 +79,7 @@ back out on the host.
|
||||||
|
|
||||||
## Example 1
|
## Example 1
|
||||||
|
|
||||||
Now let's dig into a real-world examples of how to use all of the methods above to our advantage to solve
|
Now let's dig into a real-world examples of how to use all the methods above to our advantage to solve
|
||||||
tough graphics issues. For this first example, lets begin with the most common issue - nothing is displaying on
|
tough graphics issues. For this first example, lets begin with the most common issue - nothing is displaying on
|
||||||
the screen! If you can, run the example code and work through it yourself. If you're new to this, I recommend attempting to find solution first before spoiling yourself.
|
the screen! If you can, run the example code and work through it yourself. If you're new to this, I recommend attempting to find solution first before spoiling yourself.
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ are printed to stdout. As you can see, I already see an issue:
|
||||||
validation error: blah blah
|
validation error: blah blah
|
||||||
```
|
```
|
||||||
|
|
||||||
Alright, so let's dig into the source code and figure out where this error might be coming from. Thankfully, I used object naming
|
Alright, so let's dig into the source code and figure out where this error might be coming from. Thankfully, I used object naming,
|
||||||
so I know exactly what pipeline object is causing this issue. It is on L1221:
|
so I know exactly what pipeline object is causing this issue. It is on L1221:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
|
@ -107,7 +107,7 @@ pipeline.alrisaffa = VK_TRUE;
|
||||||
|
|
||||||
Alright, so we fixed that issue - but it's still black! Now that our program is no longer
|
Alright, so we fixed that issue - but it's still black! Now that our program is no longer
|
||||||
emitting validation errors, our next step is to throw it into RenderDoc - which will capture
|
emitting validation errors, our next step is to throw it into RenderDoc - which will capture
|
||||||
the program's calls and replay them so we can step through it myself.
|
the program's calls and replay them, so we can step through it myself.
|
||||||
|
|
||||||
<renderdoc img>
|
<renderdoc img>
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ RenderDoc a little more closely.
|
||||||
|
|
||||||
This is a much, much more complex example which showcases an example of an issue that can
|
This is a much, much more complex example which showcases an example of an issue that can
|
||||||
only be solved through RenderDoc. Download the example application source code,
|
only be solved through RenderDoc. Download the example application source code,
|
||||||
compile it and you will discover a very obvious graphical artifact:
|
compile it, and you will discover a very obvious graphical artifact:
|
||||||
|
|
||||||
<img1>
|
<img1>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ we're just worrying about a Vulkan implementation here.
|
||||||
|
|
||||||
## How SMAA Works
|
## How SMAA Works
|
||||||
|
|
||||||
Compared to FXAA, SMAA requires extra post processing passes, let's go over all of them and their purpose.
|
Compared to FXAA, SMAA requires extra post-processing passes, let's go over all of them and their purpose.
|
||||||
|
|
||||||
## Implementation
|
## Implementation
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ tags:
|
||||||
---
|
---
|
||||||
|
|
||||||
Culling is an important part of modern graphics, you definitely don't want anything you aren't looking at wasting
|
Culling is an important part of modern graphics, you definitely don't want anything you aren't looking at wasting
|
||||||
valuable resources. Now wait... whats the purpose of doing it ourselves? I think I read somewhere that GPUs will cull
|
valuable resources. Now wait... what's the purpose of doing it ourselves? I think I read somewhere that GPUs will cull
|
||||||
objects itself, and won't try to rasterize them...
|
objects itself, and won't try to rasterize them...
|
||||||
|
|
||||||
## Theory
|
## Theory
|
||||||
|
|
|
@ -21,7 +21,7 @@ will go over more than just that here.
|
||||||
|
|
||||||
When I first attempted to implement transform handles, I _struggled_. Since then, there has
|
When I first attempted to implement transform handles, I _struggled_. Since then, there has
|
||||||
been a few articles going over how to implement transform handles but none of them I really liked,
|
been a few articles going over how to implement transform handles but none of them I really liked,
|
||||||
as I could copy and paste code from them all day but I still don't understand the math behind it.
|
as I could copy and paste code from them all day, but I still don't understand the math behind it.
|
||||||
|
|
||||||
### Theory
|
### Theory
|
||||||
|
|
||||||
|
@ -55,13 +55,13 @@ handling this:
|
||||||
## Graphical Interface
|
## Graphical Interface
|
||||||
|
|
||||||
This is something not strictly graphics related, but I want to point out some common choices
|
This is something not strictly graphics related, but I want to point out some common choices
|
||||||
for building the user interface outside of the viewport.
|
for building the user interface outside the viewport.
|
||||||
|
|
||||||
### Qt
|
### Qt
|
||||||
|
|
||||||
Qt is still a popular choice for building editor programs, for example - Source Filmmaker and the Source 2 SDK.
|
Qt is still a popular choice for building editor programs, for example - Source Filmmaker and the Source 2 SDK.
|
||||||
|
|
||||||
However there is a huge upfront cost related to Qt, it requires a _lot_ of code to get running. Once you do the hard work though,
|
However, there is a huge upfront cost related to Qt, it requires a _lot_ of code to get running. Once you do the hard work though,
|
||||||
it's an extremely robust, supported and battle tested user interface. Performance is almost never an issue, and it supports
|
it's an extremely robust, supported and battle tested user interface. Performance is almost never an issue, and it supports
|
||||||
a lot of platforms out of the box.
|
a lot of platforms out of the box.
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ While "dear imgui" is suited to debug UIs for developers, it tends to fall apart
|
||||||
however it is continuing to keep improving in this regard, especially with the docking branch.
|
however it is continuing to keep improving in this regard, especially with the docking branch.
|
||||||
With enough work, it can get pretty enough too, which you check out in the screenshot thread.
|
With enough work, it can get pretty enough too, which you check out in the screenshot thread.
|
||||||
|
|
||||||
However remember that it is meant for debugging UI's, so including images, icons, among other smaller
|
However, remember that it is meant for debugging UI's, so including images, icons, among other smaller
|
||||||
UI elements are more of an afterthought. For many developers though, that's an okay trade-off for how
|
UI elements are more of an afterthought. For many developers though, that's an okay trade-off for how
|
||||||
easy it is to develop for.
|
easy it is to develop for.
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ the details.
|
||||||
This is something I've been wanting to cover for a long time, because despite still being popular in games, there is very
|
This is something I've been wanting to cover for a long time, because despite still being popular in games, there is very
|
||||||
little information out there on how to accomplish this. For clarity, this is an extension of cubemap-based realtime (or offline) reflections
|
little information out there on how to accomplish this. For clarity, this is an extension of cubemap-based realtime (or offline) reflections
|
||||||
using some kind of probe globally or locally. The main difference is for regular reflections, there is no concept of it occupying
|
using some kind of probe globally or locally. The main difference is for regular reflections, there is no concept of it occupying
|
||||||
any real physical space, it's free-standing and doesn't look correct. For really rough or small reflections, it works okay but
|
any real physical space, it's freestanding and doesn't look correct. For really rough or small reflections, it works okay but
|
||||||
look at how it looks in a watery environment:
|
look at how it looks in a watery environment:
|
||||||
|
|
||||||
And now with parallax-corrected:
|
And now with parallax-corrected:
|
||||||
|
|
|
@ -11,9 +11,9 @@ aliases:
|
||||||
|
|
||||||
Hello again! This is my figure review of the [Mari Figure from Sega](https://myfigurecollection.net/item/945032). <!--more--> She was released around 2020 as a prize
|
Hello again! This is my figure review of the [Mari Figure from Sega](https://myfigurecollection.net/item/945032). <!--more--> 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
|
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).
|
didn't preorder her on your typical reseller website but instead got her a little 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!
|
**Edit:** I have a new camera and I retook all the photos. They should look much better, enjoy!
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
@ -24,10 +24,10 @@ This is one of the few times that I think the figure looks much better than it d
|
||||||

|

|
||||||
(Seriously?? Why doesn't she have _any_ background? I understand she is a prize figure but come on.)
|
(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
|
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
|
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"!)
|
with transparent plastic, which is something not a 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.
|
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!
|
I'm pretty happy with the figure's quality and sculpt despite it being a prize figure. It's earned its place as one of my favorite Mari figures!
|
||||||
|
|
|
@ -9,11 +9,11 @@ aliases:
|
||||||
- /articles/figure2
|
- /articles/figure2
|
||||||
---
|
---
|
||||||
|
|
||||||
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. <!--more--> This isn't just a single case, you can read online where people have similiar experiences with Square Enix's online store.
|
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. <!--more--> This isn't just a single case, you can read online where people have similar experiences with Square Enix's online store.
|
||||||
|
|
||||||
## The Buying Process
|
## 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.
|
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
|
## The Figure
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ The Pod included in the deluxe version is pretty cool, and even posable. 2B hers
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
And here's a couple of more photos, specificially on the deluxe version and it's exclusive self-destructing feature:
|
And here's a couple of more photos, specificially on the deluxe version, and it's exclusive self-destructing feature:
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
@ -47,6 +47,6 @@ And one more thing, the face mask is removable as well:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
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.)
|
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.)
|
||||||
|
|
||||||

|

|
||||||
|
|
|
@ -20,13 +20,13 @@ it has a nice photo on the back, and a nice background. After taking her out, yo
|
||||||
|
|
||||||
<picture of accessories>
|
<picture of accessories>
|
||||||
|
|
||||||
Yes, for some reason all of the bits on the bottom are seperated. I'm no figure maker, but it's
|
Yes, for some reason all the bits on the bottom are seperated. I'm no figure maker, but it's
|
||||||
really strange that they were removable in the first place. I guess if someone doesn't want them on the figure sure, but
|
really strange that they were removable in the first place. I guess if someone doesn't want them on the figure sure, but
|
||||||
they're small enough in the first place and _they still have imprints on the sand_, I'm just really
|
they're small enough in the first place, and _they still have imprints on the sand_, I'm just really
|
||||||
confused why they weren't just glued on. Anyway, the figure itself:
|
confused why they weren't just glued on. Anyway, the figure itself:
|
||||||
|
|
||||||
The figure is really well sculpted, and I like the material _a lot_. It's of those weirdly
|
The figure is really well sculpted, and I like the material _a lot_. It's of those weirdly
|
||||||
textured PVCs they like to use in more expensive figures, that feels like it's _soft_ almost but it's clearly just plastic.
|
textured PVCs they like to use in more expensive figures, that feels like it's _soft_ almost, but it's clearly just plastic.
|
||||||
Just like other figures of this caliber, they take some liberties in the proportions of Ryza, namely making her more "human sized" and
|
Just like other figures of this caliber, they take some liberties in the proportions of Ryza, namely making her more "human sized" and
|
||||||
making her head less large, which makes her body look bigger. I kind of wish Ryza looked like this in the second game, which is _supposed_ to be 3
|
making her head less large, which makes her body look bigger. I kind of wish Ryza looked like this in the second game, which is _supposed_ to be 3
|
||||||
years after the first one, yet it just looks like she's in a different out. Curiously Ryza 3 fixes this issue, but that's only
|
years after the first one, yet it just looks like she's in a different out. Curiously Ryza 3 fixes this issue, but that's only
|
||||||
|
|
|
@ -20,7 +20,7 @@ and want to give you the nitty gitty, especially for those who don't know what a
|
||||||
|
|
||||||
Let's begin by making a very simple Vulkan program, say - drawing a triangle. This is good because it covers a lot of
|
Let's begin by making a very simple Vulkan program, say - drawing a triangle. This is good because it covers a lot of
|
||||||
interesting stuff, picking a device to draw with, creating pipelines, render passes and issuing a draw call. I specifically
|
interesting stuff, picking a device to draw with, creating pipelines, render passes and issuing a draw call. I specifically
|
||||||
picked Vulkan for this article _because_ it makes swapchain managment explicit which will be covered later.
|
picked Vulkan for this article _because_ it makes swapchain management explicit which will be covered later.
|
||||||
|
|
||||||
So the first thing that should be noted is that under most circumstances, the first system in line when you call a Vulkan function
|
So the first thing that should be noted is that under most circumstances, the first system in line when you call a Vulkan function
|
||||||
is actually not related to Linux graphics at all. It is called the Vulkan Loader.
|
is actually not related to Linux graphics at all. It is called the Vulkan Loader.
|
||||||
|
@ -28,7 +28,7 @@ is actually not related to Linux graphics at all. It is called the Vulkan Loader
|
||||||
_Note:_ This is true in most cases, but in some systems (say, a Nintendo Switch) you might link directly to the driver's Vulkan library.
|
_Note:_ This is true in most cases, but in some systems (say, a Nintendo Switch) you might link directly to the driver's Vulkan library.
|
||||||
|
|
||||||
The Vulkan Loader has a few jobs, but the one that is relevant to us is that handles ICDs. An ICD is an "Installable Client Driver",
|
The Vulkan Loader has a few jobs, but the one that is relevant to us is that handles ICDs. An ICD is an "Installable Client Driver",
|
||||||
because Vulkan is not specific to one vendor - and one system may have devices from multiple vendors (say, a integrated Intel
|
because Vulkan is not specific to one vendor - and one system may have devices from multiple vendors (say, an integrated Intel
|
||||||
chipset and a dedicated AMD or Nvidia GPU), the Vulkan loader must send the right function calls to the right ICDs. The loader
|
chipset and a dedicated AMD or Nvidia GPU), the Vulkan loader must send the right function calls to the right ICDs. The loader
|
||||||
also has a couple of more important jobs such as handling layers, but that is Vulkan-specific and will not be covered.
|
also has a couple of more important jobs such as handling layers, but that is Vulkan-specific and will not be covered.
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ and the Mesa stack is our userspace driver. Specifically, we care about RADV.
|
||||||
|
|
||||||
### Mesa Drivers
|
### Mesa Drivers
|
||||||
|
|
||||||
Mesa comes with many drivers, which confusingly can be mix and matched because they handle supporting different APIs.
|
Mesa comes with many drivers, which confusingly can be mixed and matched because they handle supporting different APIs.
|
||||||
|
|
||||||
* RADV is their AMD driver _for_ Vulkan. It has nothing to do with OpenGL support for this hardware (unless you use Zink ;-))
|
* RADV is their AMD driver _for_ Vulkan. It has nothing to do with OpenGL support for this hardware (unless you use Zink ;-))
|
||||||
* ANV is their Intel driver _for_ Vulkan. As usual, it has nothing to do with OpenGL support for Intel chipsets.
|
* ANV is their Intel driver _for_ Vulkan. As usual, it has nothing to do with OpenGL support for Intel chipsets.
|
||||||
|
@ -173,13 +173,13 @@ If we take a look at the Mesa RADV `meson.build` we get our answer:
|
||||||
|
|
||||||
Jackpot! This `dep_libdrm_amdgpu` bit is specifically referring to the libdrm project under the Mesa umbrella (https://gitlab.freedesktop.org/mesa/drm)
|
Jackpot! This `dep_libdrm_amdgpu` bit is specifically referring to the libdrm project under the Mesa umbrella (https://gitlab.freedesktop.org/mesa/drm)
|
||||||
To get more confusing, this is _not_ DRM (the Linux subsystem) but rather a library sitting on top of it. Yes, really. To get even more
|
To get more confusing, this is _not_ DRM (the Linux subsystem) but rather a library sitting on top of it. Yes, really. To get even more
|
||||||
confusing, freedesktop.org also calls this library DRI for some reason. I told you the acronyms were going to get really bad.
|
confusing, freedesktop.org also calls this library DRI for some reason. I told you the acronyms were going to get awful.
|
||||||
|
|
||||||
So, the Mesa RADV driver doesn't interface with the kernel directly, but rather access all of the AMD-related
|
So, the Mesa RADV driver doesn't interface with the kernel directly, but rather access all the AMD-related
|
||||||
gubbins _through_ libdrm.
|
gubbins _through_ libdrm.
|
||||||
|
|
||||||
I won't be covering how the AMDGPU kernel driver actually works, partially because I don't know but the main idea is that
|
I won't be covering how the AMDGPU kernel driver actually works, partially because I don't know but the main idea is that
|
||||||
it basically operates on top of some propietary firmware that's loaded on startup for the GPU. The DRM kernel driver is basically
|
it basically operates on top of some proprietary firmware that's loaded on startup for the GPU. The DRM kernel driver is basically
|
||||||
responsible for creating a suitable interface, initializing firmware, memory and doing I/O between that and the userspace.
|
responsible for creating a suitable interface, initializing firmware, memory and doing I/O between that and the userspace.
|
||||||
|
|
||||||
## Windowing
|
## Windowing
|
||||||
|
@ -188,16 +188,16 @@ This is a huge topic just by itself, but it's incredibly interesting as everythi
|
||||||
either running your Vulkan program without any graphics output (_specifically_ presentation, as you can totally run the graphics
|
either running your Vulkan program without any graphics output (_specifically_ presentation, as you can totally run the graphics
|
||||||
part of Vulkan headless).
|
part of Vulkan headless).
|
||||||
|
|
||||||
For _brevity_ sake, and because there's already a lot of X11 information out there - I want to cover what specifically
|
For _brevity’s_ sake, and because there's already a lot of X11 information out there - I want to cover what specifically
|
||||||
happens on **Wayland**. This is especially troubling because there is a lot of misinformation on the web, especially around Wayland.
|
happens on **Wayland**. This is especially troubling because there is a lot of misinformation on the web, especially around Wayland.
|
||||||
|
|
||||||
### On the Vulkan Side
|
### On the Vulkan Side
|
||||||
|
|
||||||
Let's momentarily mention what exactly you need to do on Vulkan to get presentation working. We'll keep this short but
|
Let's momentarily mention what exactly you need to do on Vulkan to get presentation working. We'll keep this short, but
|
||||||
it's important to get our bearings straight.
|
it's important to get our bearings straight.
|
||||||
|
|
||||||
This may be a surprise to some, but Vulkan has nothing to do with presentation. This is pretty on par with Khronos APIs
|
This may be a surprise to some, but Vulkan has nothing to do with presentation. This is pretty on par with Khronos APIs
|
||||||
actually, as OpenGL also did not concern itself with presentation (GLX, EGL, and other similiar stuff is _not_ related).
|
actually, as OpenGL also did not concern itself with presentation (GLX, EGL, and other similar stuff is _not_ related).
|
||||||
|
|
||||||
In Vulkan, to get presentation you must enable a device extension, specifically `VK_KHR_swapchain`. This is not the only
|
In Vulkan, to get presentation you must enable a device extension, specifically `VK_KHR_swapchain`. This is not the only
|
||||||
piece of the puzzle, as you also need a surface to render to. There is a lot of options, but we are only concerning ourselves with two:
|
piece of the puzzle, as you also need a surface to render to. There is a lot of options, but we are only concerning ourselves with two:
|
||||||
|
|
|
@ -9,12 +9,12 @@ aliases:
|
||||||
- /notes/move-to-sourcehut/
|
- /notes/move-to-sourcehut/
|
||||||
---
|
---
|
||||||
|
|
||||||
Recently I've moved pretty much all of my repositories over to sourcehut! <!--more--> This is a huge change, as I haven't changed my primary code hosting provider, Github, since 2-3 years ago.
|
Recently I've moved pretty much all of my repositories over to sourcehut! <!--more--> 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]({{<ref "moving-to-sourcehut-followup">}})!
|
**Edit:** There is a follow-up to my sourcehut migration located [here]({{<ref "moving-to-sourcehut-followup">}})!
|
||||||
|
|
||||||
You'll notice all of the site's links now point to sourcehut repositories, and there should be no more
|
You'll notice all 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
|
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 -
|
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
|
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).
|
[astra](https://sr.ht/~redstrate/astra).
|
||||||
|
|
|
@ -17,4 +17,4 @@ There were many reasons why I ditched GitHub, a couple are detailed below:
|
||||||
* GitHub is not [free software](https://drewdevault.com/2022/03/29/free-software-free-infrastructure.html).
|
* 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.
|
* 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 ;-)
|
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 ;-)
|
||||||
|
|
|
@ -11,7 +11,7 @@ aliases:
|
||||||
|
|
||||||
This is a follow-up post to my blog post detailing the changes I've made to how my source code is hosted. <!--more--> Basically, I'm trying to
|
This is a follow-up post to my blog post detailing the changes I've made to how my source code is hosted. <!--more--> 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
|
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,
|
ultimately landed on sourcehut, and plan to detail the benefits I've gained, and the things I've lost. Hint, it works pretty well,
|
||||||
so I'm excited to dig into my new workflow :-)
|
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
|
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
|
||||||
|
@ -26,7 +26,7 @@ tab pretty much solidifies my idea that this is what it's going to end up being,
|
||||||
a programmer oriented first and foremost. This is most obvious in the UI, which is textbook definition of "minimally functional" -
|
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.
|
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
|
Despite this, there is still a certain charm to how simple this website functions - and browsing the sourcecode is very similar
|
||||||
to minimal git interfaces like cgit and gitweb which I very much enjoy. However, it's at this point where sourcehut starts exceeding
|
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
|
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
|
source code repositories, mailing lists, issue trackers and stuff into a concise page. Here's an example of what it looks like
|
||||||
|
@ -34,5 +34,5 @@ for Astra:
|
||||||
|
|
||||||
This is extremely useful as it allows me to organize my projects into what they are - projects. Compare this to GitHub where
|
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
|
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
|
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.
|
site and the ease of use.
|
||||||
|
|
|
@ -38,13 +38,13 @@ p = Point(loc.latitude, loc.longitude)
|
||||||
print(p.format(deg_char='°', min_char='\'', sec_char=''))
|
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!
|
3. Then, simply click an address in KAddressBook, and it'll open up in KDE Marble!
|
||||||
|
|
||||||
## More Details
|
## 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.
|
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.
|
So this is where Nominatim comes in, which as said before - is a service run by OpenStreetMap. Its 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.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: "Prism Changelog: Feburary and April 2021"
|
title: "Prism Changelog: February and April 2021"
|
||||||
date: 2021-04-04
|
date: 2021-04-04
|
||||||
draft: false
|
draft: false
|
||||||
tags:
|
tags:
|
||||||
|
@ -8,14 +8,14 @@ aliases:
|
||||||
- /articles/prism-changes-feb-april-2021/
|
- /articles/prism-changes-feb-april-2021/
|
||||||
---
|
---
|
||||||
|
|
||||||
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! <!--more--> 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.
|
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! <!--more--> Also before you ask, this is February _and_ April, I only made one small commit in March which is why it's not February _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).
|
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
|
### 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
|
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
|
fully usable 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.
|
functionality required for IBL and some other graphical features.
|
||||||
|
|
||||||

|

|
||||||
|
@ -23,21 +23,21 @@ _This is the Material editor running on Vulkan, on Windows_
|
||||||
|
|
||||||
### SDL2 is the new default windowing system for Windows and Linux
|
### 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:
|
Previously, I had handwritten 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 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.
|
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!
|
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.
|
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 theoretically 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!
|
### Windows now has multiviewports!
|
||||||
|
|
||||||
{{< youtube 1WGRgIb9WJI >}}
|
{{< 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.
|
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 the main window, and enables some really cool workflows and use-cases you would normally see in other GUI toolkits like Qt and GTK.
|
||||||
|
|
||||||
### The new render target system
|
### The new render target system
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ Before if you wanted to render to another window, static image, viewport you wer
|
||||||

|

|
||||||
_This is two editor viewports running at the same time in two different windows, something not possible before under the old system._
|
_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:
|
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});
|
auto render_target = renderer->allocate_render_target({100, 100});
|
||||||
|
@ -61,7 +61,7 @@ renderer->render(commandbuffer, scene, render_target, -1);
|
||||||
|
|
||||||
### Shader live editing
|
### 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:
|
As part of my ongoing 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:
|
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:
|
||||||
|
|
||||||
|
@ -89,8 +89,8 @@ Now everything is `snake_case`, following the function naming I'm already using.
|
||||||
|
|
||||||
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.
|
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.
|
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, leveraging the preexisting 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!)
|
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!
|
**Edit:** I removed some old GitHub issue links that are now dead. Sorry!
|
||||||
|
|
|
@ -16,9 +16,9 @@ It's uh, been a while since the last Prism changelog :-) Haha, well there's as a
|
||||||
|
|
||||||
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).
|
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?_
|
First, I'm not a huge fan of the opinionated 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.
|
It wasn't until 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
|
### DirectX12 support has begun
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ I recently was able to get a [nice Windows setup going](https://knockout.chat/th
|
||||||
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.
|
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
|
### 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.
|
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
|
### 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:
|
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:
|
||||||
|
@ -40,16 +40,16 @@ There is now support for using more than one GFX backend (although not at the sa
|
||||||
DirectX12 -> Metal -> Vulkan -> Dummy
|
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`.
|
Of course, this is only if the platform supports those APIs, and it's significantly 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
|
### 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.
|
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 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.
|
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
|
### Example application available
|
||||||
There's now a real, working 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.
|
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 nice screenshots in the README.
|
||||||
|
|
||||||
{{< rawhtml >}}
|
{{< rawhtml >}}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ right in the source code repository. This has technically been around since the
|
||||||
|
|
||||||
|
|
||||||
### Material system is being reworked
|
### 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.
|
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
|
### 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.
|
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.
|
||||||
|
|
|
@ -6,14 +6,14 @@ aliases:
|
||||||
- /notes/purging-twitter/
|
- /notes/purging-twitter/
|
||||||
---
|
---
|
||||||
|
|
||||||
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. <!--more-->
|
In my series of purging my content on proprietary 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. <!--more-->
|
||||||
|
|
||||||
* Focus on alogrithmic discovery as opposed to a simple, linear timeline.
|
* Focus on algorithmic discovery as opposed to a simple, linear timeline.
|
||||||
* Supporting NFTs which I don't personally agree with.
|
* Supporting NFTs which I don't personally agree with.
|
||||||
* There's advertisements **everywhere**! So many ads!
|
* 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.
|
* 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.
|
* 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).
|
I don't even receive 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)!
|
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)!
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: "Steam Offline Achivements and Why They Sometimes Don't work"
|
title: "Steam Offline Achievements and Why They Sometimes Don't work"
|
||||||
date: 2022-10-05
|
date: 2022-10-05
|
||||||
draft: true
|
draft: true
|
||||||
tags:
|
tags:
|
||||||
|
@ -19,11 +19,11 @@ once you enter Online Mode again. This is fine, and it's been working this way f
|
||||||
|
|
||||||
## What doesn't work
|
## What doesn't work
|
||||||
|
|
||||||
However in some cases, it doesn't always end up this way. Let's take for example, Nier Automata
|
However, in some cases, it doesn't always end up this way. Let's take for example, Nier Automata
|
||||||
as this is what tipped me off to this issue. I sometimes take my Steam Deck willingly offline because
|
as this is what tipped me off to this issue. I sometimes take my Steam Deck willingly offline because
|
||||||
I share my library with my girlfriend, but remember that this will happen sooner or later on a handheld. I haven't
|
I share my library with my girlfriend, but remember that this will happen sooner or later on a handheld. I haven't
|
||||||
gotten too far on the PC version of Automata, so I'm still in the beginning part of the game. I enter the Amusement Park and
|
gotten too far on the PC version of Automata, so I'm still in the beginning part of the game. I enter the Amusement Park and
|
||||||
beat the boss there, and much to my surprise.... nothing? Now I normally don't get too worked up about achivements but it's
|
beat the boss there, and much to my surprise.... nothing? Now I normally don't get too worked up about achivements, but it's
|
||||||
kind of insane that I earned one, and now I have no easy way to get it back without cheating or restarting the game again. Eugh. Let's figure out what's going on.
|
kind of insane that I earned one, and now I have no easy way to get it back without cheating or restarting the game again. Eugh. Let's figure out what's going on.
|
||||||
|
|
||||||
## Theory
|
## Theory
|
||||||
|
@ -40,10 +40,9 @@ INSERT IMAGE
|
||||||
|
|
||||||
## Reverse Engineering
|
## Reverse Engineering
|
||||||
|
|
||||||
First, we need to break the Steam DRM. The DRM is quite simple, and it's been broken before. Much more knowledgable people
|
First, we need to break the Steam DRM. The DRM is quite simple, and it's been broken before. Much more knowledgeable people
|
||||||
have written up about this format, but in short the actual executable is wrapped within a Steam stub that checks whether
|
have written up about this format, but in short the actual executable is wrapped within a Steam stub that checks whether it's launched through Steam and then decrypts the binary.
|
||||||
or not it's launched through Steam and then decrypts the binary.
|
|
||||||
|
|
||||||
I tried Steamless to decrpyt the game, but that didn't work, so I opted to dump the binary when the game was running. Then,
|
I tried Steamless to decrypt the game, but that didn't work, so I opted to dump the binary when the game was running. Then,
|
||||||
I threw the execuable into Ghidra:
|
I threw the executable into Ghidra:
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ to Metal using [MoltenVK](https://github.com/KhronosGroup/MoltenVK). <!--more-->
|
||||||
|
|
||||||
To clarify, Prism running on macOS is nothing new. In fact, a large portion of the engine was
|
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
|
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 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)!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -25,12 +25,12 @@ The biggest thing to come out of this is the introduction of _first class macOS
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
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_ :-)
|
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 fulfilled 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
|
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~~
|
anyone interested in doing this. I would be especially interested as I'm not interested in learning _yet another_ API with its own quirks, and... WSL - ugh. ~~Insert XKCD comic reference here~~
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@ 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._
|
_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.
|
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, that's 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.
|
For historical purposes, it is now archived on my [sourcehut](https://git.sr.ht/~redstrate/trinity), along with its old [AUR package](https://git.sr.ht/~redstrate/pkgbuilds/tree/main/item/trinity-git/PKGBUILD). You can read more on its project page.
|
||||||
|
|
||||||
**Edit:** I updated the source code links to their new home at sourcehut.
|
**Edit:** I updated the source code links to their new home at sourcehut.
|
||||||
|
|
|
@ -13,10 +13,10 @@ Connections to my websites may be checked for abuse, but nothing is permanently
|
||||||
|
|
||||||
### Silica Viewer
|
### Silica Viewer
|
||||||
|
|
||||||
Silica Viewer _does not_ collect any information about your device, and doesn't contact any server. The app has no networking functionality and runs inside of the secure macOS sandbox. The only analytics collected are those which Apple collects and I
|
Silica Viewer _does not_ collect any information about your device, and doesn't contact any server. The app has no networking functionality and runs inside the secure macOS sandbox. The only analytics collected are those which Apple collects and I
|
||||||
cannot turn off, such as when you report a crash.
|
cannot turn off, such as when you report a crash.
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
All work showcased on this site (including images, source code, etc) are hereby licensed under
|
All work showcased on this site (including images, source code, etc.) are hereby licensed under
|
||||||
[CC BY-NC-SA 3.0]({{<ref "/license">}}) _unless_ otherwise specified.
|
[CC BY-NC-SA 3.0]({{<ref "/license">}}) _unless_ otherwise specified.
|
||||||
|
|
|
@ -27,8 +27,8 @@ Game engine which can render on top of the custom implemented RHI (Render Hardwa
|
||||||
|
|
||||||
### Silica Viewer: https://redstrate.com/projects/silica-viewer
|
### Silica Viewer: https://redstrate.com/projects/silica-viewer
|
||||||
|
|
||||||
Written to fill my own niche of viewing art canvases from a propietary art program that only runs on iOS devices called Procreate. Initial software was implemented using knowledge gleaned from other open source projects (credited in the repository) but quickly evolved into a much more complex application, involving replicating the original Procreate drawing engine including clipping layers, rendering masks and blending modes. An existing PSD writing library (called PSDWriter) was modified in order to support the more complex feature set I needed. The app is also currently published on the macOS App Store.
|
Written to fill my own niche of viewing art canvases from a proprietary art program that only runs on iOS devices called Procreate. Initial software was implemented using knowledge gleaned from other open source projects (credited in the repository) but quickly evolved into a much more complex application, involving replicating the original Procreate drawing engine including clipping layers, rendering masks and blending modes. An existing PSD writing library (called PSDWriter) was modified in order to support the more complex feature set I needed. The app is also currently published on the macOS App Store.
|
||||||
|
|
||||||
### Trinity: https://redstrate.com/projects/trinity
|
### Trinity: https://redstrate.com/projects/trinity
|
||||||
|
|
||||||
Also written to fill a niche of a nice looking Matrix client that copied Discord's interface. Does not use any pre-existing Matrix library, and was written solely on the Matrix specification. Originally written in 2018, but I revived it in 2022 by implementing some basic end-to-end encryption support which involved using libolm - a cryptography library.
|
Also written to fill a niche with a nice looking Matrix client that copied Discord's interface. Does not use any pre-existing Matrix library, and was written solely on the Matrix specification. Originally written in 2018, but I revived it in 2022 by implementing some basic end-to-end encryption support which involved using libolm - a cryptography library.
|
|
@ -17,14 +17,14 @@ Game engine utilizing Vulkan and Qt.
|
||||||
<!--more-->
|
<!--more-->
|
||||||
---
|
---
|
||||||
|
|
||||||
Following up [XT]({{<ref XT>}}), this was my first adventure into Vulkan - which was a relatively new API at the time. This is an extremely old project, but this is where the majority of my Vulkan knowledge was born from. Unlike some of my older projects I've recovered recently, this one actually has **all** of my commit history intact!
|
Following up [XT]({{<ref XT>}}), this was my first adventure into Vulkan - which was a relatively new API at the time. This is an ancient project, but this is where the majority of my Vulkan knowledge was born from. Unlike some of my older projects I've recovered recently, this one actually has **all** of my commit history intact!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
This features things such as:
|
This features things such as:
|
||||||
* Working depth of field pass utilizing near and far fields.
|
* Working depth of field pass utilizing near and far fields.
|
||||||
* This was started back when the engine was originally conceived but I actually finished this feature recently :-)
|
* This was started back when the engine was originally conceived, but I actually finished this feature recently :-)
|
||||||
* Custom Qt interfaces for all of the tooling, compared to the dear imgui interfaces of Prism and XT.
|
* Custom Qt interfaces for all the tooling, compared to the dear imgui interfaces of Prism and XT.
|
||||||
* Antialiasing utilizing SMAA.
|
* Antialiasing utilizing SMAA.
|
||||||
* Audio playback using OpenAL Soft.
|
* Audio playback using OpenAL Soft.
|
||||||
|
|
||||||
|
|
|
@ -16,5 +16,5 @@ Mastodon to Twitter cross-poster!
|
||||||
<!--more-->
|
<!--more-->
|
||||||
---
|
---
|
||||||
|
|
||||||
This is one of my first Go and Twitter projects, and i'm actually using it
|
This is one of my first Go and Twitter projects, and I'm actually using it
|
||||||
for [@redstrate](https://www.twitter.com/redstrate)!
|
for [@redstrate](https://www.twitter.com/redstrate)!
|
||||||
|
|
|
@ -16,7 +16,7 @@ Rogue-like game with a couple of interesting features.
|
||||||
<!--more-->
|
<!--more-->
|
||||||
---
|
---
|
||||||
|
|
||||||
This is my attempt at building a rogue-like game for the first time, but I'm pretty happy with it's feature set. The whole thing is still full of programmer art.
|
This is my attempt at building a rogue-like game for the first time, but I'm pretty happy with its feature set. The whole thing is still full of programmer art.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ My first OpenGL based game engine.
|
||||||
<!--more-->
|
<!--more-->
|
||||||
---
|
---
|
||||||
|
|
||||||
This was one of my first custom game engines, and my first foray into using OpenGL for a serious project. Unfortunately, I have lost all of the source code, but the image below is what I was able to save from a dear imgui screenshot thread.
|
This was one of my first custom game engines, and my first foray into using OpenGL for a serious project. Unfortunately, I have lost all the source code, but the image below is what I was able to save from a dear imgui screenshot thread.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ article {
|
||||||
|
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
|
|
||||||
flex: 2 0px;
|
flex: 2 0;
|
||||||
|
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue