Sign in to follow this  
Followers 0
Migi0027

API Wars horror - Will it matter?

29 posts in this topic

Hi guys,

 

as you know, there is this war called the api wars, which will probably stay there for quite long. When looking at the popular companies now, such as CryTek, Epic Games and so on... Their game engines are focused on DirectX (Direct3D), weather it is because the marketing or because d3d has an advantage I'm still not quite sure off yet.

 

As a lone developer, or a shy one, I personally use DirectX. I can't exactly remeber why i picked dx, but this may be why:

 

As I was younger, the way I discovered Game Engines was to find a popular game on Wikipedia, and then read the page, and almost all the games I found used Directx/3D, so I guess that's why I chose it.

 

I have a small engine myself, which has been through alot, using C++ and Directx, and I have had a great pleasure in programming it, as a hobby. But then I became so worried when I started reading that OpenGL is better because it is portable and sometimes faster, blablabla... And then another one where James Camarack admitted that D3d is faster that OpenGL. But my real worry is, that when going to high school/university, I've read that they use OpenGL, so will I have to relearn it all? Or will it be easy as I'm already familiar with D3d? And how easy is it to convert a D3d project to opengl?

 

Actually one night I dreamt about this descision, and chose opengl, I think, which scares me happy.png .

 

So my questions are:

 

  • Why is Direct3D preferred by the large companies? (Dice, CryTek, Epic Games...)
  • Should I port my engine to OpenGL. (I have no thoughts of making my engine cross-platform)
  • Should I even worry about this? unsure.png
  • How does the future look for DX and OpenGL?
  • What API does PS3 use?
  • Is it normal to dream about API Wars? wacko.png

Well, thank you as always!

 

PS. My engine is in the signature if you want to know.

PS. I havn't spell checked this, going to do that the next morning.

0

Share this post


Link to post
Share on other sites
And then another one where James Camarack admitted that...

roflmao hahahahahahaha That one is saved for posterity.

 

EDIT: People, "James Camarack" sounds funny. That's all I have to explain about this post. I don't know why people keep upvoting/downvoting it, it just sounds funny, that's all.

Edited by TheChubu
-1

Share this post


Link to post
Share on other sites

Why is Direct3D preferred by the large companies? (Dice, CryTek, Epic Games...)

 
I'm not sure because I don't work in a large company, but I'll guess that's the API they used in their previous projects and since it works and OpenGL won't give any big advantage why bother switching to OpenGL?
 
Also I'm guessing that the XBox 360 Direct3D version is more similar to Windows Direct3D than OpenGL is to PS3 OpenGL-based LibGCM.
 
Or it might just come down to preference...
 
 

Should I port my engine to OpenGL. (I have no thoughts of making my engine cross-platform)

 
Unless you want to learn OpenGL or a new version is released with awesome features that Direct3D doesn't support why waste time that could be used to add a cool new feature to your engine?
 

Should I even worry about this? unsure.png

 
No. If you know Direct3D learning OpenGL is really easy.
It's mostly functions with different names that do the same thing. They both use shaders, vertex/index buffers, render targets, etc. The differences are small and it's easy to google the answers.
 
I would say its like learning Java when you know C#, it mostly works the same way.
 

How does the future look for DX and OpenGL?

 
As you can see from the new versions of Direct3D (11.1 and 11.2) the changes are mostly small improvements, nothing revolutionary is being released, and the same goes for OpenGL.
I'm pretty sure we won't see a completely redesigned API update like Direct3D 9 to 10 anytime soon.
 

