<p>This is a similar question to following: When do you need to cook? You can go to a restaurant. Why would you need to know woodworking? You can buy things from a shop.</p>

<p>There are two answers here</p>

<ol>
<li><p>In order for you to claim ownership on some tech. You need to build it. This can be simply because you have chosen to sell a competing product or need to lower your licensing fees.</p>

<p>Note you dont have to be big to benefit from this.</p></li>
<li><p>You have custom needs that are not being met by other things. Even if you mainly work in a engine by others you may still need to generate some form of asset or shader to handle some aspect. </p>

<p>Not because you exactly might need it but it makes the product better or it mskes your life easier. Also: If you dont practice then you can never recognize when you could have help in the custom thing. </p></li>
</ol>

<p>It is really hard to come up with concrete situations where you need either. Because once that situation arises it gets snatched up by someone so you nolonger need it. </p>

<p>The thing is the world isnt as ready as you think. And technology has a very nasty habit of dropping you entirely when you need something more. You might suddenly realize that because you stepped slightly out of bounds of your tech you now need to implement a very large chunk of the system since your not covered by their legal framework or their particular implementation does not extend neatly.</p>

<p>There is also a third option. But you have dismissed it out of hand:</p>

<ol start="3">
<li><p>Because you can! I mean ive done a lot of things with this principle. </p>

<p>But if you mever do anything like this you might not be invited to do so in the future</p></li>
</ol>

<p>PS: None of this is valid fuel for saying i dont need to learn this. Even if you never use stuff like this knowing it can be done can be extremely valuable. Learning more makes you undertand what can be done better.</p>

CC BY-SA 4.0
2020-05-12T20:32:31.397Z
thank you, I really appreciated your explanation, your 2 answers are something that made me reflect, also on other types of projects. Furthermore, you made me understand how I had completely missed a fundamental point: you cannot understand what a tool is for if you don't know it and you don't know anything about its environment.
lorenzo
CC BY-SA 4.0
2020-05-10T21:43:59.263Z
2020-05-11T08:55:11.663Z
2020-05-11T08:55:11.663Z
joojaa
<p>I had this doubt in my head for several months and have been unable to find an answer anywhere on internet.</p>

<p>I know what OpenGL, DirectX, Vulkan, Metal, etc... are, I already know what they are used for (literally in any multimedia software application).</p>

<p>My question is "in the real world when people work directly with a graphical API (eg: DirectX)?".</p>

<p>For example, if I want to create a game I will use a game engine, if I want to create special effects I will use a program for VFX, if I want to create an animated scene with different 3D models I will use something like Blender.</p>

<p>What are the situations where a person could say "Ok, this problem can only be solved by writing my own software with DirectX/C++"?</p>

<p>My question arises from the fact that I would like to learn DirectX (later Vulkan also) as a matter of curiosity but I know that graphic programming is a demanding topic that requires a lot (a lot!) of time.</p>

<p>I work for a company most of my day and since the salary is quite low (especially because at 21yo nobody takes you seriously), in the evening I dedicate myself to secondary activities in order to earn something more. I can't find a good reason to stop dedicating myself to these activities to study something that will not lead me to any type of business.</p>

<p>In my country (Italy) there are some (not a lot) job offerings concerning graphic programming but all require a degree in Metematics/Physics, which I don't have.</p>

<p>So, in summary, what are the situations where you need to "get your hands dirty" with a graphical API (eg: DirectX) instead of using a tool already made?</p>

<p>I know there are big game companies that for example reinvent the wheel (they write the rendering engine from 0) because they will pay off the costs and it is not convenient for them to pay for an engine already made. This environment doesn't interest me much because it certainly cannot lead to an individual business.</p>

<p>Other situations where you work directly with a graphical API is the world of simulations, but there I imagine it is more a matter of mathematics and physics, not of graphics.</p>

<p>I'd like to read about some experience of those who work/worked with a graphic API and what your role was in the industry. I'd also like to read about someone who has his own business that somehow relates to a graphical API.</p>

