четверг, 10 марта 2011 г.

GlukoGL

Волею судеб угораздило меня отлаживать OpenGL рендер на iMac-е под Windows 7. GLSL-шейдеры, которые на этой же машине под управлением MacOS X компилируются и компонуются влёт, под Windows с драйверами ATI делают это со страшными тормозами. Вот для примера вырезки из лога: http://pastie.org/1655135

Несложно подсчитать, сколько приходится ждать, пока всё это счастье запустится и программа что-то нарисует. К тому же это только небольшая часть шейдеров, они собираются "на лету", ибо ждать, пока соберутся все часто используемые пары, не хватит даже ангельского терпения. К слову, под MacOS X несколько сот пар этих же шейдеров компилируются и компонуются за 8 секунд.

Похоже, GLSL-компилятор Apple писали самостоятельно, и он невероятно быстр. Наверное, компилирует в какой-то промежуточный код, который дальше переколбашивает атишный драйвер, а может, в Apple сами написали драйверы под железо маков. А вот для Windows драйвер писали криворукие индусы, ппц.

Update
Ура, мой DirectGL заработал! Наконец-то.


5 комментариев:

  1. Ну не знаю кто и как их писал, но у меня например компиляция 10-ка шейдеров на Windows 7 DX10 занимает около 3-4 секунд.
    Кстати под маками юзается ли какой-нить локальный кеш шейдеров для ускорения загрузки. Я просто не совсем представляю себе ситуацию когда допустим игра написанная под DX использует кеш шейдеров, а порт на GL как в таком случае, ведь скомпилять все пары этож жесть.

    ОтветитьУдалить
  2. В проекте приблизительно 200 вершинных и 600 пиксельных шейдеров. Ну а пар просто дофига может быть.

    А какой кэш может быть с GLSL?

    ОтветитьУдалить
  3. Я думал что у Маков есть какое-нить свое расширение для такой поддержки. Т.е. на подобии ARB_get_program_binary.

    ОтветитьУдалить
  4. Нет, но как показала практика, там можно жить и без него. Кстати: http://developer.apple.com/graphicsimaging/opengl/capabilities/

    ОтветитьУдалить
  5. Кстати на маке включение стенсил-теста в 8x MSAA вешает ОС намертво. Недавно вырезали фичу, так что радость тоже та ещё.

    ОтветитьУдалить