It’s been a very long time since I’ve made an update here. I’ve been working steadily on the font editor module for the Gorgon editor and it’s finally nearing completion (the last 99% of 99% of 99% etc…).
I’m quite proud of this thing. It’s supports a pretty well rounded suite of functionality for designing a bitmap font for use with Gorgon. Besides the usual standard stuff like font outlines, font faces, styles, etc… it also supports glyph brushes, custom glyphs, glyph advancement and offset editing and custom kerning pair tables.
I’ve been spending my time refactoring and just cleaning up the code in Gorgon. I made the mistake of getting Resharper and it put me on this crusade of cleaning up the code because apparently I’m just awful. Also, I’ve been finishing up the primary graphics API (not the 2D stuff) by adding a bunch of new things to it like geometry shaders, compute shaders, and hull/domain shaders for tesselation (this one is cool, if not a little baffling). I also made the API a little closer to Direct 3D 11 by adding views to resource object types.
So I’ve been busy working on building the editor for creating the content for Gorgon. I know I posted a screenshot of a very old initial version of the editor way back:
Anyway, I totally scrapped that old thing and restarted. And here’s a more up to date (but not even close to being done) screen shot:
A little better.
This new editor is going to be a replacement for all the tools in the previous version of Gorgon. It will handle file management duties (File System Editor in v1.x), sprite editing (Sprite Editor in v1.x) and atlasing (Atlas tool in v1.x). It will also add font editing. The big thing about this editor is that it’s entirely plug-in based. Meaning that the font editor, sprite editor, etc… are/will be DLLs that are loaded/unloaded as needed. What this means for you: You can write your own plug-in modules for it. Want to build a map editor and integrate it with the rest of your content? With the plug-in system in the editor, you can write your own map editor and host it right in the editor interface (if anything the minimized tedium of having to write UI code is worth it). Want to write out your content data as encrypted data? You can extend the file writing functionality to write out encrypted file data.
Unlike the sprite editor in the previous version, the files are no longer saved as loose files on your hard drive that require a separate utility (file system editor) to pack into a single compressed file. This editor now outputs data as a packed file (of course, this can be modified with a plug-in) so you don’t have to come up with a strategy to update your content, allowing you to edit directly. This is where it takes over from the file system editor and like the old file system editor this one is capable of importing files by either clicking on an Import menu item, or dragging and dropping directly from explorer. And, obviously, there’ll be a way to extract the files to your harddrive should you wish to do so.
I have several plans for plug-in modules for the editor including a sprite editor, image editor (a very very very very simple editor, use photoshop or paint.net if you want high detail stuff), a font editor and a shader editor (maybe).
FYI, the window will look like that in Windows 7 as well (i.e. no aero glass). I’ve modified it to look like the Zune window by including a new object in Gorgon.Common.Dll called ZuneForm. Basically you inherit this form instead of a System.Windows.Forms.Form and then you get a Zune-looking window.
So I’ve been adding examples to the new version of Gorgon for the last week or so. The latest one shows how to use the new input system to use a Raw Input mouse, keyboard and joystick (if present, and is actually not using Raw Input as such). It’s a pretty silly example, but shows how to get the input plug-ins loaded, how to create an input factory and how to create the objects used to represent the various input devices.
You want pictures though. I have one. And it is here.
Well, it’s been a while. I’ve been busy. You’ve been busy.
Anyway, I actually took some time to test out a piece of functionality for the new version of Gorgon. This new version of Gorgon will have a graphics API separate from the 2D renderer (the 2D renderer uses the graphics API however). This is unlike the previous version where the renderer was pretty much all you had access to. I had a user ask me a long time ago if it were possible to access the underlying renderer to render 3D along with the 2D. At first, it did not, but I did hack in a way to access SlimDX directly through a plug-in and it was awful.
So, in this version I decided to give the developer access to the full graphics API under the renderer. This allows the user to switch between 2D graphics and whatever they want. And here’s the results of my intense labour pain:
Yep, it’s a clone of the old Amiga demo “Boing”. As you can see, there are 2D elements (the text and the logo) along with the 3D elements (which were all done manually I might add, Gorgon does NOT have a 3D renderer so don’t get too excited). I’ve decided to include the code as an example program for the new Gorgon.
So here’s a screenshot of the dual monitor code in action:
It’s not much to look at, but it was a major pain in the ass to get working, and does indeed work. Basically you create 2 forms, and 2 swap chains and set both swap chains to full screen and then add some special code to handle cases where focus is lost/restored on the primary form.
Gorgon would normally handle focus loss to reset your full screen mode for you when focus is returned (this is due to a bug in WinForms and DXGI). And that’s all well and good, but this code really doesn’t work well with multiple monitor situations. So, there’s a flag to tell Gorgon to turn off the automatic mode reset on focus, and that will let you, the user, handle the transition when dealing with multiple monitors. It’s not an ideal situation, but it works
It’s a bit complicated to set up, but there’ll be an example included with Gorgon on how to use dual monitor setups that’ll guide you through the process.
There’s a new version of Gorgon uploaded. There’s not a huge amount in this release regarding the actual graphics library, just a few bug fixes.
However, there are two important changes:
The project/solution files for the library source code were converted to Visual Studio 2010. This means that in order to compile the Gorgon library, you will need Visual Studio 2010. The library still uses .NET 3.5 SP1, so Visual Studio 2008 will continue to work when using the library assembly.
Most important of all: There’s been a new library added called GSound (Gorgon Sound). Written by ShadowDust702. New forums have been added to reflect this new addition.
I decided to take a break from writing the library, and have been working on the editor. Here’s a screen shot of the font editor in semi-action. Please note that this is very preliminary and there’s not a lot going on here.
Here’s a sample of text rendering in Gorgon 2.0 (Dorian). It’s rendering 16,019 characters, animated with shadowing (which doubles the character count), plus the FPS counter. When it renders the text, it renders with kerning information (provided the font has any) so the output should be properly spaced. And while it’s doing this, it’s scaling the text to pump up the fill rate.
(The video has since been deleted)
All that at ~75 FPS, that’s not too bad hey?
In this particular “demo” you can see that I’m able to compress and expand the lines of text. This is possible because of the new “LineSpacing” property in the text object. This allows the user to set line spacing by setting a multiplier. For example, a LineSpacing of 2.0 will give you double spacing and 0.5 will only move the lines half way.
Anyway, I’m still plowing through all of this. And I’m pretty happy with the results.
I just spent the last 4 evenings/nights writing Gorgon’s font system and it was not fun. And, of course, I’m still nowhere near done (still have to create the TextSprite object, and other the font effects like gradients and GDI+ image brushes). But, I got it working. Not only that, unlike the previous incarnation, it actually implements kerning properly (well, approximated kerning, I’m not dicking around with actual kerning. Fuck that.) One of the things about the 1.x font/text rendering that I absolutely hated was while it was worked, every now and again (especially on smaller fonts), it’d screw up and a letter would appear slightly (or not so slightly) shifted. Quite annoying. Here’s a screen shot showing how awful it was compared to GDI+ and how awesome v2 is going to be (click to expand it):
Gorgon/GDI+ text comparison
Note that all text is the same font: Arial, 9.0 point, Bolded and Antialiased. Also note that v2.0 is nearly (but not quite pixel perfect) identical to the GDI+ DrawString version. I think that’s a slight improvement.
So I got custom shaders up and running in Gorgon 2.0. The new version has always had shader ability because it’s using Direct3D 11, so it’s required to use them. However, up until now the shader code has been hardcoded to use 3 default shaders. But after today, there’s an ability to use customized shaders:
In this little sample, there’s a new system at work. It’s basically a mini effects framework that can do multi-pass rendering and in this video there’s a wave shader and an embossing shader at work on the sprite. If you want to learn more, click the stupid link below