Additive Blending Conclusion
The great news is so far not a single 3d card has failed to accomplish additive texturing through at least one API. A couple (namely Macs) appear to fail due to not being able to hardware accelerate openGL for some reason or other, but this is a tiny failure rate, and shouldn't be of much concern.
On the PC side, the majority of 3d cards support additive blending in any API. In fact bar one or two models it is only the Radeon 9000 range of cards that behave differently, the key difference being their support for 8 textureunits. However every card was found to support the feature if DX5 was used, so it provides an excellent fallback at the cost of some performance. Better still the self diagnosis tool apparently functions flawlessly (exception being openGL) and can be used to automatically detect the correct settings for the card and API. Unfortunately in openGL there is no option but to include the user in the decision making as to what setting is required to produce the effect.
On the Mac side things are a little more awkward. Because self diagnosis doesn't work with openGL, and due to the unreliability of getHardwareInfo, there is no option but to include the user in determine the settings required. However some intelligent predications can reduce the number of cases presented to a user for checking. For example checking the basic model name of the users machine and using a look up table that suggests its probable max textureunits.
The overall methodology works, just as long as you take into account a cards max textureunits, then current API, and whether your on a PC or Mac, the same technique works in all case. That being, fill layers with a dummy texture up to the textureunits (in DX5 this is always 1), then place the additive texture in the next layer. The only time this will fail is if the card supports 8 or more textureunits, then the two passes cannot be accomplished from within a single shader, and apparently nextshader does nothing to fix the situation.
In terms of overall performance i'd rate the API's as DX7, openGL and DX5. In terms ease of use and diagnosis it is DX7, DX5 and openGL, as in openGL the user must participate in the process, whilst in DX7 and DX5 they don't (although its probably good practice to at least confirm with the user that the effect does work even when using SDT)
Key Points
Issues
All material including text, images, source, results
and demos are copyright Noisecrime Productions @ 1996-2003 Noisecrime Productions |