Why Microsoft shouldn't write APIs

Started by
11 comments, last by sfsdfd 21 years, 12 months ago
ARGH! I''m so sick of wasting hours debugging a strange result from a DirectX API, only to find out Microsoft''s documentation is wrong. Tonight marks my FOURTH and FIFTH instances of this that I''ve encountered. Special heads up to DirectPlay Voice fans... --- First one: About a year ago, I was using DirectDraw. I tried using some of the cool software rotation algorithms (down to 1/10th of a degree!) that DirectDraw claimed to support... but they kept bombing out. I spent hours testing lots of possibilities (different color depths, degrees vs. radians, even different video cards!), only to learn from outside searches that MS had actually **NEVER IMPLEMENTED** this feature. MSDN docu failed to mention this. Second one: DirectDraw also claimed to support rougher rotation (90, 180, 270 degrees only) in the software renderer/HEL. OK, I figured, this has to be an easier operation than 1/10th-degree stuff, so it''s GOT to be supported, right?... WRONG - also not supported, despite MSDN docu to that effect. Third one: This one''s huge. Direct3D lists "robust software emulation drivers" as one of its hallmark features. BULLSH*T! Microsoft actually yanked its software rasterizer completely from DirectX8! There ARE *NO* software emulation drivers, beyond a few isolated D3D functions that can be relegated to software. Fourth one: DirectPlay Voice claims "Mixing Server" as one of its cool features. Sounds great - it''s actually the *primary* reason I started messing with this. Now I find that this is a TOTAL LIE. If you try starting a session as DVSESSIONTYPE_MIXING, you get back a DVERR_NOTSUPPORTED hresult. That''s particularly amazing because StartSession() doesn''t even list this as one of its possible hresults! Fifth one: The header file for DirectVoice defines DVID_SERVERCLIENT as a constant that you can use to send messages automatically to the DirectPlay Voice server (instead of having to query and remember the DirectPlay Voice ID of the server.) Guess what - you can''t do that - that option is unsupported. --- This is bogus. Four of these five instances are huge, gaping holes - stuff Microsoft flaunts as great features of DirectX, which in fact DirectX doesn''t support - not even a hacked-together implementation that runs poorly. No, there''s just NO support for these things. These are FLAT-OUT LIES. - David Stein
Advertisement
In general the whole point of DirectX is to expose what your *HARDWARE* can do and what it''s drivers support. They DO NOT emulate non-trivial things (which rotating a surface which may be in video memory can be)

MS Added things like rotation and alpha to the *API*, its the job of the *HARDWARE VENDORS* to expose the capability to the API via their drivers... thing is, none did!!! Partly because they don''t consider 2D features as being as important as 3D when it comes to selling more chips.


If you don''t like DirectX, there are other choices!. Some will even emulate features which hardware doesn''t support - albeit without telling you and at software or worse speeds.


FWIW, I for one thing the DirectX API has improved tremendously since the days of the extremely klunky DX3... How well hardware supports what the API exposes is another matter entirely.

--
Simon O''Connor
Creative Asylum Ltd
www.creative-asylum.com

Simon O'Connor | Technical Director (Newcastle) Lockwood Publishing | LinkedIn | Personal site

Any set of documentation for a complex computer related system has oversites, inaccuracies and flaws. Have you ever read any of Intel''s CPU docs?
as an addendum to one of Simon''s points:

did you actually check the caps for the listed problems. I''m not sure if there are caps for the things you mentioned, but I have a suspicion that there are. In most cases (at least with D3D), the API will tell you when something can''t be done (vs. just not working).

The title of your post should shed a little bit of light on this - Microsoft writes the API, not necessarily the support for the API. For example, DX8 has the concept of a software renderer, but no one has thought it worthwhile to implement it. There are similar issues with OpenGL and other APIs. There are many vendors that don''t implement features or implement them poorly. This has very little to do with the API supplier.

In fact, I''d argue that Microsoft *should* write APIs - because they are one of the few companies that has the muscle to force vendors to at least aim for some common functionality. Imagine the hassle if nVidia, ATI, and the others each had radically different APIs...
Author, "Real Time Rendering Tricks and Techniques in DirectX", "Focus on Curves and Surfaces", A third book on advanced lighting and materials
The pentium chip, the closest thing to a true random number generator ever. (The original pentium, not the newer ones)
As its free to develope with and use, I think its hard to critize MS for leaving out features with little interest from developers. They could have charged a royalty for use or sold a the SDK for $$$$ (lots). Although the documentation is annoying, I agree.

,Jay
So how do all these developers write their world class games then if the software is so bad?
lets the third one is not a problem nor something they actually advertised. ms never said there would a software rasterizer for d3d8, in fact they stated themselves that it was being removed since it was obsolete. many ppl have 3d accelerators, even if they are basic. a software rasterizer that supported all the d3d8 feature set (or even a decent subset) would be unacceptable to most and quite slow. it would be better for the developer to create there own. lo and behold you can actually do this. check the site for info on how to create your own d3d8 plugin rsaterizer which you can then use instead of the HAL. the robust software emulation driver they are refering to is juts that, a software rasterizer that emulates all of d3d8 for development purposes. basically to test features yoru card may not support or for hardware vendors to make sure the output the card shows is what ms wants the output to look for the operation. this helps keep all cards doing an effect to look the same and not have wierd differences that require workarounds.

as for the directdraw stuff, its up to the hardware vendors to support that.

and the directplay stuff. its funny, the ms sdk sample works fine for me, maybe your pc is messed up or you have problems you need to work out. i can create a mixing and forward server. the sdk sample is called VoiceServer and there is also a VoiceClient as well. and DVID_SERVERCLIENT is not even in the sdk help file which may be why you have problems using it.

so i guess the only problem you have with dx is that you dont know how to read the docs, nor understand the samples. furthermore i think you should stop using anything made by MS including windows and msvc++. switch to linux and use opengl. you will enjoy there docs much better, heh.
quote:Original post by Jason Zelos
As its free to develope with and use, I think its hard to critize MS for leaving out features with little interest from developers. They could have charged a royalty for use or sold a the SDK for $$$$ (lots). Although the documentation is annoying, I agree.

,Jay


They make more money by giving it away for free. Giving it away free means everyone will at least try it, if not use a lot. This means more Windows 95/98/XP etc sales, because that''s what most games are made for(except maybe consoles). Anyway, DirectX is one of their bread and butter technologies. They should at least make good docs.

---
Make it work.
Make it fast.

"Commmmpuuuuterrrr.." --Scotty Star Trek IV:The Voyage Home
"None of us learn in a vacuum; we all stand on the shoulders of giants such as Wirth and Knuth and thousands of others. Lend your shoulders to building the future!" - Michael Abrash[JavaGaming.org][The Java Tutorial][Slick][LWJGL][LWJGL Tutorials for NeHe][LWJGL Wiki][jMonkey Engine]
It may be beneficial for them to give the runtime away free with windows etc. But that doesn''t stop them charging games developers a fee for the SDK, something like the linux play station 2 SDK $200 . I cannot see any benefits for Microsoft in releasing it free other than the intention of knocking Unix back a peg or too, and that hasn''t seemed to happen.

Having said that, I wonder if Microsoft knew about its impending DX based console when writing the first DX design. That would be a good reason to release directX free, to give the XBox a headstart with games developers.

,Jay

This topic is closed to new replies.

Advertisement