Ramblings of arcade machines, code, and other general musings of my world

Saturday, January 7, 2023

    Hello, My name is Jacob, aka HACKhalo2. I made it a point in 2023 to get a working prototype of a project that I started in 2012 and that I've been wanting to pick back up since 2015, called the RenderEngine. It was a really bad attempt at making a game engine in Java using LWJGL, and had interface hell to plug into the rendering system to do anything. I was so proud of it, but looking over what I had now, it makes me cringe somewhat hard. So, I'm redoing it from the ground up.

    Now, for those who are like "but there are so many game engines out there already, like Unreal or Unity or Godot or..." blah blah blah. I know. There are two well known Java game engines as well, jMonkeyEngine and LibGDX, that I could easily use if I wanted to make a game. I want to build out a personal game engine that can be used for games down the line. I wanna have something that's neat and that I'm ultimately proud of and want to show to people and show off in gamejams.

    So, what am I planning? Well, I want to expand on the idea I tinkered with with the original RenderEngine, but in a different way: I want to have the RenderEngine itself be a library-agnostic API for games, with modules that will be loaded at runtime to supply the logic. So, it doesn't matter if you use OpenGL or Vulkan or Metal or whatever, it'll just work. Same with modules to load resources, like audio or models or textures: everything will be more or less a stable API to use with the game logic side of things.

    Now, this does have some caveats. It's going to be difficult to make everything fit under a single API (especially with Metal, since that's Apple's bullshit. It's not super high on the support list because of that). But the sheer flexibility to be able to update modules to boost performance without needing to touch game code to do so feels so good. And being able to release a general purpose OpenGL or Vulkan Module that can be expanded with vendor-specific things done by users, and then brought upstream to help everyone? Glorious.

    It's definitely a goal to aim for. I honestly don't have any idea if it is possible at all. But then again, It'll be a fun learning experience figuring everything out. And for the first mini-goal: Figuring out how loading modules will work. Bukkit, back when I used to code Minecraft server plugins, obviously had a plugin loader that allowed it to change and extend the Minecraft server. But it was taken down by a DCMA years ago, so I can't really poke around the source to figure out how it works. Minecraft Forge also has a loading system, but for mods. I think I remember looking into it years ago, and the memories it brings up are super... black magicky voodoo stuff happens with that stuff to make it work. But, ClassLoaders are what they both used, so that's what I'm going to start tinkering with.

    I'm planning on doing one update a week until the end of the year, where I hope to have a rough-but-working prototype of the RenderEngine2 to show off. I also might do some updates randomly based on things I do outside this project here as well, like cool little things I do for my day job, or some voodoo I manage to make to get something to work, or just random other weird stuff.

    So, this is HACK, signing off until next week. If you want to shoot me a coffee, I got my Ko-fi button over there somewhere that you can use. Peace.

Categories: