DirectX的第一帧

时间:2016-03-29 21:53:34

标签: directx directx-11

我有一个没有进行任何实时渲染的DirectX 11.1应用程序。

相反,我只会在应用程序中的某些内容发生更改时进行渲染,获取输出并将其保存到磁盘。

这完全没问题,但不是第一次使用Drawcall。

这里有一些伪代码粗略地列出了我正在做的事情:

// init()
D3D11CreateDevice(...);
dxgidevice1->SetMaximumFrameLatency(0)
createTexture(&rt);  
createStagingTexture(&staging);

// render
immediateContext->SetRenderTarget(rt);
immediateContext->DrawIndexed(...);
d3d11Device->CreateQuery(...)
immediateContext->End(query)
immediateContext->Flush();
while(immediateContext->GetData(query) == S_FALSE) { }
// get bytes
immediateContext->CopyResource(staging, rt);
immediateContext->Flush();
immediateContext->Map(staging, &mapped);
memcopy (mapped.pData) // returns all 0 bytes first time
// copy to preview
immediateContext->SetRenderTarget(staging)       
immediateContext->Map(..)  // constant buffer with shader parameters
immediateContext->Draw(...); // fullscreen quad

memcopy(...)

这完全适用于第二次以及随后的次数,但是,第一次memcopy将返回一个填充零的数组。

如果我将订单更改为

//render
//copy to preview
//get bytes

我仍然得到零

//render
//copy to preview
//render
//get bytes

给我数据。

在实际获得任何结果之前,我似乎必须进行2次绘制调用,现在,如果是这种情况,我可以在应用程序启动时绘制一些空白。但我需要确定这是通过API的设计,而不是随机设备上随机结果的一些侥幸?

有没有人可以对这个问题有所了解?

0 个答案:

没有答案