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

Жрется видеопамять, DirectX 9

Страницы: 1 2 Следующая »
#0
16:16, 8 июля 2016

Всем привет!
Недавно опять вернулся к использованию DX9. В простое винда съедает 150-175 Мб видеопамяти.
Создаю 100 прямоугольничков, в каждый из них толкаю текстуру 256х256 весом 192 Кб (BMP, экспериментировал с ней же, но в PNG - 0 толку).
Загружаю каждую намеренно каждый раз с помощью

D3DXCreateTextureFromFileEx(Direct, "тут путь к текстуре", D3DX_DEFAULT,
  D3DX_DEFAULT, D3DX_DEFAULT, 0,
  D3DFMT_UNKNOWN, D3DPOOL_MANAGED,
  D3DX_DEFAULT, D3DX_DEFAULT,
  D3DCOLOR_XRGB(R,G,B), nil, nil, texture);

Вывожу прямоугольники так:

    Direct.BeginScene;
    Direct.SetStreamSource(0,Buffer,0,SizeOf(TVertexRectangleTexture));
    //устанавливаем формат вершин
    Direct.SetFVF(D3DFVF_VERTEXTEXTURE);
    // Устанавливаем мировую матрицу для прямоугольника
    Direct.SetTransform(D3DTS_WORLD, WorldMatrix);
    Direct.SetTexture(0,texture); //устанавливаем текстуру
    //рисуем примитив               
    Direct.DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); 
    //удаляем текстуру
    Direct.SetTexture(0,nil);
    Direct.EndScene;

Устанавливаю камеру так, чтобы все было видно на экране. Приложение съедает 51 Мб видеопамяти. С PNG все то же самое.
Вопрос, это нормально? Так и должно быть?

#1
16:22, 8 июля 2016

Ramm
> Приложение съедает 51 Мб видеопамяти
> Вопрос, это нормально? Так и должно быть?
Судя по всему - да.
Причина: драйвер может взять сколько ему вздумается
памяти "про запас", исходя ,к примеру, из величины доступного объема.
А вот если она постоянно растёт - "бей в барабаны" это уже явно утечка.

EDIT: не заметил.
Ramm
>Загружаю каждую намеренно каждый раз с помощью

То-есть одну и ту же текстуру ты 100 раз грузишь из файла и создаешь объект
IDirect3DTexture9 ?

#2
17:06, 8 июля 2016
   Direct.BeginScene;
    Direct.SetStreamSource(0,Buffer,0,SizeOf(TVertexRectangleTexture));
    //устанавливаем формат вершин
    Direct.SetFVF(D3DFVF_VERTEXTEXTURE);
    // Устанавливаем мировую матрицу для прямоугольника
    Direct.SetTexture(0,texture); //устанавливаем текстуру
    for (i=0; i<100; i++)
    {
        Direct.SetTransform(D3DTS_WORLD, transforms[i]);        
        //рисуем примитив               
        Direct.DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); 
    } 
    //удаляем текстуру
    Direct.SetTexture(0,nil);
    Direct.EndScene;

надеюсь в оригинале это как так.
ну и текстуру надеюсь грузишь 1 раз, иначе это уже +26 мб
тогда все норм.

#3
17:33, 8 июля 2016

Mira
> ну и текстуру надеюсь грузишь 1 раз, иначе это уже +26 мб
26 Мб? Откуда и зачем?
Mira
Не-не-не, я имитирую загрузку ста разных текстур, поэтому гружу их для каждого прямоугольника заново.
Вопрос и был в том, почему 100*192Кб съедают 51 мб памяти, а не 20.
В общем, провел эксперимент, разместил на экране 5133 квадратиков, 5133*192/1024=963Мб памяти. Все отрисовались. Больше квадратов не рисуется, начинает часть выводиться без текстуры.
TheLightWay
> То-есть одну и ту же текстуру ты 100 раз грузишь из файла и создаешь объект
Ага.
Похоже, что причина в этом:
TheLightWay
> драйвер может взять сколько ему вздумается
> памяти "про запас", исходя ,к примеру, из величины доступного объема.

#4
17:41, 8 июля 2016

Ramm
> тут путь к текстуре

...

#5
17:54, 8 июля 2016

innuendo
> ...
???

#6
18:23, 8 июля 2016

Ramm
а в чем фишка застрать всю видеопамять одной и тойже текстурой если можно накладывать одну и туже?
дай угадаю - у тебя карта 1к vram, а дальше просто кончилась память под текстуры)

#7
19:09, 8 июля 2016

D3DPOOL_MANAGED
и
>съедают 51 мб памяти, а не 20.
наверное как-то связаны, на случай потери контекста?

#8
22:00, 8 июля 2016

Ramm
> Приложение съедает 51 Мб видеопамяти.

Как меряешь?

#9
22:07, 8 июля 2016

Может ты создал себе еще десяток бэкбуфферов в придачу. )))

#10
0:27, 9 июля 2016

> Создаю 100 прямоугольничков, в каждый из них толкаю текстуру 256х256 весом 192
> Кб (BMP, экспериментировал с ней же, но в PNG - 0 толку).

какая разница из чего ты грузишь , чекни формат полученной текстуры, там полюбасу XRGB или ARGB, а это батенька - 256 * 256 * 4 = 256 кб

#11
7:18, 9 июля 2016

Mira
> а в чем фишка застрать всю видеопамять одной и тойже текстурой если можно
> накладывать одну и туже?
Да ладно? А, надо создать 100 разных текстур, чтобы заполнить память? Нахрена?
Mira
> 256 * 256 * 4 = 256 кб
И почему тогда 100 текстур съедают 51 мб, а не 26?
Executor
> Как меряешь?
Программа от MSI... Нет сейчас под рукой.

#12
7:52, 9 июля 2016

Ramm
> Да ладно? А, надо создать 100 разных текстур, чтобы заполнить память? Нахрена?
что ты успешно и делаешь)
Ramm
> И почему тогда 100 текстур съедают 51 мб, а не 26?
а сколько приложение жрет без загрузки текстур?

#13
10:41, 9 июля 2016

А мип-мап уровни уже не считаются?

#14
11:18, 9 июля 2016

codingmonkey
> D3DPOOL_MANAGED
> и
> > ъедают 51 мб памяти, а не 20.
> наверное как-то связаны, на случай потери контекста?
Ресурсы в пуле памяти, под управлением ДХ. Резервная копия, вроде как, лежит в ОЗУ.
Mira
> а сколько приложение жрет без загрузки текстур?
2 Мб. Что-то около того.
Mr. Rabbit
> А мип-мап уровни уже не считаются?
Я так понимаю, что они автоматически не создаются.
Тут как раз и была цель, узнать куда уходит память, ее расходуется иногда больше, чем надо...

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

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