if (SUCCEEDED(pContext->Map(texture, 0, D3D11_MAP_READ, 0, &res)))
{
m_pitch = res.RowPitch;
- m_data = new unsigned char[res.RowPitch * m_height];
- memcpy(m_data, res.pData, res.RowPitch * m_height);
+ unsigned int memUsage = GetMemoryUsage(res.RowPitch);
+ m_data = new unsigned char[memUsage];
+ memcpy(m_data, res.pData, memUsage);
pContext->Unmap(texture, 0);
}
else
unsigned int CD3DTexture::GetMemoryUsage(unsigned int pitch) const
{
- return pitch * m_height;
+ switch (m_format)
+ {
+ case DXGI_FORMAT_BC1_UNORM:
+ case DXGI_FORMAT_BC2_UNORM:
+ case DXGI_FORMAT_BC3_UNORM:
+ return pitch * m_height / 4;
+ default:
+ return pitch * m_height;
+ }
}
// static methods