Component Glue v1.0

I finally brought Component Glue up to a state where I felt like the product was finished. You can get it via NuGet:

PM> Install-Package ComponentGlue

or you can get the source from GitHub. The documentation is definitely sparse I know but I recommend taking a look at the unit tests to get a feel for what you can do with Component Glue.

Credit for the NuGet CSS here.

GLDotNet Version 0.6.0

I just released GLDotNet Version 0.6.0.

Changelog:

  • GLDotNet.Toolkit: Assembly containing simple app framework.
  • GLDotNet.Objects: Assembly containing higher level objects such as Texture2D and VertexBuffer.
  • More overloads added to GLContext class.
  • byte and sbyte are now mapped correctly in generated code.
  • Fixed the naming of some functions so as not to include type notation, i.e. Color4u.
  • Decreased the number of enum values output.

Introducing GLDotNet

Today I released a project I’ve been playing around with for a year or so on Codeplex. It’s called GLDotNet. From the project description:

C# wrapper for OpenGL. Partially generated from the OpenGL spec and partially written by hand, the aim is to have a flexible and native feeling C# binding.

I have generated functions from the OpenGL spec excluding 1 or 2 but unfortunately of the generated code is untested. There is a demo project included in the source code. The Github repository is located here: https://github.com/smack0007/GLDotNet

GLDotNet

HTTP Status Codes as Telephone Calls

I had a funny idea to describe HTTP Status Codes as telephone conversations so I thought I’d write it in a blog post.

301
She’s not here right now but she’ll be back later.
302
She doesn’t live here anymore, she now lives somewhere else.
304
He hesn’t changed a bit.
401
I can’t allow you to speak to him.
402
$1.99 for the first minute…
404
No one by that name lives here.
500
It’s not you, it’s me.
503
I can’t deal with this anymore.

Snowball is now modular

The version of Snowball currently on GitHub under the “develop” branch has been split into multiple projects. There is now an assembly for each major piece of Snowball, such as Graphics, Input, Sound. Although this means having to reference more assemblies, the amount of code your project depends on is now smaller. This also makes code maintenance a bit easier as it’s more clear now what parts of the library depend on other parts of the library.

The parts of the library which really make up a Game Framework has also been split out into their own library. This allows for using Snowball as a just a simple set of libraries or a full blown game framework, depending on what your situation calls for.

Using Themes in Visual Studio Express for Windows Desktop

I just want to post some information that took me while to find. Check out the original article here with pictures and more information.

1) First, download the zip file http://www.alinconstantin.net/download/VS2012Themes.zip – it contains the 7 pkgdef files defining the colors of the default themes from Matt’s extension.

2) Now, create a folder under “%ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\WDExpressExtensions”, and lets name it “Themes”. Unpack the zip file in that folder.

3) Open a ‘Developer Command Prompt for VS2012” window. In the command line, type “wdexpress.exe /updateconfiguration”. This will make Visual Studio to read the pkgdef files on next restart, and import the color themes into registry.

4) Launch Visual Studio Express, and now you should be able to see the new themes and switch them in Tools/Options dialog, Environment/General tab

Source

ID3DXEffect::OnLostDevice()

I fixed a bug yesterday in Snowball related to a lost graphics device. I noticed that when I would use CTRL + ALT + DELETE, my apps were crashing. Turned out it was due to not recovering properly from a lost device.

The root of the problem was that I needed to call the ID3DXEffect::OnLostDevice() method when the device was being lost. This allows the effect to recover from the lost device. I’ve made the Effect class in Snowball now do this automatically.

Snowball: Now based on shaders

I’ve now merged the “Shaders” branch back into the “master” branch. All rendering is now based on shaders and no longer on the fixed function pipeline.

The function of the Renderer class was essentially been reduced to pushing data to the GPU and therefore I decided to rename the class to GraphicsBatch. The Begin() overload which would allow you to specify RendererSettings has been removed and been replaced with an overload which allows you to specify an Effect file to use. Also, the DrawLine() method has been removed, although vertical and horizontal lines can still be drawn using the DrawFilledRectangle() method. Better line drawing should be possible through shaders and I hope to eventually make a sample which provides an example.

I’ve added a sample (pictured above) which demonstrates using a custom shader. By default, GraphicsBatch uses a BasicEffect class which is basically the old way of rendering implemented in a shader.

In order for shaders to work properly when using GraphicsBatch, the GraphicsBatch class must pass a few parameters to the shader. At the moment, this only includes a transform matrix but may include more parameters in the future. The GraphicsBatchEffectWrapper can be used to wrap custom effects which you write in order to work with GraphicsBatch correctly. GraphicsBatchEffectWrapper will pass the parameters to your shader by following a standard naming convention. For example, the transform matrix is passed to your shader through a parameter named “TransformMatrix”. You can also write you own class which implements IGraphicsBatchEffect. See the sample for an example of using the wrapper class.

Snowball: “Shaders” in progress

It’s been a long couple of months. I’m in the middle of switching jobs, been on vacation a bit, and have been playing around with OpenGL a bit to get a feel for how that API works compared to Direct3D. As of yesterday I started working on implementing shaders in Snowball.

In order to implement shaders or Effect(s), there may have to be a few changes to the API / interface of the Renderer class. Nothing significant I don’t think but mainly changes to the Begin() method overloads. Today I pushed the branch which contains my initial implementation.

Snowball now using SharpDX

For a little while, I was thinking about giving up on Snowball. When you’re one guy working on a project that gets to a certain size, it can start to feel a little daunting. You find a bug, and you feel like you need to fix it asap. I don’t know if anyone reading this has actually tried Snowball, but if you have, please comment to let me know. It would encourage me.

I decided to switch Snowball over to SharpDX. It’s not that I was unhappy with SlimDX, it just seems like there is a lot more innovation happening on the SharpDX side. I also like the fact that I can include the DLLs in the repository so end users don’t have to download another dependency in order to compile it. The Win8 stuff is also quite interesting, although the SlimDX guys say they are working on that.

I plan to set a road map soon for what I want to include the first release of Snowball. Music and Pixel Shaders are high the list. I’ve experimented with implementing a UI library but I think I want to push that back for a later release.