So before I get a bunch of posts saying "Just start off with using an already existing engine," let me explain something:
I am in no way a beginner programmer. I have been programming in a variety of languages for over a decade. These include the "C Family" (C/C++/C#) as well as Java and Lua.
I have also made games using both the Torque Engine as well as the Unity3D Engine -- as well as make games on Roblox if one could consider that an "engine" -- back when I was in Middle and High School (I am currently in college).
Sorry to add that bit in there, I just wanted to explain that I DO know what I am getting myself into, that I DO know that it will be a very long time before I release a good game under the engine, and that I DO have experience in the matter.
I would like to also explain before I get to the questions that I will be developing this engine through making a game (as what is commonly referred to as "make a game, not an engine").
So, I wanted to work on an engine over time while I slowly build a team of indie developers (and hopefully it could evolve into a major game development company some day, but that's to "hoping").
Because of this, I have a few questions as well as requests for advice on this road I am starting to go down.
(1) OpenGL x Direct3D?
Yes. The infamous clash and debate between the two. This is not so much a question on which I should do, but a question on why the bigger engines chose what they did.
I know that a lot of the big engines support BOTH OpenGL and Direct3D. My question is: why?
What benefit does Direct3D have? I'm asking this because when doing research, all I could find are people that complain that Direct3D still has a hold on the market by only stating the pros to the use of OpenGL.
(2) So which should I start off with...?
Assuming that the big engine companies knew what they were doing by implementing both (at least, being big companies, I HOPE they knew what they were doing, lol), which should I start off with?
If the games using the engine start getting popular, I would eventually desire to do both. Of course, by the time of dealing with implementing both, I would have a team to help with the heavy work. There would also be an abstraction layer, so the engine as a whole won't really be effected by either. So, as the question states, which one should I start off with?
Or, is this just more of a coin-flip (it doesn't matter at all)? Keep in mind that it could be a very long time before I could get to the point of worrying about implementing both.
(3) For simplicity purposes, should I just focus on Windows at first?
This kind of ties in with Question 2. Should I focus on ease of maintenance (only dealing with Windows) or should I focus on wider audience (using all cross-platform libraries like GLFW, OpenGL, and OpenAL)? Again, in the long run it won't really matter because there will be an abstraction layer and both would eventually be handled anyways. I am simply asking which would be the best to start off with since right now it is just me and a friend.
(4) Dealing with multiple languages.
This is another "questioning others' logic"-type question. C++ will be the primary language of the engine; however, there are many engines (like Unity) that also use C# for tools. Like the previous questions: is it something that I should worry about now or later? Should this even be something that I should worry about at all, because there are others (like Unreal) that only use C++.
(5) Any books on Game Engines?
I already have Game Engine Architecture Ed. 2 on my hit-list once I get my next paycheck. If anybody has read this book, could you tell me how much it has helped you? Are there any other books that you guys would recommend me get?
This is the full list of books that I have been considering (all of which you can see on Amazon):
- Game Engine Architecture, 2nd Edition
- Programming Game AI By Example
- Mathematics for 3D Game Programming and Computer Graphics, 3rd Edition
- Level Up! The Guide to Great Video Game Design, 2nd Edition
- Game Coding Complete, 4th Edition
You may notice that the last two books listed are not really game "engine" focused; however, there are good reasons why I consider getting them (at least, I think they are good):
1.) The 4th book, Level Up!, is -- from what I can tell -- focused more on other parts of game development like the paperwork dealt with it as well as good practices.
2.) The 5th book, Game Coding, is listed not because I don't know how, but simply because I would like to go through it. 90%+ of my experience with developing games has been self-taught (through using open-source games as well as a book I got called "Torque for Teens" awhile ago). Because of that, going through an actual Game Programming book would be a good idea before I really start working on the engine.
If I get this one though, I would end up choosing DirectX as my starter instead because that's what this book teaches.
Yes. Because that helps a lot >.<
I do know to think of it in that way. I was just looking for a bit of advice from people that have already done this. No point on making mistakes that others have already made that I could have easily avoided if I simply asked.