Могу ли я получить массив байтов (ARGB) от D3D11Texture2D
? В DirectX 11 нет функций GetSurfaceLevel
и LockRect
.
Получить массив байтов из текстуры
Ответы (2)
Используйте функции Map / Unmap в вашем DeviceContext. Это будет работать только для типов текстур, поддерживающих чтение.
eg
D3D11_MAP eMapType = D3D11_MAP_READ;
D3D11_MAPPED_SUBRESOURCE mappedResource;
pDeviceContext->Map(m_pTexture, 0, eMapType, NULL, &mappedResource);
BYTE* pYourBytes = (BYTE*)mappedResource.pData;
unsigned int uiPitch = mappedResource.RowPitch;
// Do stuff here
pDevice->GetDeviceContext()->Unmap(m_pTexture, 0);
Если вы хотите прочитать содержимое текстуры рендеринга, вам нужно сначала создать промежуточную текстуру того же формата, что и ваша текстура рендеринга, а затем скопировать текстуру рендеринга в промежуточную текстуру с помощью DeviceContext-> CopyResource ().
person
alanw
schedule
04.04.2013
Зачем вам нужно считывать данные текстуры? Вы храните данные в RAM, а затем загружаете их во VRAM. Он все еще должен быть в ОЗУ или на диске. Я что-то упускаю?
Вы можете посмотреть, как это было решено, в фреймбуфере DirectX 11 захват (C ++, без Win32 или D3DX)
person
rioki
schedule
04.04.2013
Возможно, текстура была создана шейдером
- person jcoder; 04.04.2013
У меня должны быть данные существующей текстуры в ОЗУ в формате ARGB. Спасибо, посмотрю ваш пример.
- person gooseim; 04.04.2013
Верно, потому что создание текстуры с помощью шейдера и ее считывание - очень эффективный способ сделать это. Если бы вы сказали, что он был создан через буфер кадра, тогда ... Хорошо, но в этом случае у вас будет доступ к нему через API буфера кадра.
- person rioki; 04.04.2013
Если я использую шейдеры, это не сработает. Могу ли я решить эту проблему? Где я могу найти пример API фреймбуфера?
- person gooseim; 10.04.2013
Эти вопросы и ответы могут помочь: http://stackoverflow.com/questions/120066/doing-readback-from-direct3d-textures-and-surfaces
- person rioki; 10.04.2013
Некоторые функции в этом примере объявлены устаревшими в DirectX 11.
- person gooseim; 10.04.2013