I have been programming for some time now with console applications getting a good foundation of how C++ and programming work. I tried to jump into Graphics Programming last month (Im gonna be taking a Game Dev course come September and I wanna put myself way ahead of the game) and found the contents way too advanced for my programming knowledge. I tried to look into other libraries like FLTK and Qt and found them A LOT easier to learn. My Question is when should I drop the GUI programming and face the difficulties of Graphics Programming. Or should I not even bother wasting my time with GUI stuff and just face it head on? I feel like there MUST be a better easier way to understanding this complex subject. Also I'm not sure if its just me that feels GUI programming is so easy or not and maybe Im just not good with graphics? The only Graphical library I can understand are the small state-machine like "toy engines" such as SDL and SFML that don't provide the level of sophistication that I am looking for (I want to aim at writing an Engine but want to focus on simple 3D stuff right now.)
Thanks for any advice! :)
Also im not really looking for a "Start on this day" kinda response as I understand thats unlikely. Id just like for you guys to give me some advice or maybe share some stories of what got you past the steep learning curve of GPU programming.
Honestly, as a programmer if you're going to be building anything that uses 2d or 3d graphics you'll either be doing it by yourself or as an indi group, or for a company.
In either case, most of the times you will be using an engine that many people had to put in many hours to build. For example, Unreal Engine, Unity Engine, the engine that Skyrim and Fallout use, The engine that Bloodborne and Dark souls share.
Each engine that gets built is enough to start and support a company that employs numerous people at. That's how big they are, what they require and what they can put out.
Yes these people know the inner workings of graphical programming, but these are things they have studied for years, and they specialize in particular areas. Someone who specializes in graphics pipeline optimizations may not be fluent in coding front end graphical implementations.
If you want to know where to start, you need to know where you want to end up. Do you want to get into the nitty gritty of pipeline optimizations? Or do you want to be tying back end functionality to animations? How about Building Animations and or 3d Assets? Once you've decided on a field, you can search popular development environments, libraries, etc that are popularly used in said field and go from there.
If you're just trying to build a game or animation, or get an overall look, I would suggest looking in to unity or unreal engine, so you can familiarize yourself with all the components.
I personally advise unreal engine, as most of it is open to viewing and modification.
Jump right into it. You'll learn and improve your programming knowledge along the way. I started by creating a space invaders game with WinAPI a while back. Then moved to OpenGL & Freeglut where I created a basic scene with lighting, terrain, grass, particle effects, and skeletal animations. I picked up SFML where it was really easy to get things to render on your screen given its high-level nature. Today I am mostly using SDL2 & OpenGL as well as learning Vulkan in my free time (definitely wouldn't recommend starting with Vulkan to be honest). I personally prefer SDL over Freeglut and GLFW because SDL is more mature in that you do not have to setup any callback functions. I use SDL to setup OpenGL context and detect user input.
Anyway, this really boils down to what you want to achieve by the end of it all. If you want to create games and make money fast, then you might be better off using a game engine that's already been written for you to use. If you want to grow as a programmer, learn more about linear algebra and how an engine works, while creating a killer portfolio, I think a game engine of your own would look quite solid. It's a long journey where you are going to find yourself wanting to give up when you spend countless hours trying to get a feature implemented, but it's a very gratifying one to see your own creation evolve.