FXT1 is what is known as an open source algorithm, meaning that anyone can use it in any game and any hardware can support it if designed to. This means that unlike S3TC, there is no licensing involved. A hardware developer (such as NVIDIA) can say "Hey, we want to support FXT1!" and they can do it without worrying about any costs. They just do it. Rather nice and cheap if you ask me. Also, any game developers can use it and even home users can covert their games textures to the FXT1 format via a Photoshop plugin. A nice move in my opinion.

Just how does FXT1 work? Well it uses four different algorithms. I'll leave it to 3dfx to explain these:

CC_MIXED (similar to other texture compression schemes): A 4x4 texel block is represented by two bits-per-texel for opaque textures. Additionally, each block has two 16-bit colors stored in an RGB 565 format. The two RGB 565 colors and two additional colors (created by interpolating between the two RGB 565 colors) form the primary colors for this texel block and its associated four color lookup table. A 2-bit index is used to determine which color from the lookup table will be used for each texel in the 4x4 block. Transparent textures are created by making one of the four colors transparent.

CC_HI (best for spatial resolution): A 4x8 texel block is represented by three bits-per-texel for opaque and transparent textures. Each block stores two 15-bit colors in an RGB 555 format. The two RGB 555 colors and five additional colors (created by interpolating between the two RGB 555 colors) form the primary colors for this texel block. Additionally, an eighth color is defined to be the transparent color. A 3-bit index is used to determine which color from the 8-entry lookup table will be used for each texel in the 4x8 block. 

CC_CHROMA (good at complex color areas): A 4x8 texel block is represented by two bits-per-texel for opaque textures. Each block stores four 15-bit colors in an RGB 555 format. All four colors are used directly with no interpolation to form a 4-entry lookup table. The 2-bit index assigned to each texel in the block is used to determine which of the four colors is assigned to each individual texel. Note that Colors4 only applies to opaque textures, as it does not support transparency.

CC_ALPHA (gives the best control over complex alpha transparencies at four bits-per-texel): A 4x8 texel block is represented by two bits-per-texel for opaque and transparent textures. Each block stores three 20-bit colors stored in a 5555 format. The first and second 20-bit colors are used for the primary colors of the left 4x4 block, while the second and third colors are used for the primary colors of the right 4x4 block. Two additional colors are created in each block by interpolating between the two primary colors for that block. A 2-bit index is assigned to each texel in the block and a lookup table is used to determine which color is applied to each texel. 

It is interesting to note that the CC_MIXED is very much similar to S3TC. Actually, there are really only minor differences between the two. FXT1 was actually developed prior to the launch of S3TC however. So the question of how they are so similar arises. Well apparently, both S3TC and CC_MIXED are based on what is known as BTC, a technique that was introduced several years ago in a paper at Siggraph. It is very interesting that both S3 and 3dfx came up with something so similar.

While it all looks very good so far, there are a few serious concerns that I have. First is that 3dfx does not allow an adjustment in the amount of compression used. It is pre-calculated so an exact amount of compression is used for every texture. So a 32-bit texture will have 8x compression, a 24-bit 4x and a 16-bit 2X. Because they are unchangeable, any image quality loss resulting from the compression will present and the same on every texture. Normally a game developer can adjust the amount of compression used to fit their needs, but 3dfx isn't allowing this. On the fortunate side of things, unless you really look close (perhaps even to the point of zooming... I haven't seen it in a game yet so I can't accurately comment) you won't likely notice the loss. However, it should be noted there that while allowing the rate of compression has its advantages, there are also problems with it. Basically, having a fixed compression ratio is good since it means that you know exactly how to find all texel data. Variable compression algorithms can result in major trouble in finding a specific texel inside the compressed data. 3D accelerators access textures on a per texel level (you might need one texel and not one around it). In general, texture compression is based on pallets so they are always fixed. 

An issue that concerns me even more is developer support. While 3dfx is quick to point out that it is free to anyone and is cross-platform, I still wonder if FXT1 will really catch on. S3TC has been out for about a year now and support is just now developing. Will FXT1 have the same problem? It has to be figured that the developers who are now supporting S3TC/DXTn will not be so quick to jump on the FXT1 bandwagon, even with the advantages it brings. And beyond that, if you consider that no other chip maker has support nor is planning support (this is based on the fact that FXT1 is just being announced) and that there will be some time before support develops, even more questions come up. Really one of these is the issue of a compression platform. There is a very strong chance that S3TC will become that platform of choice simply based on the fact that it has been around for a year longer than FXT1. While I'm not saying this will be the case, I'm simply stating it as a possibility.

Overall though, FXT1 looks interesting, though certainly not earth shattering.  The question of developer support is really the big issue.  Even so, FXT1 is certainly a technology that I hope both hardware and software developers will pickup on.  Its so open that anyone can use it, and that is really the great thing. Really though, the most important thing is that some type of texture compression is used.  Right now, FXT1 does seem to be the best solution though.  I guess we'll just have to wait and see what happens.