Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / glDeleteBuffers() и glDeleteTextures() не освобождают память (upd.: освобождают; опечатка - два одинаковых индекса, дважды создавался VAO, а удалялся только один) (4 стр)

glDeleteBuffers() и glDeleteTextures() не освобождают память (upd.: освобождают; опечатка - два одинаковых индекса, дважды создавался VAO, а удалялся только один) (4 стр)

Страницы: 1 2 3 4
foxesПостоялецwww20 мар. 201821:18#45
Роман Шувалов
> Чисто.
Ну простой пример из 3 строчек "создать заполнить удалить" не течет?
Роман ШуваловУчастникwww20 мар. 201821:34#46
Vlad2001_MFS
> VAO может объединять несколько VBO.
Ок, приму к сведению, но в моем случае это пока не нужно.

MrShoor
> Убедись, что код с glDeleteVertexArrays вообще вызывается,
Убедился.

MrShoor
> Еще не красиво выглядит, что у тебя не зануляются дескрипторы:
Там в конце объект уничтожается. Вернее, выставляется status = 0. А при создании нового все заполняется нулями.

MrShoor
> Ну и наконец включен ли Break On OpenGL Errors и Break On Detected Errors в CodeXL?
Запустил сейчас последнюю версию - на выходе виснет и приложение, и CodeXL. Сейчас попробую в Windows.

foxes
> Ну простой пример из 3 строчек "создать заполнить удалить" не течет?
Сейчас испытаю. Но вообще, если отключить VAO (контекст OpenGL 2.1), то ничего не течёт. То есть утечка именно в местах, обёрнутых в

if (VaoEnabled) { 
    // ...
}
Роман ШуваловУчастникwww20 мар. 201822:06#47
MrShoor
Утечки статические, т.е. не зависят от моих тестов. Они где-то на этапе загрузки приложения, даже если после загрузки меню сразу закрою - утечек столько же, так что они к делу не относятся.

foxes
> Ну простой пример из 3 строчек "создать заполнить удалить" не течет?
Не течёт :) Но ведь без VAO вообще ничего не течёт, а код внутри скобок if (VaoEnabled) { ... } только содержит только вызовы gl*, которые на простом тесте не дают текучки. Я в замешательстве.

foxesПостоялецwww20 мар. 201822:27#48
Ну не знаю, скажи ему что он плАхой вдруг заработает.
Роман ШуваловУчастникwww20 мар. 201823:46#49
В общем, если просто создать и удалить VAO+VBO, утечек нет.
А если в процессе создания-удаления нескольких сотен VAO+VBO заниматься чем-то еще, что занимает память, то VAO уже не удаляется.
Повреждение памяти было бы заметно, тем более в режиме OpenGL 2.1 без VAO всё работает чётко.

Похоже, единственный способ найти - комментировать всё подряд вплоть до заведомо рабочего состояния "создать-удалить".

MrShoorУчастникwww21 мар. 20180:01#50
Роман Шувалов
> то VAO уже не удаляется.
Заведи глобальный счетчик сразу после вызова:
glCreateVertexArrays()
gvVAOCount++;
И после удаления:
glDeleteVertexArrays()
gvVAOCount--;
А после удаления контекста выведи этот счетчик:
cout<<gvVAOCount<<"\n";
и посмотри чему он равен.

Правка: 21 мар. 2018 0:02

Роман ШуваловУчастникwww21 мар. 20180:16#51
Нашёл! На некоторых шейдерах создание и сразу же удаление даёт утечку! Я тестировал на нескольких случайных, а сейчас скопировал тот список шейдеров, который реально используется. Сейчас буду поштучно вычеркивать по одному и найду засранца.
Роман ШуваловУчастникwww21 мар. 20180:19#52
MrShoor
Я же написал выше -
О_О я не отправил предыдущее сообщение что ли... именно так я и поступил. Там ноль. (Ну, не ноль, а то, что после первоначальной загрузки осталось.)
Роман ШуваловУчастникwww21 мар. 20180:27#53
#define GAME_SH_SHADOW_OBJ        (RS_SH_USER + 36)
#define GAME_SH_TRANSPARENT_SHADOW_OBJ        (RS_SH_USER + 36)

Дело закрыто.

DampireУчастникwww21 мар. 20188:23#54
Зато ты узнал немного больше о VAO.
innuendoПостоялецwww21 мар. 20188:40#55
вы изобрели refcounters? гениально :)
Роман ШуваловУчастникwww21 мар. 201810:04#56
innuendo
> вы изобрели refcounters? гениально :)
Мне нужен был список из констант, если в Си есть лёгкий способ их автоматического инкрементального объявления, дайте знать.

Для GUI я заморочился и написал целую программу (ну там в любом случае был экспорт в мой собственный формат, так что несложно заодно и список сохранить в .h файл). Но для всего остального.

BowmanПостоялецwww21 мар. 201811:56#57
Роман Шувалов
> Мне нужен был список из констант, если в Си есть лёгкий способ их
> автоматического инкрементального объявления, дайте знать.
enum
Роман ШуваловУчастникwww21 мар. 201812:56#58
Bowman
> enum

Изображение

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

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

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