Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OpenGL :: Расшаривание ресурсов [РЕШЕНО] (3 стр)

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

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

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

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

Роман ШуваловУчастникwww21 мар. 201821:25#31
Daniil Petrov
Все gl* вызовы (в твоем случае архиважный glTexImage2D) должны быть в том же потоке, в котором был создан контекст. Грузи ресурсы в другом потоке, сохраняй байты, а glTexImage2D потом вызывай в основном.
Daniil PetrovПостоялецwww22 мар. 201814:29#32
Всё, разобрался! Косяк был мой :) говорил же, что при написании менеджера ресурсов и переписке кучи кода на мультипоточность что-то упустил :))) цвет, на который умножаются текстуры загонял не тот.

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

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

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

Правка: 22 мар. 2018 14:46

Страницы: 1 2 3

/ Форум / Программирование игр / Графика

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

2001—2018 © GameDev.ru — Разработка игр