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

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

Страницы: 1 2 3 Следующая »
ronnikoПостоялецwww14 мар. 201813:18#15
Daniil Petrov
Вот потому текстуры и пропадают !
+ Показать

Правка: 14 мар. 2018 13:18

AndreyПостоялецwww14 мар. 201813:27#16
Daniil Petrov
> Объект, использующий какие-либо ресурсы, добавляется в очередь на рендеринг
> только после их полной загрузки. Пока модели, текстуры и шейдерные программы
> загружаются, у рендера к ним нет никакого доступа.
аха, ты сделал даже проще и правильней. В таком случае пробуй упрощать код до минимума и искать ошибку. Еще попробуй GL_ARB_sync, возможно поможет.
nonamezeroxПостоялецwww14 мар. 201813:30#17
Daniil Petrov
> Объект, использующий какие-либо ресурсы, добавляется в очередь на рендеринг
> только после их полной загрузки.

А как ты определяешь, что произошла загрузка? 

Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова все уже загружено?

То что вызвана функция опенгл не означает, что то действие за которое эта функция отвечает произошло.

Правка: 14 мар. 2018 13:34

Daniil PetrovПостоялецwww14 мар. 201814:13#18
Andrey
> Еще попробуй GL_ARB_sync, возможно поможет.
Как его использовать?

nonamezerox
> Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова все уже загружено?
А как проверить? Честно говоря, я так и думал, так что ты мне поднял веки :)))

innuendoПостоялецwww14 мар. 201814:15#19
Daniil Petrov
> Как его использовать?

ты когда же доки начнёшь читать ?

Daniil PetrovПостоялецwww14 мар. 201814:21#20
innuendo
> ты когда же доки начнёшь читать ?
В доке нихрена не понятно :)
innuendoПостоялецwww14 мар. 201814:23#21
nonamezerox
> Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова
> все уже загружено?

подожди, glBufferData может работать асинхронно ?

AndreyПостоялецwww14 мар. 201814:25#22
nonamezerox
> Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова
> все уже загружено?
>
> То что вызвана функция опенгл не означает, что то действие за которое эта
> функция отвечает произошло.
именнно. Отсюда и куча проблем.
Daniil Petrov
>А как его использовать?
Я сам не использовал.Создаешь объект синхронизации glFenceSync в потоке загрузки, грузишь текстуру. В потоке потоке отрисовки делаешь опрос созданного объекта синхронизации через glWaitSync(не блокирующий вызов со стороны CPU). Можно поиграться с временм ожидания. Сброса объекта в начальное состояния нету, следовательно нужно удалять через glDeleteSync после получения статуса и снова создавать.
Подробности в спеках, прммеры можно еще найти.
Daniil PetrovПостоялецwww14 мар. 201814:28#23
Всё в общих чертах понял :) буду разбираться, о результатах извещу!
innuendoПостоялецwww14 мар. 201814:44#24
идиотизм, создавать себе проблемы на ровном месте
nonamezeroxПостоялецwww14 мар. 201815:48#25
innuendo
> glBufferData может работать асинхронно ?

Орфанинг же.

ну и да,

https://github.com/mesa3d/mesa/blob/3160cb86aa9234ff78e11fe7a00f3… bjects.c#L269

Правка: 14 мар. 2018 15:58

Daniil PetrovПостоялецwww15 мар. 20180:41#26
Не, это всё не то! Какая разница, в каком потоке грузятся ресурсы? Ведь, когда они грузились в главном потоке, точно так же никто не ждал, пока glBufferData прожуётся, тем более, что это относится к моделям, а не к текстурам.
У меня рендеринг сцены начинается сразу же, как отправляется имя файла локации на загрузку и все объекты по мере загрузки появляются на сцене. Всё нормально, косяк почему-то именно с последней в очереди текстуре...
Синхронизация тут точно не при чём, косяк появился до того, как загрузка ресурсов стала асинхронной. Сначала я выкинул загрузку ресурсов в RAM в другой поток, потом главный поток всё загружал в VRAM и только потом начинал выводить сцену, и уже здесь появился этот косяк... буду искать, где я допустил ошибку.
Потому что, когда я реализовывал кэширование шейдерных программ и оно у меня не шло, ошибка была с моей стороны. Но чуть более явная, чем в этой ситуации. Что же, чукча будет думать!

innuendo
> идиотизм, создавать себе проблемы на ровном месте
Я человек принципиальный и добиваюсь всех поставленных задач. Какой смысл мне делать движок так, как делают его другие, когда мне нужен именно такой движок, который нужен мне.
Если вы в своё время сдулись и не решили вопрос, то это отнюдь не значит, что я должен следовать вашему плохому примеру, тогда я точно никогда не сделаю хорошего движка, а у меня очень амбициозные планы на него.
Но ты не единственный, кто не осилил расшаривание контекста, это должно тебя утешать :))) кто-то писал, что не осилил кэширование шейдерных программ, но всё решаемо и зависит только от твёрдости решения :)

P.S. Большую часть движка я пишу сам, в чужие движки даже не заглядываю. Вопросы возникают только чисто технические, связанные с использованием каких-то определённых технологий.

Правка: 15 мар. 2018 0:52

innuendoПостоялецwww15 мар. 20189:06#27
Andrey
> Сброса объекта в начальное состояния нету, следовательно нужно удалять через
> glDeleteSync после получения статуса и снова создавать.

A sync object can be deleted by passing its name to the command

        void DeleteSync(sync sync)

    If the fence command corresponding to the specified sync object has
    completed, or if no ClientWaitSync or WaitSync commands are blocking
    on <sync>, the object is deleted immediately.

innuendoПостоялецwww15 мар. 20189:07#28
Daniil Petrov
> в чужие движки даже не заглядываю

не страдай фигнёй, посмотри Урхо чтобы не делать ещё 100-500 тем :)

innuendoПостоялецwww18 мар. 201810:45#29
Andrey
> именнно. Отсюда и куча проблем.

о как, почему тогда в DX11 нормально работает ?

Страницы: 1 2 3 Следующая »

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

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

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