2016-09-18 4 views
0

текущие драйвера OpenGL использовать скомпилированные кэш шейдеров находится в C:/Пользователи/имя/AppData/роуминг/AMD | NVIDIA/glcache/...как очистить кэш шейдеров OpenGL

, к сожалению, это вызывает сбой программы почти каждый раз, когда я меняю некоторые из шейдеров, которые я исправляю, вручную удаляя кеш шейдера.

вопрос в том, есть ли хороший способ очистки кеша, когда я отправляю новую версию программы? любое расширение opengl для управления кешированием? или какой-то волшебный api из операционной системы? или, по крайней мере, правильный способ найти папку?

Другой вопрос: какие ключи используют драйверы для идентификации отдельных шейдеров? так что я могу как-то менять ключ каждый раз, когда меняю шейдер.

ответ

3

К сожалению, он вызывает сбои в работе программы почти каждый раз, когда я меняю некоторые из шейдеров, которые я исправляю вручную, удаляя кеш шейдера вручную.

Если это происходит, у вас есть что-то серьезное нарушение вашей системы и/или установки ваших драйверов. Этого не должно произойти, и если это произойдет, то это не то, о чем должна заботиться программа OpenGL.

другой вопрос: какие ключи используют драйверы для идентификации отдельных шейдеров?

Обычно хеш, полученный из источника шейдера АСТ (т. Е. Просто добавление пробела или переименование символа, не приведет к трюку).

вопрос в том, есть ли хороший способ очистки кеша при отправке новой версии программы?

Не то, чтобы я знал. Шейдеры являются «черным ящиком» в спецификации OpenGL. Вы отправляете исходный текст GLSL, он компилируется и привязывается, и все. OpenGL не указывает такие вещи, как кеш шейдера или внутреннее представление.

любой удлинитель opengl для управления кешированием?

Nope. Технически поставщики могли добавить для этого расширение для конкретного поставщика, но никто этого не сделал.

или какой-либо волшебный api из операционной системы?

Ничего официально не указано для этого.

или, по крайней мере, правильный способ найти папку?

Опять ничего об этом не указано.

+0

Это случилось на моем компьютере (amd gpu) и на компьютере моего друга (nvidia), и еще один. таким образом, я предполагаю, что это не связано с os и драйвером. если это не распространенная проблема, как вы заявляете, это оставляет мне проблемы с моей загрузкой/компиляцией/ссылкой кода shader, правильно?я тщательно проверяю любые ошибки, также я тестирую его с помощью контекста отладки и обратного вызова ошибки, а также никаких ошибок. что бы вы предложили дальше? должен ли я изменить вопрос и добавить код загрузки? – Tomas

+0

@ Томас: Да, ваш код загрузки шейдера поможет. Также backtrace разбитого состояния вашей программы поможет: Скомпилировать в режиме отладки и запустить с помощью отладчика. Visual Studio предлагает окно трассировки стека, в GDB вы можете использовать команду «backtrace». Вы не увидите, что происходит в драйвере, но вы можете увидеть, какие шаги предприняла ваша программа, которая привела к сбою. – datenwolf

Смежные вопросы