Недавно возникла необходимость повторно запустить свою первую 3D-демку, находившуюся в разработке с начала февраля по конец мая 2006 года. В то время разработка велась на Delphi7 для Window XP SP2 с использование DirectX 9.0c. После завершения разработки собранная демка была заархивирована и длительное время хранилась в файловом хранилище.
При попытке запустить её сейчас приложение немедленно упало без каких либо причин (а ведь работало же). Немного повозившись стало ясно что запускать требуется с режимом совместимости с Windows XP SP2 и отключенным Aero (через флаги режима совместимости). Демка запустилась, но вместо изображения весь экран просто закрасило одним цветом. При попытке перемещаться и/или осматриваться цвет менялся.
Решив все-таки не отступать я начал отладку PIX`ом и обнаружил интересную вещь. Для вывода SAQ (Screen Aligment Quad) использовался нулевой вершинный шейдер (SetVertexShader(Nil)). Исходные вершины предоставляли позицию, нормаль и текстурные координаты. Пиксельный шейдер требовал только текстурных координат. В то время всё работало как часы, но сейчас в пиксельный шейдер почему-то стали передаваться всегда нули. Исправление этой ошибки заняло всего 2-3 минуты, но осадок остался.
Кроме того т.к. сейчас Delphi я уже не использую, то пришлось его специально ставить, а под рукой был только XE3. Я было понадеялся что соберётся и им (код простой, никакого VCL не использует), но и тут меня ждало разочарование. Мало того что новенький Delphi умудрился получить исполняемый файл размером 1034КБ (версия собранная Delphi7 имела размер всего 159КБ), так он еще и отказался работать.
Вот такая вот она, обратная совместимость 🙂
P.S. А вот собственно и та самая демка: