gpt4 book ai didi

c++ - 使用来自相机的初始数据创建 d3d11Texture2D

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:59 24 4
gpt4 key购买 nike

我正在尝试从相机读取输入并使用它在 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);

最佳答案

Chuck Walbourn 的评论让您了解了 99%:没有三字节 DXGI 像素格式,因此要正确打包从相机接收的数据,您必须创建一个与 匹配的新缓冲区DXGI_FORMAT_R8G8B8A8_UNORM 格式,并将您的相机数据复制到其中,向 0xFF 的每个像素添加第四个值(alpha 值)。

但是正如您提到的,您的最后一行代码仍然失败。我相信这是因为您没有使用绑定(bind)标志 D3D11_BIND_RENDER_TARGET 以及 D3D11_BIND_SHADER_RESOURCE 设置 d3dEyeTexture。然而,据我了解,如果您试图将 640x480 的相机图像作为 2364x1461 渲染目标的背景,您将需要重新采样数据以适应,这在中央处理器。我的建议是使用相机数据创建一个单独的、D3D11_BIND_SHADER_RESOURCE 标记的 640x480 纹理,并将其绘制为填充整个屏幕,作为绘制循环的第一步。这意味着创建一个单独的专用 2364x1461 渲染目标作为您的后台缓冲区,但这是设置 Direct3D 应用程序的常见第一步。

关于c++ - 使用来自相机的初始数据创建 d3d11Texture2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28873269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com