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

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

Страницы: 1 2 3 4 Следующая »
#0
15:31, 26 мая 2011

Причем текстура 170 Кб (1024х1024) натянута на много мелких деталей жрет 600Мб ОЗУ.
Модель без текстуры 30Мб ОЗУ.
Сжимаю текстуру до (512х512) = 300Мб ОЗУ.

Использую следующий код:

D3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &D3DParam, &D3DDevice ) ) )
...
D3DXLoadMeshFromX( MeshPath, D3DXMESH_SYSTEMMEM, D3DDevice, NULL, &MeshBuffer, NULL, &dwNumber, &Mesh));
...
D3DXCreateTextureFromFile( D3DDevice, D3DXMeshMaterials.pTextureFilename, &MeshTexture);

Да и в общем, даже небольшая картинка, натянутая на плоскость занимает оперативы много, например 512х512, а в ОЗУ выльется 40Мб.
Как с этим бороться?


#1
15:33, 26 мая 2011

DX_M
> текстура натянута на много мелких деталей
А грузишь ее один раз, или на каждую мелкую деталь делаешь D3DXCreateTextureFromFile()?

#2
15:39, 26 мая 2011

О точно... у меня функция загружает эту текстуру много раз.
Это все происходит в функции загрузке X файла... а 3D модель экспортирована в .X

Это проблема в импорте модели?

#3
15:52, 26 мая 2011
о боже...
#4
17:00, 26 мая 2011

> Причем текстура 170 Кб (1024х1024)
Хочу такие текстуры в DX... А если серьёзно то такая текстура весит минимум 1МБ, без мипов, с ними 1.33 и до 16МБ бзе мипов. Ни о каких 170кб в памяти и речи быть не может

#5
17:44, 26 мая 2011

да и так математически
1024 =1 кило пикселей
1024*1024 =1 мега пиксель
3 байта на 1 мега пиксел =3 мега байта

#6
18:13, 26 мая 2011

Есть еще сжатые текстуры ;)

#7
20:46, 26 мая 2011

IPPavlov
Полноцветная текстура 512х512 без альфы с 10-ю мипами занимает 171 КБ. Где я не прав?

StiX
тсссс...

#8
21:42, 26 мая 2011

-Eugene-
Во первых там было 1024х1024, а не 512х512. Во вторых, сори, забыл про 4 бит вариант сжатия. Просто его не пользую и забыл что он есть

#9
22:31, 26 мая 2011

Где-то у Вас косяк...

#10
0:18, 27 мая 2011

DX_M грузите текстуру в рендере каждый кадр ?? -Eugene- вспомни мой случай и разясни ему , может ему будет весело :D

#11
5:35, 27 мая 2011

Vendein_RaZoR
> грузите текстуру в рендере каждый кадр ??
Только ты мог так делать ;)
Другие люди не настолько... кхм... плохо разбираются в программировании вообще.

#12
16:31, 27 мая 2011

Я не гружу текстуру каждый кадр. Импортирую модель из 3ds max в .x, при ней текстура.
Ввиду того, что некоторая область одной текстуры (в 3ds max) многократно наложена на детали , то при импорте в .x или уже при экспорте в программу, данный факт опускается, и текстура многократно пробегает счетчик для каждой детали.
Не знаю с какой стороны подойти к решению проблемы...

(сори, изначально не поставил тег кода, хотел подчеркнуть, съело мой индекс форматирования [ i ] как для курсира)

D3DXCreateTextureFromFile( D3DDevice, D3DXMeshMaterials[i].pTextureFilename, &MeshTexture[i]);
+ в счетчике for (DWORD i = 0; i < dwNumber; i++) грузится материал и дифуз
Текстура формата jpeg 1024х1024 размер 170 КБ (174 894 байт).

И, пожалуйста, без глумления, спасибо за ответы.

#13
16:45, 27 мая 2011

DX_M
> Не знаю с какой стороны подойти к решению проблемы...
В такой постановке путь только один - кешируй загруженную текстуру.
Т.е. не зови D3DXCreateTextureFromFile сразу. Сначала спроси у кеша, нет ли загруженной текстуры с таким именем.
Для начала сойдет тупой std::map<string, LPDIRECT3DTEXTURE9> (иннуенда, тихо! :).
Если в кеше текстуры нет, только тогда зовешь D3DXCreateTextureFromFile, а ее результат записываешь в кеш, и возвращаешь указатель.

> Текстура формата jpeg 1024х1024 размер 170 КБ (174 894 байт)
Не относится к теме, т.к. видя не умеет понимать jpeg в железе.
После загрузки она будет занимать 4Mb (xrgb). Или 1Mb, если пожать данные dxt3/5.

#14
17:01, 27 мая 2011
RPGman
> Для начала сойдет тупой std::map<string, LPDIRECT3DTEXTURE9> (иннуенда, тихо!
> :).

блин, только хотел ... и тут на тебе :)

я буду себя хорошо вести

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

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