Sunday, October 19, 2008

Evangelism is hard

Some recent events reminded me how hard evangelism and product creation is.

The hardest moments the DirectX evangelism team faced when I was there occurred early in my career, in the 1st year:
1) The John Carmack .Plan file Dec 23 1996.
2) The Chris Hecker Open Letter June 12 1997.
3) The Alex St John firing June 24 1997.
John’s missive happened when I had been on the job about 4 months, Chris’s open letter about the 10 month, and then Alex’s demise at the 11-month mark in late June 1997.

It was a busy 1st year at MS for me, :-), and that was without the Hummer-ing through the construction sites on campus in Alex’s new toy; the Judgment Day II spaceship; or any of the other behind-the-scenes action.

These episodes taught me the truth of the likelihood that if something can go wrong it will; and later the value of positive action in overcoming negative waves. For instance, it took 3 years of hard work and programmable shaders before D3D had proved to the world it did have a reason to exist.

So recently when the OpenGL crew had the shoe on the other foot my first reaction (to the surprise of many I am sure) was sympathy and a measure of identification.

I am talking about the OGL 3.0 fooforah. Basically the OGL powers-that-be announced a plan for a 3.0 release to clean many things up, went dark, changed the plan, and then appear to have been a bit surprised that their major unannounced change of plan wasn’t received well when it was finally announced. Anything that has multiple threads including ones that run to 170 pages of posts is generating passion.

The lesson here is that even if it’s painful to disclose decisions as they happen, if you don’t the negative energy that builds up will need an outlet eventually.

One good thing for OGL to come out of that discussion is the idea of an independent SDK and movement on making it happen, something OGL has long lacked.

OpenGL has a big problem though, in that it isn’t cutting edge any more. While this can be a problem, it can also have advantages. Problematic because of the fact that innovation outside of extensions is slower; and thus OGL support for D3D10 level hardware is worse than D3D10 because there is no API support for new units like Geometry Shaders as the support is only available via extensions. Advantageous in that because of extensions OpenGL in some respects supports D3D10 level hardware better because it is available on both XP and Vista, and OGL does get full WDDM support on Vista, and OGL does not have texture format changes to disadvantage previous generation content. It can also be an advantage following since OGL can decide to fix other rough edges as they become apparent like the Pack/Unpack processor in OGL 2.0 (see section 3.3 and 3.4) for dealing with data type/range issues. This was a rough edge in D3D9 that was fixed in D3D10 with resource views.

It should be clear, though, that OGL 2.0 was a reaction to D3D9. You cannot be cutting edge and be in reaction mode, and you cannot simply depend on extensions to bail you out.

Extensions come with their own cost and are definitely a dual-edged sword. Originally, if I recall, extensions were aimed at providing new functionality not in the core and if they were proved to be “worthy” they would become part of the new core. In practice they have been used to expose single vendor only features that never make it into the core. So OGL Extensions may be good in one sense, but they are broken in another sense and can cause serious issues merely by their existence ( see issue 2 ). You shouldn’t need dynamic memory allocation and a full parsing system to determine what your rendering APIs are. And a new driver shouldn’t break a game like that.

In that sense it’s a good thing that D3D has held the line and not officially allowed extensions. Even though there are unofficial ones if you know whom to ask and if they decide to share with you. And I acknowledge that policy is a little less democratic than the OGL extension policy of being open to all comers.

Sigh. It’s just tough some times finding the golden mean. So to close this post, the OGL guys have my honest sympathy.

2 comments:

risa2000 said...

It reminds me late 1998 when I was to take decision on which 3D API to use for small visualization app. After short eval. of D3D and OpenGL, I remember only the strong feeling that only masochist would use D3D. :)

It is interesting to see how things changed over the time. Seems to me like David against Goliath and Goliath was not Microsoft on this one.

The other thing I recall from that time. There was interesting piece of hw coming from Intel called i740. Even though it was not very popular (due to various reasons), it seemed to have very good OpenGL implementation. Compared to ATI or 3Dfx Voodoo at that time at least. I did most of the development on this card - it even run vertex arrays correctly. And it run on AGP 2x with sideband enabled :).

Phil Taylor said...

Risa,

Thanks for your comments and thanks for the trip in your personal way-back machine. I agree the landscape is quite different now.

And thats an interesting observaton about the i740 and driver support, which has always been an issue for the community. Time will tell if the LRB driver can measure up, but here is hoping :-).

Phil