Since my last post on the Dark Room project, I've successfully removed an external library and have continued to work on the redesign and implementation of the new display engine. It's been a little slow going, some things have been a bit difficult to figure out. But it's gradually taking shape and coming to life. I now have some interface features working, including viewport blurring and highlighted object drawing. Let's start with the blur.
One of the user-functions I'm working on is a more interactive way of working with the project. To do this I need a way of being able to separate the working project visuals from the controls/options itself. And a way of doing this I thought, was to blur the display and have the controls overlay on top of the project. I haven't got a graphical representation at hand to show, so I'll have to post on this again in the future.
For now, I have made my own blur shader, it looks like this:
The blur shader seems to have come up pretty well. I can control the blur size, how much to blur to that size, and the direction (horizontal and vertical). For visual overlays, this should work out well.
Next I tackled some form of object highlighting. This may be for mouse overs, or to show which object is currently selected. I did some reading up on ways to achieve this. It seems one of the more common ways is to make a second render with your object a little bigger. But I didn't feel this was a good solution. It has its faults, and I didn't think it would be the best option going into the future. So, I came up with my own highlighting design. Here's the result:
In the image above, there's a selected object (orange) and a mouse-over object (white). The mouse is not shown in this screen grab, because screen shots typically don't show with the mouse.
I'm pretty happy with the outcome for both the blur and highlighting shaders. They both seem to render pretty quick, and both have variables to adjust the amount of blur or highlighting size. It helped refresh myself on shader writing, and paves the way to implement further ideas moving forward.
I should mention as well, I had to engineer my own rendering buffers to do all of this. This threw up some challenges, mainly how to do it! But they've set me up for a more flexible engine moving forward. I'm not limited for example, by 8-bit stencil buffers. This will be important because I need a stencil buffer that can hold values much larger than 0-255 (and in some instances less than 0!).
And just to show off, here's a highlighted blurred viewport:
Ignore the frame rate indicator by the way, it's garbage text!
Next is to explore and work on the user interaction. I've started with shortcut keys and overlays (these will be explored more in future posts). This is why the blur and highlight shaders have been introduced. I need to design the underlying tool and plugin structures as well, which I'll work on alongside the shortcut keys.
I'm really looking forward to being able to use this software in a project. I think it will be really useful as a pre-visualiser.
A lot more to come with this one.