如何在D3D10中访问缓冲区数据?

时间:2013-07-18 19:00:34

标签: windows directx arduino screenshot

基本上,我正在尝试将前置或后置缓冲区复制到纹理,抓取所述纹理的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->

0 个答案:

没有答案