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

OpenGL - текстура не всегда создается!

Страницы: 1 2 Следующая »
#0
(Правка: 12:05) 11:48, 16 авг. 2019

Привет Всем!

Пытаюсь реализовать загрузку *.hdr формата текстур.
Проблема в том, что при некоторых запусках программы текстура создается и отображается корректно, а при некоторых просто белая (не содержит нужного изображения).
Гружу текстуру неба 8192х2048.
В чем может быть проблема? Где искать?


Код загрузки ниже.

+ Показать


#1
(Правка: 12:00) 12:00, 16 авг. 2019

AleksZubov
> glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE);

Проблема скорее всего не в этом, но все равно лучше это не использовать. Вот, из документации:
mip | OpenGL - текстура не всегда создается!

#2
12:21, 16 авг. 2019

Apfel1994
Спасибо, поправил.

Пришел к выводу, что слишком большой объем памяти у текстуры и поэтому с ней происходят проблемы.
Если это 8192х2048 формат GL_RGB16F, то объем памяти требуется 200МБ(!) на эту текстуру.
Если это 4096х1024 формат GL_RGB16F, то объем памяти требуется 50МБ(!) на эту текстуру.

Правильно посчитал?
8192х2048 х 3 (компоненты rgb) х 4 (размер в байтах FLOAT) = 201 326 592 байт = 200 МБ

В результате уменьшил до 4096х1024. Визуально качество скайбокса не изменилось.
Тестирую.

#3
(Правка: 12:39) 12:33, 16 авг. 2019

AleksZubov
> Правильно посчитал?
> 8192х2048 х 3 (компоненты rgb) х 4 (размер в байтах FLOAT) = 201 326 592 байт =
> 200 МБ

Почти, internal_format указан как GL_RGB16F - это 16-битный float. Будет так:

8192х2048 х 3 (компоненты rgb) х 2 (размер в байтах HALF_FLOAT) = 100 663 296 байт

>glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, image_width, image_height, 0, GL_RGB, GL_FLOAT, imageSkyHDR);
Эта строка означает, что произойдет конвертация перед загрузкой из 32-битного float в 16-битный. Можно сделать это явно самому. Тогда будет так:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, image_width, image_height, 0, GL_RGB, GL_HALF_FLOAT, imageSkyHDR_f16);

Также неплохой вариант использовать RGBM формат, возможно его будет достаточно.

#4
12:42, 16 авг. 2019

Спасибо!

#5
13:05, 16 авг. 2019

Apfel1994
> 3 (компоненты rgb)
Вроде как в видеокартах обычно нет 3х-компонентного формата - только R, RG и RGBA. RGB сделали в драйвере искусственно для удобства, а по факту там часто бывает RGBA. Поэтому памяти может быть даже больше.

#6
15:01, 16 авг. 2019

BingoBongo
Да, и то верно.

#7
(Правка: 15:20) 15:13, 16 авг. 2019

BingoBongo
> Вроде как в видеокартах обычно нет 3х-компонентного формата

важно же не число компонентов, а размер ?
R11F_G11F_B10F

#8
15:19, 16 авг. 2019

BingoBongo
> Вроде как в видеокартах обычно нет 3х-компонентного формата

Чтобы разобраться надо сначала статью на Хабр запилить
#9
15:47, 16 авг. 2019

innuendo
Ну да

maks242
Что ты там из под шконки кукарекаешь?

#10
(Правка: 17:45) 17:41, 16 авг. 2019

AleksZubov
> Проблема в том, что при некоторых запусках программы текстура создается и
> отображается корректно, а при некоторых просто белая (не содержит нужного
> изображения).
> Гружу текстуру неба 8192х2048.
У меня была точно такая же проблема, грузил огромную текстуру 300мб, в одних запусках всё работало корректно, в других - сплошной черный цвет.
В CodeXL заметил, что во время багов размер текстуры равен нулю, т.е. она не прогружается.
Затем выяснил закономерность, что часть видеопамяти потреблялась браузером, и программа работала корректно только когда все вкладки браузера были закрыты, либо браузер вообще не был запущен.
Ну а затем я запилил мегатекстуры для этого дела и избавился от ограничения размера видеопамяти.

https://gamedev.ru/flame/forum/?id=229790
https://gamedev.ru/code/forum/?id=230075
https://gamedev.ru/flame/forum/?id=222936&page=3&m=4589152#m43

#11
17:58, 16 авг. 2019

Джек Аллигатор
> В CodeXL заметил, что во время багов размер текстуры равен нулю, т.е. она не
> прогружается.
> Затем выяснил закономерность, что часть видеопамяти потреблялась браузером, и
> программа работала корректно только когда все вкладки браузера были закрыты,
> либо браузер вообще не был запущен.

ошибки при этом не было ?

#12
18:05, 16 авг. 2019

innuendo, нет.
Можно было закрыть браузер и текстуры прогружались.

#13
18:25, 16 авг. 2019

Джек Аллигатор
> нет.

не было OUT_OF_MEMORY ? жестоко

#14
18:37, 16 авг. 2019

innuendo, так и у ТС вроде не было ошибок.

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