   Good Game Engine architecture
I actually based this data structure from a Stefan Zerbst book. I really liked how it was laid out and I was thinking about starting my engine off in this structure. I was just curious what everyone else had to say about this structurePretty much how it works is that the application includes the LIB file necessary to call on a RenderDevice Manager. This Render Device manager is implemented into the LIB file and is responsible for calling the correct device DLL. Either directX, OpenGL or any other device will be implemented into a DLL. This makes it easy to upgrade the application without recompiling the whole application.All DLL's must implement a interface. So when the LIB file returns a pointer to a Render Device Object from the DLL, it places it into a interface and the application uses this interface to communicate to that particular device.so I guess my question is...Is this considered good practice ?Is it used often ??If you don't understand, just let me know and I will try my best to be more descriptive.   
  Obviously i don't know how their code was organised etc, by CryTek used about a dozen different DLLs in CryEngine2. I have also architected a large code base with lots of DLLs and it does present its problems. My current project is just in one solution for the C++ rendering engine and its alot easier to manage.IMO, i wouldn't bother with this approach. Don't fret too much over architecture for a hobbyist engine.   ;  I agree with Dave - don't worry too much about it. For example, do you really expect to find yourself in a situation where you need multiple systems for sound or physics? Having the rendering layer abstracted makes a bit of sense (but just barely), and I wouldn't worry about that either unless you need to run your game on OSX/Linux and cannot use only OpenGL. This sounds like an overly complex solution to a non-existent problem.   ;Quote:Original post by DaveObviously i don't know how their code was organised etc, by CryTek used about a dozen different DLLs in CryEngine2. I have also architected a large code base with lots of DLLs and it does present its problems. My current project is just in one solution for the C++ rendering engine and its alot easier to manage.IMO, i wouldn't bother with this approach. Don't fret too much over architecture for a hobbyist engine.Well I would like to do this in the best structure possible because I would like to build off of this for years to come. I would like for it to be my Hot Rod for hobbies. I also want it to be graphic device independent as possible so I can later move to openGL. Not only this but I would like to have this in my portfolio in the future, not just strictly for the game industry, but for the IT industry in general. Honestly, when it comes to programming, I think everything has it's disadvantages. In my personal opinion I do think the CryTek engine is possibly the leading edge game engines so possibly the Pro's out weigh the consQuote:Original post by WindryderI agree with Dave - don't worry too much about it. For example, do you really expect to find yourself in a situation where you need multiple systems for sound or physics? Having the rendering layer abstracted makes a bit of sense (but just barely), and I wouldn't worry about that either unless you need to run your game on OSX/Linux and cannot use only OpenGL. This sounds like an overly complex solution to a non-existent problem.I guess I can some what agree with you there. I do want to abstract the rendering layer. As for the physics, I do agree that is possibly pointless. There is probably no one way of doing physics. Sound doesn't necessarily matter too.I do want the engine to be cross platform not only because I want it to work on multiple platforms, but I also what to learn on multiple platforms   ;  The difference with Crytek is that they have significantly more than 1 person working on their engine. What you need is results so that you don't lose enthusiasm (which is a common problem with hobbyists) and the best way of getting results is to work towards a game and build your engine as you go.   ;Quote:Original post by numerical25I do want the engine to be cross platform not only because I want it to work on multiple platforms, but I also what to learn on multiple platformsValid point - so use OpenGL. ;);Quote:Original post by numerical25I would like to build off of this for years to come.I think that's a mistake. You should read this.Something else to think about (also read the responses at the bottom).   ;Quote:Original post by DaveWhat you need is results so that you don't lose enthusiasmI already know the feeling.Quote:The difference with Crytek is that they have significantly more than 1 person working on their engine. What you need is results so that you don't lose enthusiasm (which is a common problem with hobbyists) and the best way of getting results is to work towards a game and build your engine as you go.But I am not approaching this engine in a broad sense. As you can see, each devices are completely seperate in themselves. Right now I am completely focusing on rendering for DirectX. I believe getting a world up and going is enough enthusiasm for me. Besides, I have a second project I am working on that has very little data structure, but I use it strictly for trying new things out on.right now I am focusing on just a world with no physics. just height map terrain, 3 different types of lighting with possibly shadow casting. and a sky box. And also takes .obj models from something like milkshape.   ;Quote:Original post by Gage64Quote:Original post by numerical25I would like to build off of this for years to come.I think that's a mistake. You should read this.Something else to think about (also read the responses at the bottom).I will check it out. thanks   ;Quote:Original post by numerical25Well I would like to do this in the best structure possible because I would like to build off of this for years to come. I would like for it to be my Hot Rod for hobbies.^^^This^^^    Nothing wrong with this =)Go wherever you imagine you can go, just make sure you have a tether secured to reality.   The problem is that People Who Create Things stand a good chance of Burning Out.   Artist, musicians, writers, coders - they are all subject to creativity burnout.The engine design looks interesting but the diagram is very simplistic.  I mean that's a lot of fancy boxes to just say "plug-in architecture".    I think that its basic design leans more towards the commercial game engine market.  I wouldn't call it a hot rod.  I think its more of Concept Racing Car that requires a full team of specialized and experienced mechanics.   That's the reality.All that said, I still believe that people should go wherever they can imagine (presuming they're not on the clock haha).  So, my suggestion is to develop your engine *alongside* some Very Very Small pong-sized games and work up from there.  You can't expect to fully develop an engine if you don't know what is to be fully expected of it.   You can start learning these things by developing simple games, and moving up to more complicated games.  All the while, you can still write reusable code, you'll have demonstratable results, your engine is growing, and your hobby is thriving!Good luck on your project!   