Optimizing For Different Systems
Question submitted by (24 June 2000)
|Return to The Archives|
there's something bothering me since quite a time...
I'm coding 3d stuff since many years now...and in the recent time it was quite
possible to guess where the new 3d tech will go (not to far in the future..but
all card's specs were quite similar and the planned abilitys of newer 3d card
were heading in similar directions)
that way you could rather easily choose common path for optimizations and features to support..but nowedays where new ogl extentions áre created every now and then...
and if it's not the features than it's the drivers...when dealing with the latest voodoo board you have to use sorted compiled vertex arrays (sorted as if you did strips..but DON'T use em!!)..to get an reasonable output...(if you do it differen't you'l get 1/6 of the performance possible)...
there are so many different configs out there that you can hardly optimze your stuff..either you write an own rendering pipe for almost every card outthere..to realy support the features to their best or you only use what is supported most broadly...
how do you manage this when you're producing a professional(=produced to be sold) game??
This is another one of those questions that you're not going to like the answer
to, but when has that ever stopped me? :)
Game companies often keep stacks of video cards on hand for development & testing. This testing includes stability testing, performance testing, and to see if it rendered the right thing. If something ends up looking wrong, is slow or crashes on a certain video card, the problem is investigated. If the problem ends up being a bug in the game code, the code is fixed. If the problem ends up being a bug in the driver, then a newer driver is used or the manufacturer is notified. In come cases, some bugs just can't be fixed (for example, a card doesn't support a required feature of the game, hence, it renders the wrong thing.)
If a performance issue arises on one card, a solution is investigated that solves the performance issues of that card, without dramatically affecting the performance of another card. If you find that your performance on one card suffers dramatically, and the only way to fix it will affect the performance of other cards in a negative way, then the solution might be to add an option, and document which options work best with which cards.
If you can't afford to have a lot of cards on hand, then put your demo up for download or pass it to a few people that have different versions of different cards, and ask them to check it out for you. You won't always find all the bugs until the public gets their hands on it, but you'll at least be made aware of the obvious flaws. In the end, it all boils down to a lot of work, whether you're on your own or working for a game company.
Response provided by Paul Nettle
This article was originally an entry in flipCode's Ask Midnight, a Question and Answer column with Paul Nettle that's no longer active.