?

Log in

No account? Create an account
30 май, 2006 @ 15:05 D3D9. Вопрос по текстурам.
Возможно ли средствами D3Dx9 загрузить только определённый mip-уровень текстуры? Например, Я хоче загрузить текстуру только с 3-го мипа. И работать только с ней (не держать в памяти бОльшую текстуру).

Есть ли в в dx готовые решения? Или придётся создаваться новую текстуру и копировать сурфэйсы?
haruko
timai:
[User Picture Icon]
From:sim0nsays
Date:Май, 30, 2006 09:12 (UTC)
(Ссылка)
Нет таких средств.
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:timai
Date:Май, 31, 2006 04:17 (UTC)
(Ссылка)
Жаль. Значит будем делать ручками.
(Ответить) (Уровень выше) (Ветвь дискуссии)
From:rudybear
Date:Май, 30, 2006 10:11 (UTC)
(Ссылка)
Есть только вот такое: IDirect3DBaseTexture9::SetLOD.
SetLOD is used for level-of-detail control of managed textures. This method returns 0 on nonmanaged textures.

SetLOD communicates to the Direct3D texture manager the most detailed mipmap in the chain that should be loaded into local video memory. For example, in a five-level mipmap chain, setting LODNew to 2 indicates that the texture manager should load only mipmap levels 2 through 4 into local video memory at any given time.


More specifically, if the texture was created with the dimensions of 256x256, setting the most detailed level to 0 indicates that 256 x 256 is the largest mipmap available, setting the most detailed level to 1 indicates that 128 x 128 is the largest mipmap available, and so on, up to the most detailed mip level (the smallest texture size) for the chain.
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:timai
Date:Май, 31, 2006 04:18 (UTC)
(Ссылка)
Про это-то Я знаю. Вот только всё равно придётся грузить бОльшую текстуру. Неэкономия памяти, однако.
(Ответить) (Уровень выше) (Ветвь дискуссии)
[User Picture Icon]
From:digimind
Date:Май, 30, 2006 17:21 (UTC)
(Ссылка)
HRESULT D3DXCreateTextureFromFileEx(
...
UINT MipLevels,
...
);

MipLevels
[in] Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created. If D3DX_FROM_FILE, the size will be taken exactly as it is in the file, and the call will fail if this violates device capabilities.
...
When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

D3DX_SKIP_DDS_MIP_LEVELS смотреть в d3dx9tex.h
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:digimind
Date:Май, 30, 2006 17:39 (UTC)
(Ссылка)
> D3DX_SKIP_DDS_MIP_LEVELS

Пааардон.
Это к другому параметру.
(Ответить) (Уровень выше) (Ветвь дискуссии)
[User Picture Icon]
From:digimind
Date:Май, 30, 2006 17:48 (UTC)
(Ссылка)
Тихо сам с собою, я веду беседу :).
MipLevels позволяет выбрать или все, или [0..n] мипы.
Проскипать начальные мипы таки нельзя.
(Ответить) (Уровень выше) (Ветвь дискуссии)
[User Picture Icon]
From:timai
Date:Май, 31, 2006 04:18 (UTC)
(Ссылка)
Если бы всё было так просто =)
(Ответить) (Уровень выше) (Ветвь дискуссии)