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

Текстура ест много оперативки (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
18:08, 6 июня 2011

Dimich
> return textures[filename];
> ?
хороший вариант.
Но как их потом грамотно выгрузить?

for (DWORD i=0; i<dwNumber; i++)
{
  if (MeshTexture[i])  MeshTexture[i]->Release();
}
ругается на уже выгруженные...

#31
18:09, 6 июня 2011

DX_M
> Но как их потом грамотно выгрузить?

for (std::map<std::string, CTexture*>::iterator it = textures.begin(); it != textures.end(); it++) 
{
  delete it->second;
}

textures.clear();
#32
18:14, 6 июня 2011

map карту тогда придется заглобалить. так все и делают?

#33
18:20, 6 июня 2011

DX_M
> map карту тогда придется заглобалить. так все и делают?
Почему заглобалить? Сделай менеджер текстур/материалов и пусть он всё разруливает.

#34
18:21, 6 июня 2011

DX_M
> map карту тогда придется заглобалить
Хотя что тут глобалить, несколько путей и ссылок.

А ассоциативные массивы используют для перевода на разные языки? или для этого другие варианты (лучше) есть?

#35
18:58, 6 июня 2011
Тут был гон, связанный с паранойей по поводу инициализации указателей, и забытые параграфы стандарта. :)
#36
19:10, 6 июня 2011

а с данной структурой, то что делать?

for (DWORD i=0; i<dwNumber; i++)
     if (MeshTexture[i])  MeshTexture[i]->Release();
После выгрузки одной, все которые на нее ссылались, терпят крах Release.
Как удалить пустые указатели?

#37
20:06, 6 июня 2011

где

LPDIRECT3DTEXTURE9*  MeshTexture  =  NULL;
...->
MeshTexture  =  new LPDIRECT3DTEXTURE9[dwNumber];

#38
20:46, 6 июня 2011

Простой

delete[]   MeshTexture;
приводит к утечке памяти.

if (MeshTexture[i])
как определить что здесь битый указатель, на выгруженную текстуру?
#39
21:22, 6 июня 2011

ref<T>?

#40
21:57, 6 июня 2011

DX_M

я же предложил, нужно только внимательно разорбраться и вопросы отпадут сами собой

#41
22:44, 6 июня 2011

Тут вообще сказано.
- Указатели, ссылающиеся на один и тот же объект, никак не связаны между собой. Это создаёт проблему «битых» указателей – указателей, ссылающихся на освобождённые или перемещённые объекты.
- Нет никакой возможности проверить, указывает ли указатель на корректные данные, либо «в никуда».

Я запутываюсь... почему все так замутно. Ну нет объекта уже MeshTexture[ i ]->Release(); возьми да грохни указатель да иди дальше, чели выпендриваться то.

#42
0:02, 7 июня 2011

Вижу только два выхода:
-либо хранить информацию об указателях и выгружать только те текстуры, которые были подгружены
-либо попробовать обратится к объекту, чем, завтра решу, но может кто знает:?... к примеру (не работает)... if (SUCCEEDED(MeshTexture[ i ]->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*) &MeshTexture[ i ])))    ----> MeshTexture[ i ]->Release();
Всем Спасибо за ответы и советы.

#43
5:22, 7 июня 2011

DX_M
> Я запутываюсь... почему все так замутно. Ну нет объекта уже MeshTexture[ i
> ]->Release(); возьми да грохни указатель да иди дальше, чели выпендриваться то.
Указатель - просто четырех байтовое число. Как комп определит, это у тебя указатель на удаленный кусок памяти, или это у тебя просто число такое?

#44
8:41, 7 июня 2011

-Eugene-
> это у тебя указатель на удаленный кусок памяти
Указатель на текстуру, которую уже выгрузили.

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

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