Lol@Galopin dissing the best tools available. The main reason OpenGL is used over DX in the science world it's because it's free and open. hence a shitTon of soft/modules are based on it. DX as barely any support for anything related to science. Also DX is as much an outdated technology as OpenGL is : DirectX was designed to only update on user input, like in your typical Word/Excel application. Of course starting from the ground up again a full new API specially dedicated to the latest graphic card would be "the best", but the amount of "legacy" man hours that expanding on older API and paradigm made the parallelized-computing world the way it is : DirectX for commercial applications (mostly video games) OpenGL for non-recreative use.
I know some people will disagree, but I feel like DirectX has been removing feature after feature, which makes the API smaller, sure, but is missing so much functionality.
For example, with DirectX12 (or earlier for that matter) you can't even load an image. I can't imagine many games that wouldn't need texture maps, why not include this feature? What about text rendering? You could do it with DX9, and then MS removed it. Then they recommended using Direct2D interop which was complex and slow. So you end up having to use hacks (like having simultaneous DX10 and DX11 contexts) or reinvent the wheel for stuff that really should be included.
Sure, if you work at a huge studio with dozens of engine programmers maybe you can roll with that, but for small indies it doesn't make sense to spend all your time coding basic things like loading a texture with mip-mapping or whatever. Better off just going with Unity or Unreal and save yourself a huge headache. Though, even saying this, I still sometimes go back to looking at lower level solutions like straight DX12 (though I realize it's crazyiness).
@cybereality, you were right, disagreement incoming :)
They do not include image loading because there is as many way to load an image than there is games on Steam. In the past they had d3dx, doing such things like image load or font rendering, a nasty piece of library that the usual advice was do not use it :smile:
Last version was june 2010 and It is deprecated since they put the sdk in the windows kit in visual studio 2012:smiley: They now provide an open source github for all the helpers you are asking for.:blush:
And you overbudget the time to spend on basic uploading of a texture, a well craft upload (not talking about dynamic streaming or fancy stuff here) is more or less a page long function. A little longer on dx12 but for indies, they should stay on dx11 anyway.
Same for font, a provided system is of no good even for indies, you will always write something inline to your ui rendering anyway. And with something like stb_truetype.h, you are one file away to rasterize glyphes into a texture to draw some text. That's not a AAA studio privilege :)
Yeah, I get that. It just seems that Microsoft is in a key position, haven written the OS and graphics API, to potentially also write the best and most optimized image loading code, but they don't. Nearly every developer needs to load images in a 3D game, why do they have to start from scratch?
I know some people will disagree, but I feel like DirectX has been removing feature after feature, which makes the API smaller, sure, but is missing so much functionality.
It's not so much missing functionality, as putting more control in the hands of the developers. It puts a lot more onus on developers to do the right thing, but the result is the ability to do more stuff with the GPU, and take better advantage of multiple CPU cores to create work to keep the GPU busy.
For example, with DirectX12 (or earlier for that matter) you can't even load an image. I can't imagine many games that wouldn't need texture maps, why not include this feature? What about text rendering? You could do it with DX9, and then MS removed it. Then they recommended using Direct2D interop which was complex and slow. So you end up having to use hacks (like having simultaneous DX10 and DX11 contexts) or reinvent the wheel for stuff that really should be included.
DX12 images are managed by the ID3DResource interface, which I believe can encapsulate either a buffer or an image. Text rendering is never the job of the GPU, especially since there's no hardware specific functionality to accelerate it. Virtually all modern GPU based text rendering is done using signed distance field fonts, and the implementation of those is left up to the software developer.
Sure, if you work at a huge studio with dozens of engine programmers maybe you can roll with that, but for small indies it doesn't make sense to spend all your time coding basic things like loading a texture with mip-mapping or whatever. Better off just going with Unity or Unreal and save yourself a huge headache. Though, even saying this, I still sometimes go back to looking at lower level solutions like straight DX12 (though I realize it's crazyiness).
Unfortunately, Unity and Unreal aren't suitable for things like open source projects. Equally unfortunately, none of the existing Open Source 3D engines are really targeting modern API backends, like DX12, Metal and Vulkan, at least not yet.
If you really want to get into a modern graphics API, I would suggest targeting Vulkan, not DX12. Their API's are similar enough that knowledge you already have from DX12 will translate very effectively and you'll essentially get the ability to target other platforms for free.
Brad Davis - Developer for High Fidelity Co-author of Oculus Rift in Action
Yeah, you are probably right. I understand that maybe text rendering is too high level for a graphics API, I just think it would be helpful if more features were included.
I did have some interest in Vulkan, but it seems really early right now and the cross-platform driver support appears weak (especially when cross-platform is the main reason to use it over DirectX12). Maybe I will look into it more as I just took a cursory glance.
Vulkan is nothing more than dx12 at a few details and worse driver driver, but with your complains about a better frameworks around the core API, you really want to stick to dx11 or gle
A
Anonymous
June 15, 2016
Maybe we will end with a conclusion that the best graphic API is CUDA, because you can do anything you want and it is de-facto a parallel C ;-) ? And you control EVRYTHING . There are even some nice Rift application in CUDA (cube mapped 3D images - Capsule). I had written a CUDA 8k video decoder with Rift VR output myself ... But I am afraid this discussion is going to far from what was the original question - where to start for a beginner ...
Vulkan is nothing more than dx12 at a few details and worse driver
Vulkan, Mantle (now defunct), Metal, and DX12 basically all have very similar APIs, not because they're copying one another (although Mantle played a crucial role in the creation and evolution of Vulkan) but because they're exposing the underlying functionality of modern GPU hardware.
Brad Davis - Developer for High Fidelity Co-author of Oculus Rift in Action