<p>Thanks a lot to everyone :)</p>

CC BY-SA 4.0
2020-05-10T22:24:09.283Z
Someone has to write and maintain the engines! thats at least one use! ;)... Just like anything in the software world, there are varying levels of abstraction for a developer to use (i.e high/low level language, toolkits/engines/libs etc). This is the same with graphics programming... you could be close to the metal (Vulkan), you can go slightly higher (opneGL) or you could use something that uses one or many other API's. Everytime you go higher, you absolve yourself of a little control/reposonsibility and possibly performance (usually, but not always)... thats the trade off.
lfgtm
CC BY-SA 4.0
2020-05-10T22:25:18.540Z
Also, mathematics (matrix/geometry theory) is pretty much a must in graphics programming. You won't get far without it.
lfgtm
CC BY-SA 4.0
2020-05-11T00:17:44.160Z
"*This environment doesn't interest me much because it certainly cannot lead to an individual business.*" Why do these APIs need to serve the needs of "an individual business"? This question overall seems quite opinion-based.
Nicol Bolas
CC BY-SA 4.0
2020-05-11T01:28:25.857Z
The question is the same shape is, "What is the point of writing any software?  There is already lots of software that exists I could use."  Or indeed, "What is the point of writing?  Things have already been written."  I can no more enumerate every use for OpenGL than I can list every novel that still needs to be written.
wrosecrans
CC BY-SA 4.0
2020-05-11T03:41:21.383Z
Since you are learning graphics, my advice is to just go for Vulkan directly and don't waste time on directx. The latter is a vendor lock-in API while the former is quite open and cross platform. Besides, dx11 is ancient technology, and dx12 is pretty much the same as Vulkan, except only limited to windows, so just go Vulkan directly. (I'm a graphics developer at Google).
Shahbaz
CC BY-SA 4.0
2020-05-12T20:36:18.023Z
@lfgtm it is true, the first thing would be to study graphical programming more deeply, to understand at what level of abstraction it is better to act according to the problem. I'm sure that by studying the use cases they will come out on their own. PS: math will be the first thing I will study, thank you :)
lorenzo
CC BY-SA 4.0
2020-05-12T20:37:47.273Z
@Shahbaz thank you very much for the advice and congratulations for your career :)
lorenzo
<opengl><3d><vulkan><directx><metal>
When do people need to work directly with a graphical API (eg: Direct3D) instead of using already made software?
lorenzo
# When do people need to work directly with a graphical API (eg: Direct3D) instead of using already made software?

(Asked by: username_0 on 2020-05-10)

I had this doubt in my head for several months and have been unable to find an answer anywhere on internet.

I know what OpenGL, DirectX, Vulkan, Metal, etc... are, I already know what they are used for (literally in any multimedia software application).

My question is "in the real world when people work directly with a graphical API (eg: DirectX)?".

For example, if I want to create a game I will use a game engine, if I want to create special effects I will use a program for VFX, if I want to create an animated scene with different 3D models I will use something like Blender.

What are the situations where a person could say "Ok, this problem can only be solved by writing my own software with DirectX/C++"?

My question arises from the fact that I would like to learn DirectX (later Vulkan also) as a matter of curiosity but I know that graphic programming is a demanding topic that requires a lot (a lot!) of time.

I work for a company most of my day and since the salary is quite low (especially because at 21yo nobody takes you seriously), in the evening I dedicate myself to secondary activities in order to earn something more. I can't find a good reason to stop dedicating myself to these activities to study something that will not lead me to any type of business.

In my country (Italy) there are some (not a lot) job offerings concerning graphic programming but all require a degree in Metematics/Physics, which I don't have.

So, in summary, what are the situations where you need to "get your hands dirty" with a graphical API (eg: DirectX) instead of using a tool already made?

I know there are big game companies that for example reinvent the wheel (they write the rendering engine from 0) because they will pay off the costs and it is not convenient for them to pay for an engine already made. This environment doesn't interest me much because it certainly cannot lead to an individual business.

