C++ directX 11比例纹理2D
我想缩放从AcquireNextFrame创建的纹理。 这是我的密码:C++ directX 11比例纹理2D,c++,directx,gpu,directx-11,C++,Directx,Gpu,Directx 11,我想缩放从AcquireNextFrame创建的纹理。 这是我的密码: if (gRealTexture == nullptr) { D3D11_TEXTURE2D_DESC description; texture2D->GetDesc(&description); description.BindFlags = 0; description.CPUAccessFlags = D3D11_CPU_ACCESS_REA
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,因为我需要通过网络发送源。我不需要全高清图像
在我获得像素缓冲区之前,是否可以轻松地使用DirectX执行此操作
感谢创建分辨率更小的纹理,使用全屏四元网格将纹理2D渲染为更小的纹理,但缩小到新的大小。确保双线性过滤已启用 然后复制并映射较小的纹理。CopyResource需要相同的维度 一些资源:
模糊设置与我所说的相同,只是使用了一个简单的纹理着色器而不是模糊着色器。请给我看一些代码好吗?我只需要创建一个新的纹理,然后在这个纹理中复制上一个纹理?使用CopyResource?我创建了第二个纹理,并添加了以下描述:但复制贴图失败:D3D11_TEXTURE2D_DESC description;texture2D->GetDesc和description;description.BindFlags=D3D11_BIND_RENDER_TARGET|D3D11_BIND_SHADER_RESOURCE;description.CPUAccessFlags=0;description.Usage=D3D11\u Usage\u默认值;description.miscsflags=0;description.Width=1280;description.Height=720;hr=gDevice->CreateTexture2D&description、NULL和gScaledTexture;我假设你可以渲染到较小的纹理,你只是在映射它时遇到问题?如何在较小的纹理上渲染?如果我能从我的代码中得到一个示例,那就太好了。。也许用SpriteBatch?但是怎么做?…DX11后期处理模糊实际上是将全屏纹理渲染到另一个纹理以进行水平模糊过程。完整的源代码示例。与其进行模糊,不如将全屏渲染为更小的纹理,该纹理使用标准纹理着色器而不是模糊。这在GPU上非常快。