Subject: Additive on Macs 2004-02-27 - By NoiseCrime
Back Hi Mal,
First to those who are interested, the artcile and source to the demo Mal posted can be found here. http://www.noisecrime.com/develop/tutorials/additiveblend/
To recap To date no PC running in DX5 has failed to produce additive blending using maxTextureUnits+1 to place the additive texture into.
On a PC, any card that supports 8 texture units will not be able to produce additive blending in DX7
On a Mac additive blending is supported in openGL as long as the card has less than 8 texture units. However the gethardware() command is unreliable and does not return the correct maxTextureUnits.
When getting the image of the sw3d member on a mac, you always get back a software openGL version (not software), which invalidates automatic checking.
This means on a Mac, there is no automatic way of determing if it supports additive blending, you have to ask the user, and basically cycle through which texture unit to place the additive texture into.
Most Mac cards, if not all will support aditive belnding, its just the developer has no gauranteed method of knowing which layer to place the additive texture. One idea was to use the cards name as a look up into a database where you would store the known maxTextureUnits. Sadly though naming appears in consistant and so is not gauranteed to work.
Basically then Macs are a bit of a bugger for additive blending. It will work, but you need to invent some method of getting the user to identify which layer provides the belnding affect. My outlook on this was that additive benldning would be off by default on macs, and the user had to turn it on through a preference screen. This screen would display a pre-generated additive blend of some scene or object, and then the w3d trying to implement additive blending. They have a simple 'yes' 'no' decision to make if the images match or not. If they don't match move onto the next texturelayer, if they do, then you can stop because you know which texture layer to use.
Two tips Firstly don't forget the user may have overriden the renderer API in the SW preferences Secondly that the num of texture units is API dependant. So if running in DX5 you will always get 1 for the maxtextureunits.
I've got another 50-75 results that I'll try and add to the tutorial results over the weekend.
Hope this helps
Noisecrime 2004
__ ____ ____ ____ ____ ____ ____ ____ ____ ____ Dir3d-l mailing list Dir3d-l@(protected) http://nuttybar.drama.uga.edu/mailman/listinfo/dir3d-l
|
|