我正在尝试使用direct3d11在视频中执行alpha混合。为了实现这一点,我编写了下面的代码片段。我试着一帧一帧地从2.argb中读取视频文件,并将其存储在rawData中。后来,我将那个rawData传递给了CreateTexture2D,但是在API执行之后,pTexture仍然是空的。因此,我尝试将NULL传递给CreateTexture2D,将rawData传递给UpdateSubresource,但是pTexture仍然是空的。
HRESULT result;
FILE * fp = NULL;
int size = 1280 * 720 * 4 ;
void * rawData = NULL;
D3D11_TEXTURE2D_DESC desc;
desc.Width = 1280;
desc.Height = 720;
desc.MipLevels = 0;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE| D3D11_BIND_RENDER_TARGET;
desc.CPUAccessFlags = 0;
desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;
D3D11_SHADER_RESOURCE_VIEW_DESC shader;
shader.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
shader.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
shader.Texture2D.MipLevels = -1 ;
shader.Texture2D.MostDetailedMip = 0;
fp = fopen("../Engine/Data/out2.argb", "rb");
rawData = malloc(size);
D3D11_SUBRESOURCE_DATA data;
data.SysMemPitch = 1280 * 4;
data.SysMemSlicePitch = 1280 * 720 * 4;
if (NULL == rawData)
return -1;
int row_pitch = (1280 * 4) * sizeof(unsigned char);
if (fp)
{
/*while (!feof(fp))
{*/
fread(rawData, size,1, fp);
//D3D11_SUBRESOURCE_DATA *sSubData = new D3D11_SUBRESOURCE_DATA[1];
//for (int i = 0; i < 1; i++) {
// sSubData[i].pSysMem = rawData;
// sSubData[i].SysMemPitch = (UINT)(1280 * 4);
// sSubData[i].SysMemSlicePitch = /*(UINT)(1280 * 720 * 4)*/0;
//}
//data.pSysMem = rawData;
// GOT FRAME
device->CreateTexture2D(&desc, NULL, &pTexture);
deviceContext->UpdateSubresource(pTexture, 0, NULL, rawData, row_pitch , 0);
result = device->CreateShaderResourceView(pTexture, &shader, &m_texture);
if (FAILED(result))
{
return false;
}
/* }*/
fclose(fp);
fp = NULL;
free(rawData);
return true;
```
发布于 2020-05-11 06:14:16
https://docs.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_用法
资源绑定选项动态:输入到一个阶段:是的,3-资源只能用单个子资源创建。资源不能是纹理数组。资源不能是mipmap链。
动态资源不能是mipmap链,因此在不使用mipmap的情况下创建纹理:
D3D11_TEXTURE2D_DESC desc;
desc.MipLevels = 1;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.MiscFlags = 0;
您还有两个以上的问题。
因此,您的最终工作,D3D11_TEXTURE2D_DESC结构将如下所示:
desc.Width = 1280;
desc.Height = 720;
desc.MipLevels = 1;
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;
https://gamedev.stackexchange.com/questions/182469
复制相似问题