Other situations where you work directly with a graphical API is the world of simulations, but there I imagine it is more a matter of mathematics and physics, not of graphics.

I'd like to read about some experience of those who work/worked with a graphic API and what your role was in the industry. I'd also like to read about someone who has his own business that somehow relates to a graphical API.

Thanks a lot to everyone :)

**Tags:** opengl, 3d, vulkan, directx, metal

> **Comments:**
> **username_1**: Someone has to write and maintain the engines! thats at least one use! ;)... Just like anything in the software world, there are varying levels of abstraction for a developer to use (i.e high/low level language, toolkits/engines/libs etc). This is the same with graphics programming... you could be close to the metal (Vulkan), you can go slightly higher (opneGL) or you could use something that uses one or many other API's. Everytime you go higher, you absolve yourself of a little control/reposonsibility and possibly performance (usually, but not always)... thats the trade off.  
> **username_1**: Also, mathematics (matrix/geometry theory) is pretty much a must in graphics programming. You won't get far without it.  
> **username_2**: "*This environment doesn't interest me much because it certainly cannot lead to an individual business.*" Why do these APIs need to serve the needs of "an individual business"? This question overall seems quite opinion-based.  
> **username_3**: The question is the same shape is, "What is the point of writing any software?  There is already lots of software that exists I could use."  Or indeed, "What is the point of writing?  Things have already been written."  I can no more enumerate every use for OpenGL than I can list every novel that still needs to be written.  
> **username_4**: Since you are learning graphics, my advice is to just go for Vulkan directly and don't waste time on directx. The latter is a vendor lock-in API while the former is quite open and cross platform. Besides, dx11 is ancient technology, and dx12 is pretty much the same as Vulkan, except only limited to windows, so just go Vulkan directly. (I'm a graphics developer at Google).  
> **username_0**: @username_1 it is true, the first thing would be to study graphical programming more deeply, to understand at what level of abstraction it is better to act according to the problem. I'm sure that by studying the use cases they will come out on their own. PS: math will be the first thing I will study, thank you :)  
> **username_0**: @username_4 thank you very much for the advice and congratulations for your career :)  

---

## 1 answers

### Answer by username_5 on 2020-05-10. Score: 4 | Accepted answer

This is a similar question to following: When do you need to cook? You can go to a restaurant. Why would you need to know woodworking? You can buy things from a shop.

There are two answers here

1. In order for you to claim ownership on some tech. You need to build it. This can be simply because you have chosen to sell a competing product or need to lower your licensing fees.

   Note you dont have to be big to benefit from this.
2. You have custom needs that are not being met by other things. Even if you mainly work in a engine by others you may still need to generate some form of asset or shader to handle some aspect.

   Not because you exactly might need it but it makes the product better or it mskes your life easier. Also: If you dont practice then you can never recognize when you could have help in the custom thing.

It is really hard to come up with concrete situations where you need either. Because once that situation arises it gets snatched up by someone so you nolonger need it.

The thing is the world isnt as ready as you think. And technology has a very nasty habit of dropping you entirely when you need something more. You might suddenly realize that because you stepped slightly out of bounds of your tech you now need to implement a very large chunk of the system since your not covered by their legal framework or their particular implementation does not extend neatly.

There is also a third option. But you have dismissed it out of hand:

3. Because you can! I mean ive done a lot of things with this principle.

   But if you mever do anything like this you might not be invited to do so in the future

PS: None of this is valid fuel for saying i dont need to learn this. Even if you never use stuff like this knowing it can be done can be extremely valuable. Learning more makes you undertand what can be done better.

> **Comments:**
> **username_0**: thank you, I really appreciated your explanation, your 2 answers are something that made me reflect, also on other types of projects. Furthermore, you made me understand how I had completely missed a fundamental point: you cannot understand what a tool is for if you don't know it and you don't know anything about its environment.  

---

