Sign in to follow this  
KellerHood

OpenGL The state of Direct3D and OpenGL in 2012?

Recommended Posts

KellerHood    104
So, sorry if I'm posting in the wrong thread, or this question is off-topic or anything of the sort,
but,
What is the current state of the two major (and only, I'm pretty sure) graphics API's, direct3d and opengl? Which one is more popular among game developers? Or just developers in general?
I have seen more games being ported to Mac OS X, with the rise of Steam, games such as all the Valve games, and also many games are using OpenGL to be able to support mobile platforms such as Android and iOS as well. And while this isn't exactly prominent, WebGL is also seems to be slowly becoming popular (more popular than flash it would seem for games at least). But with Direct3D for both Windows platforms and the Xbox, not to mention XNA, there is also a lot to be seen in those areas.

So, my question is, is the market leaning to one API over the other? Which one? Is it shifting at all, or is it stagnant? Is there anything in either API that has promise for the future?

I basically am just curious about the current state of the two API's in comparison to the other.

Share this post


Link to post
Share on other sites
Promit    13246
Both work fine, D3D's much nicer, usually your platform dictates the choice. That's pretty much it. At the end of the day, learning modern GL (ie 4.0 and ES 2.0) prepares you for most of the non-Windows platforms you're likely to see, and that makes it a compelling choice even though the API itself is fairly shoddy.

Share this post


Link to post
Share on other sites
swiftcoder    18432
The API is largely irrelevant - if you learn one of (modern) OpenGL or Direct X, you should be able to pick up the gist of the other in a couple of days.

Provided, of course, that you actually learned the theory at the same time [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by swiftcoder

Share this post


Link to post
Share on other sites
bglanzer    482
In my own experience OpenGL is alot easier to learn for a beginner. DirectX is a little more diffucult. But like switftcoder said learn one and you should pick the other up pretty quickly.

Share this post


Link to post
Share on other sites
Promit    13246
I forgot to mention, also, that both APIs are essentially a minor part of your code these days. Once you've got the concepts down, it's more just a question of wiring up the API to do things the way you need. It seems like a really big deal as a beginner to be coding all this D3D or OGL stuff, but I can honestly say it's probably the most boring part of my graphics coding work. The API is just a machine I have to configure so that my CPU code and my GPU code talk to each other properly.

Share this post


Link to post
Share on other sites
MJP    19755
I can't speak for every game developer, but we work with whatever API is available on the hardware. Windows is the only place we have a choice, and we happen to use D3D11. I'm sure other studios use OpenGL on Windows. Personally you'd have to pay me a *lot* of money to choose GL over D3D11 on Windows, but that's just me. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Most people probably wouldn't care that much. Edited by MJP

Share this post


Link to post
Share on other sites
Krohm    5030
[quote name='bglanzer' timestamp='1336965089' post='4939950']
In my own experience OpenGL is alot easier to learn for a beginner. DirectX is a little more diffucult. But like switftcoder said learn one and you should pick the other up pretty quickly.
[/quote]I disagree. Even comparing oldschool GL to D3D9, there are very few things where GL is truly easier. My transition from GL to D3D9 has been rough at best, mostly because GL actually shaped my line of thinking to its model. In the end this does not matter: D3D11 provides a much better environment for learning and it's not like writing a transform shader is a big problem.

I think the state of GL is pretty sad. Not as sad as it was a couple of years ago when Mt. Evans was [b]not[/b] released and they gave us scraps but almost there. Well, at least they have feature parity. No wait, they don't (CS not part of the API as far as I understand).

Share this post


Link to post
Share on other sites
l0calh05t    1796
[quote name='Krohm' timestamp='1336979770' post='4939987']
No wait, they don't (CS not part of the API as far as I understand).
[/quote]

There is OpenCL which includes interop extensions for OpenGL...

Personally I very much prefer OpenGL (I hate the DX API, the left handed coordinate system, and the row vectors... why can't they use the same conventions used in pretty much every math book around?!), but considering the fact that nVidia has been crippling OpenGL performance on non-Quadro cards...

Share this post


Link to post
Share on other sites
Krohm    5030
Bingo! Are GL and CL the same thing? No. Can they interop? Sure, that's pretty different thing from CS anyway. Learn an ecosystem instead of an API. And write the code interfacing them.
BTW, shader driven D3D is column-major as well. But anyway, personal opinions are thing we could discuss a long way.

Share this post


Link to post
Share on other sites
mhagain    13430
These days there's very little difference at API level between modern OpenGL and modern D3D. They work in very much the same way and you'll be writing the same kind of code with each.

D3D has, at least since version 9, been column-major internally, and the D3DX matrix library has always been able to generate either LH or RH co-ordinate systems. These are complete non-issues.

OpenGL is certainly easier to get a first triangle on the screen, put a texture on it, light it and make it spin, but that pre-supposes that you're using immediate mode and the fixed pipeline. If you want to write high-performance code with non-trivial effects things become a lot more equal, with D3D edging ahead a little owing to less legacy API cruft and a cleaner, more sensible design (no bind-to-modify, separation of buffer/offset from vertex attrib definitions, explicit registers in shaders, etc). Nothing insurmountable, but somewhat annoying to have to deal with.

D3D still has better driver quality and better tools. Documentation is a mixed bag - the D3D9 documentation is excellent, D3D10 is mostly alright, and D3D11 has it's moments but can be quite dreadful in places, with some fundamental errors that persisted for far longer than they should have (I'm specifically thinking of DstX/DstY/DstZ in CopySubresourceRegion here). The GL documentation is quite good but lack of a downloadable SDK and searchable help file hampers it, IMO. The spec PDF is something, but not enough.

Share this post


Link to post
Share on other sites
bobbias    120
[quote name='BornToCode' timestamp='1337047893' post='4940268']
It is all about concepts. Once you know the concept an Api is just an Api.
[/quote]

Agreed. I'm learning opengl because I want to write games that are capable of being played on many different platforms, but I suppose that once I've really gotten a grasp on the fundamentals, a switch over the D3D shouldn't be too difficult.

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  

  • Similar Content

    • By povilaslt2
      Hello. I'm Programmer who is in search of 2D game project who preferably uses OpenGL and C++. You can see my projects in GitHub. Project genre doesn't matter (except MMO's :D).
    • By ZeldaFan555
      Hello, My name is Matt. I am a programmer. I mostly use Java, but can use C++ and various other languages. I'm looking for someone to partner up with for random projects, preferably using OpenGL, though I'd be open to just about anything. If you're interested you can contact me on Skype or on here, thank you!
      Skype: Mangodoor408
    • By tyhender
      Hello, my name is Mark. I'm hobby programmer. 
      So recently,I thought that it's good idea to find people to create a full 3D engine. I'm looking for people experienced in scripting 3D shaders and implementing physics into engine(game)(we are going to use the React physics engine). 
      And,ye,no money =D I'm just looking for hobbyists that will be proud of their work. If engine(or game) will have financial succes,well,then maybe =D
      Sorry for late replies.
      I mostly give more information when people PM me,but this post is REALLY short,even for me =D
      So here's few more points:
      Engine will use openGL and SDL for graphics. It will use React3D physics library for physics simulation. Engine(most probably,atleast for the first part) won't have graphical fron-end,it will be a framework . I think final engine should be enough to set up an FPS in a couple of minutes. A bit about my self:
      I've been programming for 7 years total. I learned very slowly it as "secondary interesting thing" for like 3 years, but then began to script more seriously.  My primary language is C++,which we are going to use for the engine. Yes,I did 3D graphics with physics simulation before. No, my portfolio isn't very impressive. I'm working on that No,I wasn't employed officially. If anybody need to know more PM me. 
       
    • By Zaphyk
      I am developing my engine using the OpenGL 3.3 compatibility profile. It runs as expected on my NVIDIA card and on my Intel Card however when I tried it on an AMD setup it ran 3 times worse than on the other setups. Could this be a AMD driver thing or is this probably a problem with my OGL code? Could a different code standard create such bad performance?
    • By Kjell Andersson
      I'm trying to get some legacy OpenGL code to run with a shader pipeline,
      The legacy code uses glVertexPointer(), glColorPointer(), glNormalPointer() and glTexCoordPointer() to supply the vertex information.
      I know that it should be using setVertexAttribPointer() etc to clearly define the layout but that is not an option right now since the legacy code can't be modified to that extent.
      I've got a version 330 vertex shader to somewhat work:
      #version 330 uniform mat4 osg_ModelViewProjectionMatrix; uniform mat4 osg_ModelViewMatrix; layout(location = 0) in vec4 Vertex; layout(location = 2) in vec4 Normal; // Velocity layout(location = 3) in vec3 TexCoord; // TODO: is this the right layout location? out VertexData { vec4 color; vec3 velocity; float size; } VertexOut; void main(void) { vec4 p0 = Vertex; vec4 p1 = Vertex + vec4(Normal.x, Normal.y, Normal.z, 0.0f); vec3 velocity = (osg_ModelViewProjectionMatrix * p1 - osg_ModelViewProjectionMatrix * p0).xyz; VertexOut.velocity = velocity; VertexOut.size = TexCoord.y; gl_Position = osg_ModelViewMatrix * Vertex; } What works is the Vertex and Normal information that the legacy C++ OpenGL code seem to provide in layout location 0 and 2. This is fine.
      What I'm not getting to work is the TexCoord information that is supplied by a glTexCoordPointer() call in C++.
      Question:
      What layout location is the old standard pipeline using for glTexCoordPointer()? Or is this undefined?
       
      Side note: I'm trying to get an OpenSceneGraph 3.4.0 particle system to use custom vertex, geometry and fragment shaders for rendering the particles.
  • Popular Now