Значит, попытался я отладить работу программы на видеокарте ATI Radeon X1300.
И чёрт возьми, оказалось что это - просто Невыполнимая Задача.
Сначала я взялся за отладку чётких стенсельных теней и тут всё пошло гладко. Но при первых попытках заставить ATI нарисовать мне мягкие тени я напоролся на целый мешок, или нет, даже цистерну, нет... целый трейлер багов, конца которым не видно.
Работал я на Microsoft Windows Vista, Catalyst 7.9. Началось всё с того, что мягкие тени съедали производительность, но их попросту не было видно.
Немного повозившись, обнаружил пренеприятное обстоятельство - при рендеринге с блендингом в FP буфер кадра видеокарта обрезала результаты расчётов в промежуток [0..1]. Хотя по документации такое делать нельзя! Более того, подняв доки по расширению WGL_ATI_pixel_format_float, я вставил в код запрос вида
GLint FloatMode;
glGetIntegerv(GL_RGBA_FLOAT_MODE_ATI, &FloatMode);
Этот простой вызов генерировал ошибку OpenGL. Выходит, ATI не в состоянии правильно реализовать в драйвере даже свои собственные немногочисленные расширения. Формально железо поддерживает рендеринг в FP формат с блендингом, но кривой драйвер не даёт это сделать. Ладно, вернулся в Windows XP и решил протестировать Catalyst 7.9 для XP, а заодно скачал новейший драйвер Catalyst 7.12. И тут началось такое, что ни в сказке сказать, ни пером написать. Вот, полюбуйтесь на разнообразие багов:
XP, Catalyst 7.9. Как выяснилось, возникает из-за блендинга в fixed буфер кадра, блендинг между проходами. Этакие забавные сине-чёрные кольца аттенюации, которым неоткуда взяться в шейдере (шейдер пока вообще считает intensity и не имеет дела с цветом).
Тот же драйвер, но строчка glEnable(GL_BLEND) закомментирована. Конечно картинка рисуется неправильная, но зато видно, что сине-чёрные кольца пропали. Ну хоть обнаружил в чём баг :)
Тот же драйвер, попытка нарисовать мягкие тени. Глючит очень страшно, скриншот этого не передаёт, скорость в районе 1 fps. Похоже, что игнорируется тест трафарета при рисовании wedges. Ошибки с GL_RGBA_FLOAT_MODE_ATI под XP нет, хотя версия драйвера та же. Красным я обвёл области, где "видюха" всё-таки умудрилась рассчитать пенумбру! Мать её (видюхи то есть).
Ну и последний скриншот, надежда на Catalyst 7.12. Вот такая картинка получается при рисовании чётких стенсельных теней:
Код не менялся. Я просто удалил Калеку 7.9, перезагрузил компьютер, поставил Калеку 7.12 и снова перезагрузил компьютер, потом запустил программу. Вот такое вот освещение с новейшими драйверами получается, м-да. Имеет ли смысл вообще что-то переписывать и искать (возможные) баги в своём коде, если каждый раз старая песня, да на новый лад?
Поэтому, скорее всего, варианта мягких теней под ATI никто не увидит. Только чёткие, и то - под Windows Vista. Сначала я очень сильно расстроился, но обнаружив такую карусель багов, отдуши повеселился над этими картинками. Какие же кривые ручонки надо иметь, чтобы писать ТАКИЕ драйверы...
Ссылка