What API does PS3 use?

 
A modified version of OpenGL (more specifically OpenGL ES if I'm not mistaken) called LibGCM, but I never used it. I'll let someone else give more info.
 

Is it normal to dream about API Wars? wacko.png

 
You might be wasting more time thinking about it than you should xD
 

 

And then another one where James Camarack admitted that...

roflmao hahahahahahaha That one is saved for posterity.

 


Its a crossover of James Cameron and John Carmack happy.png

Edited by TiagoCosta
2

Share this post


Link to post
Share on other sites

Microsoft likes to use DirectX to launch the newest OS they have for sale.  Microsoft has almost unlimited resources and lines of credit.  They can dump a billion dollars a year into the newest version of DirectX if they want to. 

 

Also if a game company wants to use some obscure new DX function they can call up somebody at Microsoft and have a programmer leased to them until the issue is solved. 

 

If the drivers for a major hardware company is having problems with a new DirectX API, You can be sure Microsoft will throw money at the problem to make it go away. 

OpenGL doesn't have this vastly wealthy champion to ride in and fix problems in a timely fashion.

 

If DX didn't run at least a little bit faster, then I'd have to ask, "where is all that money going?"  Of course newer features are often faster and more consistent across GPU's.

 

Personally, I'm not going to help MS black-ball people into buying a new OS. 

 

If you choose one or the other, I'd say you should choose which ever one feels most natural for you, I modify this point with a few more as follows.

 

I started with OpenGL because it made sense to me sooner than DX did. 

 

Now I also consider cross-platform issues.

 

I also now consider this to be an ethical issue as well. 

 

I do not like how Microsoft does business and I am not going to help them any more than I have to. This is no different then the idea of voting with your wallet.  If you do not like how they do business then don't support them any more than you have to.  If money is all you think about, then team up with MS and you'll likely be very happy as well.

 

If you feel that DX is the better API then use it, otherwise don't, or learn both. 

 

There is no "war", this is drama and rhetoric for people who are upset at having to learn more than one thing, sort of like-> "Use what I prefer or you're a stupid-head!"

Edited by Josh Petrie
-11

Share this post


Link to post
Share on other sites
Also if a game company wants to use some obscure new DX function they can call up somebody at Microsoft and have a programmer leased to them until the issue is solved. I'm sorry, but this world exists only in your mind. A lot of us are annoyed because DX support from Microsoft is the worst it's been in literally decades.

 

Really. This only exists in my mind.... If UbiSoft offers to pay Microsoft for one of their DirectX consulting programmers, you don't think that this will happen?

 

As for the rest of the insulting things you said to me, I'll respond with the following.  Promit, you're an idiot.  People like you are the reason sites like this have such bad reputations for being overpopulated with arrogant, condescending, know-it-all, half-wits.  You're one of the big-fish in this department.

Edited by Josh Petrie
-17

Share this post


Link to post
Share on other sites

Well, luckily there's a great answer already posted regarding GL vs D3D.
And like the article explains, it's a history lesson, and epic failure on OpenGL's part.
Though today Microsoft is pulling some very irritating behaviors lately of having DX 11.1 for Windows 8, and DX 11.2 for Windows 8.1; not to mention their API documentation has became worst on every iteration of the API.
If they keep doing it (and Khronos Group doesn't fall asleep AGAIN) then GL may get a boost once more (but a redesign is needed).
 

 

What API does PS3 use?

 
A modified version of OpenGL (more specifically OpenGL ES if I'm not mistaken) called LibGCM, but I never used it. I'll let someone else give more info.

 

LibGCM is a library for very low level GPU access. The provided (partial) OpenGL implementation for PS3 built on top of libGCM is very slow and useless, to the point developers just prefer to work with libgcm directly (and it's more flexible btw.

 

 

My bad huh.png That's what I remembered reading in the past, but like I said I never programmed for the PS3.

1

Share this post


Link to post
Share on other sites

My bad huh.png That's what I remembered reading in the past, but like I said I never programmed for the PS3.


At the start of the PS3's life time the fact a OGL|ES implementation existed was jumped on by the 'opengl everywhere!' gang and has since been reported as a fact the PS3 uses OpenGL... alas to this day the misinformation exists and thus this common mistake crops up sad.png
1

Share this post


Link to post
Share on other sites
Its a crossover of James Cameron and John Carmack happy.png

 

 

Oh dear... We've created a monster...

 

WITH CHAINSAW POWERED LASER BEAMS!

0

Share this post


Link to post
Share on other sites

 


If UbiSoft offers to pay Microsoft for one of their DirectX consulting programmers, you don't think that this will happen?

I'm an engine programmer at Ubisoft. DirectX consulting programmers don't exist. This doesn't happen.

 

 

AMD, Intel, Microsoft, and Nvidia, all have their own Field Application Engineers that are available to help optimise CPU/GPU codepaths for your product.
So yes, it can, and absolutely does happen. [i](although I'm in no way implying that marcClintDion is correct in everything he says obviously!)[/i]

Edited by RobTheBloke
0

Share this post


Link to post
Share on other sites

 


If UbiSoft offers to pay Microsoft for one of their DirectX consulting programmers, you don't think that this will happen?

I'm an engine programmer at Ubisoft. DirectX consulting programmers don't exist. This doesn't happen.

 

The only graphics consultants you get in are the AMD and NVidia guys and mostly only if you have a deal with them to do a certain feature for their hardware. And there is a whole lot of nasty that happens with these deals as well as these guys pick their respective rivals driver apart and ask you to do features they know are faster in their implementation just to keep on top of the performance lists if your game is a benchmark game.

Edited by NightCreature83
0

Share this post


Link to post
Share on other sites

AMD, Intel, Microsoft, and Nvidia, all have their own Field Application Engineers that are available to help optimise CPU/GPU codepaths for your product.
So yes, it can, and absolutely does happen. (although I'm in no way implying that marcClintDion is correct in everything he says obviously!)

I'm not sure about MS on the Windows side, but this is absolutely the case with the hardware companies, and for Xbox and PS devs too. That's partly what those NVIDIA/AMD splash logos on games are about. And developers DO get paid to support new DirectX versions and features. All the time. Quite a bit of money changed hands when DX11 was released, in order to have some games support it. The payers are simply the people who get the most immediate and concrete benefit from gamers needing the latest DirectX features. That's not Microsoft, it's the IHVs.

 

What Microsoft has done, historically, is to go out of their way to make DirectX development easy for small and large developers. And they did that very well for a very long time.

Edited by Promit
1

Share this post


Link to post
Share on other sites
Also if a game company wants to use some obscure new DX function they can call up somebody at Microsoft and have a programmer leased to them until the issue is solved. 

 

If the drivers for a major hardware company is having problems with a new DirectX API, You can be sure Microsoft will throw money at the problem to make it go away. 

OpenGL doesn't have this vastly wealthy champion to ride in and fix problems in a timely fashion.

 

Valve would disagree with you:

 

 

We’ve been working with NVIDIA, AMD, and Intel to improve graphic driver performance on Linux. They have all been great to work with and have been very committed to having engineers on-site working with our engineers, carefully analyzing the data we see. We have had very rapid turnaround on any bugs we find and it has been invaluable to have people who understand the game, the renderer, the driver, and the hardware working alongside us when attacking these performance issues.

 

(source: http://blogs.valvesoftware.com/linux/faster-zombies/)

 

Seriously, there is no big MS anti-OpenGL thing going on; according to Alex St John (who should know, and who has been long enough out of MS to be able to say what he wants) the sole reason for D3D was not shenanigans, it was internal conflict: the Windows 95 team wanted OpenGL, the Windows NT team had the license, Microsoft wanted Windows NT to take on competitors in the workstation market, Windows NT needed OpenGL in order to do that, Windows 95 having OpenGL would undermine NT's position, so the NT team didn't let the 95 guys have the license.  Without the license the only solution was a new API.  (Note that Windows 95 didn't properly get OpenGL until OSR2.)

 

Believe that or believe it not if you wish; personally it makes more sense to me than MS inventing a new (and almost universally reviled) API just for the hell of it, especially considering that they really needed OpenGL for that workstation market.  (If you've ever dealt with MS you'll know that they're fragmented enough to add to the plausability of this story; the fact that they're implementing WebGL in IE11 (admittedly layered on D3D11) is just further evidence.)

 

Regarding the state of OpenGL, reading issue #9 from the new GL_ARB_buffer_storage extension should give you enough of a feel for exactly what's wrong:

 

 

9) What is the meaning of CLIENT_STORAGE_BIT? Is it one of those silly hint things?

DISCUSSION: Unfortunately, yes, it is. For some platforms, such as UMA systems, it's irrelevant and all memory is both server and client accessible. The issue is, that on some platforms and for certain combinations of flags, there may be multiple regions of memory that can satisfy the request (visible to both server and client and coherent to both, for example), but may have substantially different performance characteristics for access from either. This bit essentially serves as a hint to say that that an application will access the store more frequently from the client than from the server. In practice, applications will still get it wrong (like setting it all the time or never setting it at all, for example), implementations will still have to second guess applications and end up full of heuristics to figure out where to put data and gobs of code to move things around based on what applications do, and eventually it'll make no difference whether applications set it or not. But hey, we tried.

 

This is the kind of thing that makes people trying to seriously use the API wince.  D3D has no problems specifying explicit behaviour, and the hardware vendors have to live with it; the end result is that you as a developer get none of that nonsense; when you ask D3D to "give me a dynamic buffer, make it write-only, make it fast" you get a dynamic buffer that's write-only and fast.

 

You want another example?  Did you know that the reason why glGetQueryivARB (GL_QUERY_COUNTER_BITS_ARB) was allowed to return 0 was so that Intel could claim GL1.5 support in hardware that didn't support occlusion queries?  This kind of stuff is just nuts.

 

Yes, you're right about MS's recent model of tying a D3D version to an OS version, which is one thing that could make OpenGL appear a viable option again, provided that the ARB don't screw things up.  Again.

1

Share this post


Link to post
Share on other sites

Most of the api are the same but they do have some difference for example there is no such thing as Pixel Buffer objects in DirectX. Just wanted to throw my two cent in there. But at the end of the day if you want to write GL api that looks very similar to DirectX11 it is not impossible. As this is something i am currently doing right now.

Edited by BornToCode
1

Share this post


Link to post
Share on other sites

Most of the api are the same but they do have some difference for example there is no such thing as Pixel Buffer objects in DirectX.

 

Because it doesn't need them.  They solve a problem in GL that D3D doesn't have (particularly D3D10+ where CopySubresourceRegion and UpdateSubresource are explicitly specified as asynchronous).  Likewise D3D has problems that GL doesn't have, but that's all just API fluff.

0

Share this post


Link to post
Share on other sites

 

My bad huh.png That's what I remembered reading in the past, but like I said I never programmed for the PS3.


At the start of the PS3's life time the fact a OGL|ES implementation existed was jumped on by the 'opengl everywhere!' gang and has since been reported as a fact the PS3 uses OpenGL... alas to this day the misinformation exists and thus this common mistake crops up sad.png

 

Yeah I still see that all of the time (especially on general gaming forums) and it drives me nuts. Hopefully the same thing doesn't happen to PS4.

1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0