I’m slowly but surely making progress. I’ve since added an UpdateManager, which essentially manages the updating of other manager. Some engines call what I refer to as managers as systems. I have an IUpdateQuery interface that a manager can inherit from. When all the managers have loaded, the UpdateManager goes through each manager and queries for that interface, then adds their update entry to a list in the order specified in a JSON file that is passed in.
Missed my one post a month quota by a little bit here, but better late than never I guess. Things have been going pretty slow these last few weeks. I’ve been taking a little bit of a break from developing Shibboleth to relax and release some stress. I’ve recently just played through a couple of Daedalic Entertainment‘s point-and-click adventure games set in The Dark Eye universe. These games would be The Dark Eye: Chains of Satinav and Memoria.
A little past a month, but better late than never I guess. This month I converted all my projects over to premake, specifically premake5, which you can only get by building it yourself! I’m not expecting everyone to build premake and generate their own projects, so I pre-generate Visual Studio 2013 solutions and Linux makefiles for you! I also converted the projects for ResIL and ResILU from generating statically linked libraries to dynamically linked libraries, to comply with the LGPL license.
I missed my one month window for my post! Nuuuuuuuuu! This is just a quick post to say that I’m not dead. I’m a bit tired and it’s late to start something technical, but I have made some progress on Shibboleth. I’ve gotten some of the basic infrastructure down and started integrating Gleam and OtterUI into the engine. Although, I should point out that my “integration” is completely optional from an engine standpoint.
Hello all! Today I’m writing another technical post about how message broadcasting is done in Gaff/Shibboleth. The high level idea isn’t very complicated: Listeners are registered as either functions, member functions, or functors. When a listener registers themselves, they are returned a “receipt”. When this receipt is released, it will automatically unregister the listener. While this adds some extra memory usage from having to store all these receipts, the end user no longer needs to remember to unregister manually!
An actual technical post! Whooo! To start, why am I posting about this? Well, for one thing, this is one of the most recent things I’ve implemented in Gleam. First thing to note is, when I saw “raw input”, I do not mean DirectInput. Modern versions of DirectInput are simply wrappers around Windows’ raw input API. While you can still use DirectInput, it is not recommended, as it has been deprecated for quite some time.
Man, my titles really are boring. I’ve made some pretty significant progress. I’ve actually started developing the game engine! Yay! One of my main efforts in this engine is to make everything as data driven as possible. Although, this may lead to some overkill with DLLs, or, as I’m calling them, dynamic modules, since other platforms do not use DLL as their extension. I’ve implemented a wrapper around Jansson, a JSON parser written in C.
Been switching gears from Gaff to Gleam. Did a big round of bug fixes, majority on the OpenGL side. Turns out glTexStorageXD() (X being the dimension) followed by glTexSubImageXD() does not produce the same result as calling glTexImageXD(). While it compiled and glError() reported nothing, textures were not getting loaded correctly. The texture would have a random sized black block in the bottom-right corner. Switching to glTexImageXD() fixed this issue.
My monthly post is a little bit late. Not much to say though. Work has been pretty busy, so I haven’t been putting a whole lot of time into my projects as I’d like. I’ve mostly been reworking the way objects that give receipts work. My plan is to basically have the receipt have a pointer to an interface that it can call release on when it needs to. This way I’ll avoid the need to make receipts template objects that need to know about the allocator used by the object that created it.
New post in under a month! Yay! For serious though, I’ve found that I haven’t really posted anything on the internals of some of my projects. I really want to, I just don’t really know how to go about it. That and a lot of the things that I am doing, I’m learning at the same time. Take for instance, threading. I know what a thread id and I know some of the basic synchronization techniques such as mutexes, semaphores, and what-not.