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

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

Страницы: 1 2 3 Следующая »
#15
13:18, 14 мар. 2018

Daniil Petrov
Вот потому текстуры и пропадают !

+ Показать

#16
13:27, 14 мар. 2018

Daniil Petrov
> Объект, использующий какие-либо ресурсы, добавляется в очередь на рендеринг
> только после их полной загрузки. Пока модели, текстуры и шейдерные программы
> загружаются, у рендера к ним нет никакого доступа.
аха, ты сделал даже проще и правильней. В таком случае пробуй упрощать код до минимума и искать ошибку. Еще попробуй GL_ARB_sync, возможно поможет.

#17
13:30, 14 мар. 2018

Daniil Petrov
> Объект, использующий какие-либо ресурсы, добавляется в очередь на рендеринг
> только после их полной загрузки.

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

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

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

#18
14:13, 14 мар. 2018

Andrey
> Еще попробуй GL_ARB_sync, возможно поможет.
Как его использовать?

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

#19
14:15, 14 мар. 2018

Daniil Petrov
> Как его использовать?

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

#20
14:21, 14 мар. 2018

innuendo
> ты когда же доки начнёшь читать ?
В доке нихрена не понятно :)

#21
14:23, 14 мар. 2018

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

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

#22
14:25, 14 мар. 2018

nonamezerox
> Вызвал glBufferData и думаешь что на следующей строке кода после этого вызова
> все уже загружено?
>
> То что вызвана функция опенгл не означает, что то действие за которое эта
> функция отвечает произошло.
именнно. Отсюда и куча проблем.
Daniil Petrov
>А как его использовать?
Я сам не использовал.Создаешь объект синхронизации glFenceSync в потоке загрузки, грузишь текстуру. В потоке потоке отрисовки делаешь опрос созданного объекта синхронизации через glWaitSync(не блокирующий вызов со стороны CPU). Можно поиграться с временм ожидания. Сброса объекта в начальное состояния нету, следовательно нужно удалять через glDeleteSync после получения статуса и снова создавать.
Подробности в спеках, прммеры можно еще найти.

#23
14:28, 14 мар. 2018

Всё в общих чертах понял :) буду разбираться, о результатах извещу!

#24
14:44, 14 мар. 2018

идиотизм, создавать себе проблемы на ровном месте

#25
15:48, 14 мар. 2018

innuendo
> glBufferData может работать асинхронно ?

Орфанинг же.

ну и да,

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

#26
0:41, 15 мар. 2018

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

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

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

#27
9:06, 15 мар. 2018

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.

#28
9:07, 15 мар. 2018

Daniil Petrov
> в чужие движки даже не заглядываю

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

#29
10:45, 18 мар. 2018

Andrey
> именнно. Отсюда и куча проблем.

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

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

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

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