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

D3D11_MAPPED_SUBRESOURCE и хранение данных в памяти

#0
(Правка: 10:56) 10:04, 15 мар. 2019

Обычно, полученный буфер больше реального содержимого.

Например : Есть 2Dtexture 1904 * 1041  её ->Map 

mapResource.DepthPitch  = 7994880  или  1998720 элементов UINT - RGBA.  Но, для хранения 1904 * 1041 элементов размером UINT  достаточно 1982064 или в байтах = 7928256.

Вопрос :

1) элементы пикселей хранятся подряд в массиве mapResource.pData и массив выравнивается добавлением нужного количества байт в конец всего массива ?

2) Или хранятся в таком виде : mapResource.RowPitch + нужное количество байт для выравнивания ?

Если используется такой способ, то как понять, где в строке mapResource.RowPitch  заканчивается полезная информация и начинается "мусор для выравнивания" ?

3) Где почитать достоверно как эта система работает ?  ( в MSDN подробностей не нашёл )


#1
11:05, 15 мар. 2019

Второе, понять не сложно, RealRowPitch = width * bytesPerPixel.

#2
(Правка: 12:01) 11:55, 15 мар. 2019

nes,

Нет.

Я посмотрел. Получается, что в этом конкретном случае mapResource.RowPitch = 7680  т.е.  совсем не width текстуры + байты выравнивания или  ( width * bytesPerPixel )

Получается : mapResource.RowPitch * 1041( высота текстуры) = mapResource.DepthPitch( 7994880 ).

Получается, что в каких-то случаях в каждую строку mapResource.RowPitch добавляется какое-то количество байт для выравнивания.

1) Какое именно колиичество и по каким законам ?
2) Как правильно рассчитать это количество лишних байт в каждой  mapResource.RowPitch ?


Если размер текстуры 1920 * 1080  , то выравнивания нет в строках mapResource.RowPitch и данные идут подряд в mapResource.pData.

#3
(Правка: 12:28) 12:26, 15 мар. 2019

Кажется, разобрался ...

Получается , что в хвост каждой строке mapResource.RowPitch  добавляется вот что :

  =  ( mapResource.RowPitch - ScreenWidth * sizeof ( UINT ) ) / sizeof ( UINT )
  ( где UINT - размер в байтах для хранения одного элемента о цвете пикселя )
ПрограммированиеФорумГрафика