Я пытаюсь прочитать ввод с камеры и использовать его для создания фоновой поверхности в D3D11. Постоянно получаю ошибки памяти. Размер цели моего рендеринга: 2364 * 1461 Изображение, которое я получаю с камеры, представляет собой массив типа unsigned char
unsigned char* p = g_pOvrvision->GetCamImage(OVR::OV_CAMEYE_LEFT, (OVR::OvPSQuality)processer_quality);
Он возвращает 640 * 480 * 3 байт. Код, с которым я работаю, приведен ниже. CreateTexture2D выдает ошибку памяти. Я попытался заполнить массив фиктивными данными, чтобы вместить все 2364 * 1461. Это тоже не сработало. Не могли бы вы предложить мне решение?
D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc, sizeof(desc));
desc.Width = renderTargetSize.w;
desc.Height = renderTargetSize.h;
desc.MipLevels = desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
desc.MiscFlags = 0;
ID3D11Texture2D *pTexture = NULL;
D3D11_SUBRESOURCE_DATA TexInitData;
ZeroMemory(&TexInitData, sizeof(D3D11_SUBRESOURCE_DATA));
TexInitData.pSysMem = texArray;
TexInitData.SysMemPitch = static_cast<UINT>(2364 * 3);
TexInitData.SysMemSlicePitch = static_cast<UINT>(3 * 2364 * 1461 * sizeof(unsigned char));
d3dDevice->CreateTexture2D(&desc, &TexInitData, &d3dEyeTexture);
d3dDevice->CreateShaderResourceView(d3dEyeTexture, nullptr, &d3dEyeTextureShaderResourceView);
d3dDevice->CreateRenderTargetView(d3dEyeTexture, nullptr, &d3dEyeTextureRenderTargetView);
2364*1461*3
байт, или заставьте CreateTexture2D ожидать640*480*3
байт, или выполните какое-то промежуточное преобразование. - person user253751   schedule 05.03.2015DXGI_FORMAT_R8G8B8A8_UNORM
, которое вы должны создать как временный буфер640 * 480 * 4
, в который вы копируете исходные данные, устанавливая для альфа-канала (4-й байт) значение 0xff. Это также предполагает, что ваша камера возвращает RGB. Если это другое цветовое пространство (например, YUV), его необходимо преобразовать. См. DirectXTex для кода, обрабатывающего все преобразования различных форматов для наиболее общего случая. - person Chuck Walbourn   schedule 07.03.2015d3dDevice->CreateRenderTargetView(d3dEyeTexture, nullptr, &d3dEyeTextureRenderTargetView);
не может создать цель рендеринга. Он остается NULL. - person Inventor   schedule 07.03.2015