DirectX&x27;第一帧

DirectX&x27;第一帧,directx,directx-11,Directx,Directx 11,我有一个DirectX 11.1应用程序没有进行任何实时渲染 相反,我只在应用程序中的某些内容发生更改时渲染,获取输出并将其保存到磁盘 但是,这种方法非常好用,在第一次抽签时就不行了 下面是一些伪代码,大致列出了我正在做的事情: // init() D3D11CreateDevice(...); dxgidevice1->SetMaximumFrameLatency(0) createTexture(&rt); createStagingTexture(&staging

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

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

但是,这种方法非常好用,在第一次抽签时就不行了

下面是一些伪代码,大致列出了我正在做的事情:

// 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
给我数据

看起来在得到任何结果之前我必须做两次抽签,现在,如果是这样的话,我可以在应用程序启动时抽签。但我需要确定这是API的设计,而不是在随机设备上产生随机结果的侥幸


是否有人可以解释这个问题?

我无法从您的代码片段中看出,但请务必检查从Direct3D API返回的每个
HRESULT
是否通过
FAILED
宏、
succeed
宏或采用类似的方式失败。有很多失败点,现在没有信心它们在运行时不进行错误检查就能正常工作。你说,draw调用本身可能会失败,没有考虑检查它们是否返回HRs。所有其他与创建对象相关的异常,我已经包装好抛出.NET异常,因此我在调试器中捕获的异常,我没有得到任何异常。哦,这就是为什么我没有在Draw调用中检查HRESULT,它们返回void。。