Войти
ПрограммированиеФорумГрафика

OpenGL :: Расшаривание ресурсов [РЕШЕНО] (3 стр)

Страницы: 1 2 3
#30
1:59, 21 мар. 2018

Похоже, что проблема в шейдерной программе. Выкинул списки шейдеров из материалов, чтоб шейдерные программы были сами по себе и для разных материалов не компилировались одни и те же комплекты шейдеров.
Что-то подобное, как "Blinn", "Phong" и "Strauss" в 3D Studio MAX. Вот тут-то оно себя и проявило - у всех объектов, которые используют данную шейдерную программу отвалились текстуры, в чём дело, пока так и не понял :)
Видимо раньше, когда данная шейдерная программа компилировалась или загружалась несколько раз, толком не работал только её последний экземпляр, а теперь косячит её единственный экземпляр... Однако!

Изображение удалено

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


#31
21:25, 21 мар. 2018

Daniil Petrov
Все gl* вызовы (в твоем случае архиважный glTexImage2D) должны быть в том же потоке, в котором был создан контекст. Грузи ресурсы в другом потоке, сохраняй байты, а glTexImage2D потом вызывай в основном.

#32
14:29, 22 мар. 2018

Всё, разобрался! Косяк был мой :) говорил же, что при написании менеджера ресурсов и переписке кучи кода на мультипоточность что-то упустил :))) цвет, на который умножаются текстуры загонял не тот.

А в целом я скажу так: контекст OpenGL расшаривается нормально, ресурсы расшариваются нормально, не расшариваются только контейнеры, поэтому оборачивать VBO в VAO уже приходится в основном потоке.
Шейдерные программы кэшируются так же прекрасно, только шейдерная программа сохранённая в одном потоке почему-то не совместима с другим потоком, поэтому использовать нужно в том же потоке, в котором она компилировалась.
Только оборачивать их в Program Pipeline нужно уже в основном потоке по той же причине не расшариваемости контейнеров.

nonamezerox
> Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова все уже загружено?
Это всё ерунда, всё прекрасно загружается даже во время рендеринга, видно даже, как не сразу появляются стороны скайбокса (CubeMap).

Если ручки растут не из жопки, то во всём можно разобраться и нормально реализовать, а нытьё про то, что DX лучше, а OGL говно, удел жалких неудачников.
Мне наоборот OpenGL очень понравился, чего не скажешь о DirectX, когда с ним полностью разберусь, перееду на Vulkan и буду учиться максимально всё реализовывать вручную.

Страницы: 1 2 3
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.