基本上,我试图将前缓冲区或后缓冲区复制到纹理,获取所述纹理的 1x1 mipmap 级别,然后将生成的颜色返回到 Arduino 以控制我房间的照明。其他一切都已启动并运行,我已经通过 GetDC(NULL) 和 StretchBlt 让它工作。但这大约是 15FPS,Windows GUI 运行不稳定。
下采样只是要求在 GPU 上使用。
在 D3D9 中,似乎只有 GetBackBuffer() 或类似的东西,但我在 D3D10 中没有看到类似的东西。而且我什至不确定它会从 Windows GUI 中获取任何东西。
问题:
- 我会使用什么功能?:
- 我需要事先明确创建一个交换链吗?
- 这是否只能从其他 D3D 程序中捕获数据?
好的,这就是我在创建纹理时所处的位置但我没有看到任何让我回到纹理的东西:
//Create Texture
D3D10_TEXTURE2D_DESC tBufferDesc;
ID3D10Texture2D *tBuffer = NULL;
DXGI_SAMPLE_DESC iBufferSamples = {1,0};
tBufferDesc.Width = iScreenSizeX;
tBufferDesc.Height = iScreenSizeY;
tBufferDesc.MipLevels = 0;
tBufferDesc.ArraySize = 1;
tBufferDesc.Format = DXGI_FORMAT_B8G8R8A8_TYPELESS;
tBufferDesc.SampleDesc = iBufferSamples;
tBufferDesc.Usage = D3D10_USAGE_DEFAULT;
tBufferDesc.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D10_BIND_RENDER_TARGET;
tBufferDesc.CPUAccessFlags = 0;
tBufferDesc.MiscFlags = D3D10_RESOURCE_MISC_GENERATE_MIPS;
HRESULT tBufferResult = pDevice->CreateTexture2D(&tBufferDesc, NULL , &tBuffer);
hrResult(tBufferResult);
ID3D10RenderTargetView *rtBuffer;
ID3D10Resource *rsBuffer;
pDevice->OMGetRenderTargets(1, &rtBuffer, NULL);
rtBuffer->GetResource(&rsBuffer);
rsBuffer->