alphablending - 如何使用 direct3d9、direct3d10 或 direct3d11 对保存的原始 argb 视频(图像和视频也可以)执行 alpha 混合?
问题描述
我正在尝试使用 direct3d11 对视频执行 alpha 混合。我编写了下面的代码片段来实现这一点。我试图逐帧读取视频文件out2.argb并将其存储在rawData中。后来,我将该rawData传递给CreateTexture2D,但pTexture在执行 API 后仍然为空。所以我尝试将NULL传递给CreateTexture2D并将rawData传递给UpdateSubresource但pTexture再次保持为NULL。 DirectX 11 ID3DDevice::CreateTexture2D 初始数据失败 我已经在此处提到了问题和答案以使这项工作正常进行,但 API 返回失败。
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;
解决方案
推荐阅读
- c# - 为什么 Window.Current.CoreWindow.PointerMoved 事件处理属性在 uwp 中不起作用?
- reactjs - 如何在 Heroku 上使用 React + Express 执行外部 API 调用
- java - 名称的重复类定义:“net/openhft/chronicle/queue/JDBCResultBinarylightMethodWriter”
- javascript - React-bootstrap 警报未重新渲染
- ios - 如何在ios中检查联系人是否是谷歌联系人?
- java - 想要代码从 cmd 行读取和应用信息
- r - 在 ggplot 中更改地图的调色板
- typescript - 仅对对象的已定义成员强制类型,而不将“keysof typeof [object]”扩大到 string[]?
- amazon-web-services - 原始实例已终止,无法通过 EBS 快照恢复卷 RDP 进入新实例
- javascript - 如何显示实时倒计时然后关闭窗口?