Advertisement

Framework options with full control

Started by November 02, 2016 08:50 AM
4 comments, last by BeerNutts 8 years, 1 month ago

Hi GameDev,

I'm thinking of learning some game development. As you know, game engine choice is an important question. I'm pretty lost at it, as I don't have enough information on each one to take a good decision. I'm interested in game development, but in the programming part of it. I'm searching for a good engine/framework and all the recommendations I see are mostly drag and drop software. I really want to learn about graphics programming, patterns, game engine architecture, shaders and that sort of things, and I think that game engines gives too much abstraction to learn about that things.

I've seen some frameworks that seem good choices for my goals, like LibGDX and OGRE3D. My problem is that, being a beginner, I don't know if an engine will do "too much", giving me too little control, or if it will fall short and I'll be overwhelmed. I want an engine/framework that can babysit me in every aspect of game development, but that lets me implement or extend whatever part I want with full control and no restrictions. I'm doing this alone, and I'm not counting on doing a game engine from the scratch, but I want to have the option of getting down to the metal. I know C++, Java and Python, but I prefer C++. Also, I would like an engine to be in active development and have a considerable community. In the technical side, a clean and modern API, nice documentation and good performance (auto hardware acceleration would be great) are the biggest selling points for me. What are my options?

Hello and welcome in the wonderfull world of game engine development ;)

First, I would suggest reading the book Game Engine Architecture, Second Edition to get a rough look of what fields of progress are to be mastered. Because an engine is not that complex pice of software it looks like you should first get a look into the basic API's of your prefered OS (I think it is Windows isnt it?) because an engine is these days build arround a third-party (or in-House) framework that encapsulates any of the required OS feature may be in a multiplatform manor to have the engine self access the filesystem, create and manage threads, call into the message loop, create and manage a window/surface to render to and way more than simply load some assets and render scenes.

You could use Ogre but I wont recommend it because Ogre is plain old and its maintenance is chaotic. If you dont want to start from scratch as I did 3 years ago then you might take a look at SFML, SDL as wrapper frameworks to setup your environment on. If you want to use an already existing engine you could look at either Urho3D or Bitsquid/the Bitsquid port Crown. Both open source and accessable at GitHub

Advertisement

I really want to learn about graphics programming, patterns, game engine architecture, shaders and that sort of things, and I think that game engines gives too much abstraction to learn about that things.

Hello,

Well, yes, the entire point of a framework is to provide abstractions. The "give me everything" option is a plain programming language with a few simple libraries below the level of your interests (assuming you don't want to start writing a video driver and an operating system first).

I want an engine/framework that can babysit me in every aspect of game development, but that lets me implement or extend whatever part I want with full control and no restrictions.

This is impossible. You cannot build software that has functionality, but can be be extended without limits in any direction.

Instead of trying to find the impossible, why not play around with various frameworks, sort of just make several small games to find out how things work.
That also lets you focus on one aspect of programming more easily than when you try to combine all stuff into one ever-expanding program.

Hello and welcome in the wonderfull world of game engine development ;)

First, I would suggest reading the book Game Engine Architecture, Second Edition to get a rough look of what fields of progress are to be mastered. Because an engine is not that complex pice of software it looks like you should first get a look into the basic API's of your prefered OS (I think it is Windows isnt it?) because an engine is these days build arround a third-party (or in-House) framework that encapsulates any of the required OS feature may be in a multiplatform manor to have the engine self access the filesystem, create and manage threads, call into the message loop, create and manage a window/surface to render to and way more than simply load some assets and render scenes.

You could use Ogre but I wont recommend it because Ogre is plain old and its maintenance is chaotic. If you dont want to start from scratch as I did 3 years ago then you might take a look at SFML, SDL as wrapper frameworks to setup your environment on. If you want to use an already existing engine you could look at either Urho3D or Bitsquid/the Bitsquid port Crown. Both open source and accessable at GitHub

I know the existence of SDL/SFML, but they are more geared towards 2D. There is anything like that but for 3D?

I really want to learn about graphics programming, patterns, game engine architecture, shaders and that sort of things, and I think that game engines gives too much abstraction to learn about that things.

Hello,

Well, yes, the entire point of a framework is to provide abstractions. The "give me everything" option is a plain programming language with a few simple libraries below the level of your interests (assuming you don't want to start writing a video driver and an operating system first).

I want an engine/framework that can babysit me in every aspect of game development, but that lets me implement or extend whatever part I want with full control and no restrictions.

This is impossible. You cannot build software that has functionality, but can be be extended without limits in any direction.

Instead of trying to find the impossible, why not play around with various frameworks, sort of just make several small games to find out how things work.
That also lets you focus on one aspect of programming more easily than when you try to combine all stuff into one ever-expanding program.

Maybe it's impossible. I have some frameworks in mind that does things this way, but not for game development. I worked with Apache Flink (distributed streaming data processing) and I'ts very close to the idea I have. You can make things work with few lines and lots of abstraction, but if you want to go deeper, the framework has a very good documentation for the source code and you can extend base clases (maintaining the design and architecture of the data flow). You can even rewrite specific functionality very easily to meet your needs. The underlying design (how data flows, how timestamps are managed) must be keeped, but it's so flexible you can do whatever you want. SDL/SFML is a good example for 2D (I explored SDL a bit, you can use the framework and it's also very easy to get deeper), but leaves you alone in 3D, only helping with network, input...

you can extend base clases (maintaining the design and architecture of the data flow

That is hardly "no restrictions", but much closer to "intended extensions".

However, I think the basic suggestion stands, you're new to everything, so try a few frameworks to get an informed opinion about them. Even if you don't like them in the end, you can use what you found for comparison of other frameworks.

If you've never really done any game development, I would HIGHLY encourage you to start with 2D games. Trying to create 3D games as your first ever is going to add to the complexity 10x, and you'll really gain little.

A 2D game requires all the same engine code as a 3D game does (world, AI, input, inventory, interactions, weapons, etc.), except for simpler physics and graphics. Using 2D graphics and Physics will give you a great basis and understanding of those concepts, and, when you're ready, you can jump into that 3rd axis.

With that said, I'd recommend SFML as it's a great C++ API for creating games. You may also want to look at adding a 2d physics engine as well, depending on the type of game yo want to create (box2d, chipmunk-physics, etc.).

Good luck and have fun.

My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)

This topic is closed to new replies.

Advertisement