我想缩放我从AcquireNextFrame创建的纹理。 这是我的代码:
if (gRealTexture == nullptr) {
D3D11_TEXTURE2D_DESC description;
texture2D->GetDesc(&description);
description.BindFlags = 0;
description.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
description.Usage = D3D11_USAGE_STAGING;
description.MiscFlags = 0;
hr = gDevice->CreateTexture2D(&description, NULL, &gRealTexture);
if (FAILED(hr)) {
if (gRealTexture) {
gRealTexture->Release();
gRealTexture = nullptr;
}
return NULL;
}
}
gImmediateContext->CopyResource(gRealTexture, texture2D);
D3D11_MAPPED_SUBRESOURCE mapped;
hr = gImmediateContext->Map(gRealTexture, 0, D3D11_MAP_READ_WRITE, 0, &mapped);
if (FAILED(hr)) {
gRealTexture->Release();
gRealTexture = NULL;
return NULL;
}
unsigned char *source = static_cast<unsigned char *>(mapped.pData); //Here I get the pixel buffer data
问题在于它采用全高清分辨率(1920x1080)。我想降低分辨率(例如1280x720),因为我需要通过网络发送source
。我真的不需要全高清图像。
在获得像素缓冲区之前,是否可以使用DirectX轻松完成?
由于
答案 0 :(得分:0)
创建一个较小的分辨率纹理,使用全屏四边形将texture2d
渲染为较小的纹理(但缩小到新的大小)。确保打开双线性过滤。
然后复制并映射较小的纹理。 CopyResource需要相同的尺寸。
一些资源:
DX11 Helper Library
Render To Texture
模糊设置与我所说的相同,只是使用简单的纹理着色器而不是使用模糊着色器。