directX 11 scale texture2D

时间:2017-05-30 15:08:33

标签: c++ directx gpu directx-11

我想缩放我从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轻松完成?

由于

1 个答案:

答案 0 :(得分:0)

创建一个较小的分辨率纹理,使用全屏四边形将texture2d渲染为较小的纹理(但缩小到新的大小)。确保打开双线性过滤。

然后复制并映射较小的纹理。 CopyResource需要相同的尺寸。

一些资源:

DX11 Helper Library
Render To Texture

DX11 Post Processing blur

模糊设置与我所说的相同,只是使用简单的纹理着色器而不是使用模糊着色器。