1 hour ago, Cloooouuuud said:
Do you think that 3d graphics programming isn't well paid
It depends. Some studios that have the budget offer or better salary while some studios like where I had an application placed dosen't even offer 1000$ per month for a junior position before taxes. This isn't all related to just graphics programming but to any kind of game programming.
The fact is, if you want to hire (senior) professionals in their area, you have to pay or otherwise won't get the quality/people you are hoping for.
Fearing for not getting enougth to life has broken down many projects and many studios and even the frequence and consistance of salary plays a huge role regardless in what kind of industry you work.
1 hour ago, Cloooouuuud said:
Do you think that 3d graphics programming is harder than others programming field
No! It is harder to debug than a tool or a gameplay feature is but not more than for example AI or network programming is. Anything is well documented these days from the big vendors AMD and NVIDIA but also the console vendors Sony and Nintendo.
1 hour ago, Cloooouuuud said:
Are you afraid of horror story in the game industry like EA spouse and Rockstar does it kill your passion for programming?
I worked for a lot of horrible managed studios that are either in insolvency or crippling arround too much to die, too less to live but it don't killed my passion for programming and even making games. Those experience come from the profit and the hard makret where publisher expect getting fully polished titles offered instead of giving the budget for a great new title, a market where trainees do the job of regular programmers and employers expect to work 48 hours a day to get the product finished in time.
1 hour ago, Cloooouuuud said:
does it kill your passion for programming 3d engine / games etc compared let's say C# winform or webdev with JS ?
The one dosen't mean you won't need the other. C# has established well as tooling language and some big studios like those related to Ubisoft use C# and even JS as their editor language. This dosen't mean no one will ever again use C++.
The fact is that C++ is used exclusively for inhouse solutions from like Ubisoft, EA or Bethesda because it is the language to go when you are writing multiplatform performance optimized code.
1 hour ago, Cloooouuuud said:
Why most game programmer don't use much or all of C++ and C++ new features like C++17 / 20?
This is also a question of performance. Even if Unreal, Cry, Frostbite or Snowdrop rely on C++ and also use compiler features of C++ 11, it dosen't mean that the 17, 20 or whatever standard is coming offers usefull features they won't already have in their code base. Lambdas for example are horrible to optimize because you are fully in your compiler's hands here.
Other reason is that those vendors that develop the hardware you want to target like Sony or Nintendo, might not support a higher standard than C++ 11. PS4 and Switch are fixed to the 11 feature set.
I personally even don't use C++ 11 features even if most target compilers GCC, LLVM/clang and MSVC 15/17 support them because nearly every feature you want to write is fully C++99 compilant and just 1% of the C++ 11 feature set is used.
You can take a look at GitHub for Cry and Unreal Engine source code to approve this.
1 hour ago, Cloooouuuud said:
Why most game programmer don't use much the STL etc ?
This is a question of performance too. Those STL structs that live there for past 20 years haven't changed much in the way how they work. Vector, Map etc. are ok for regular programs but as a game comes into account, thei lack of for example important features.
Vector allocates memory on the heap but where and how isn't controlable that easy. You need to write a custom allocator but if you do this, you could as well write a custom vector class with a richer set of features. I did this in my engine for example in a simple header file with less than 150 lines of code (excluding comments) and the full feature set of a C# List.
Allocators in game engines might use memory pools, provide some kind of garbadge collection and/or even align the memory to certain hardware boundaries. Things the STL dosen't provide by nature.
The new pointer types smatr_ptr, ref_ptr and shared_ptr are of the same reason not widely used. They allocate memory using the new operator so you don't have control where the object is stored in memory as in the same way as of a vector. They control lifetime of an object and might or might not provide control over the lifetime so as usually you have to do this your own way. Maybe you want to offer lazy loading in a multithreaded environment or cache objects you know are frequently used in your memory pool.
Last but not least convinience and APIs. Some functionality of the STL depends on system level APIs like thread or chrono. You don't know how it is implemented under the hood or want some OS level optimizations then you have minimal to no chance to get that from the STL. I wrote my own thread class and also a chrono timer that were built up from the system APIs also in less than 100 lines of code.
Especially critical are those features of your engine that won't work together well with the STL stuff like the task system I have in mine. Multithreading, locking and switching threads is a hard thing to control using STL containers or pointers and if you fiddle arround with some hardware hacks like fiber based cooperative multitasking it is getting even more worse than it is just right now.
Pleae note that this are experience based statements from my personal view working as senior in the games industrie and might stay in conflict with those opinions/experiences of other people