首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Direct3D11幕射坠毁

Direct3D11幕射坠毁
EN

Stack Overflow用户
提问于 2017-09-13 13:50:57
回答 1查看 318关注 0票数 0

基本上,我正在尝试获取Direct3D11应用程序的屏幕截图(每1秒,不需要保存)。代码在我的PC(Intel CPU,Radeon GPU)上工作得很好,但在其他2台(Intel CPU + Intel集成GPU,Intel CPU + Nvidia GPU)上经过几次迭代后就崩溃了。

代码语言:javascript
运行
复制
void extractBitmap(void* texture) {

    if (texture) {
        ID3D11Texture2D* d3dtex = (ID3D11Texture2D*)texture;
        ID3D11Texture2D* pNewTexture = NULL;

        D3D11_TEXTURE2D_DESC desc;
        d3dtex->GetDesc(&desc);

        desc.BindFlags = 0;
        desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
        desc.Usage = D3D11_USAGE_STAGING;
        desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;

        HRESULT hRes = D3D11Device->CreateTexture2D(&desc, NULL, &pNewTexture);

        if (FAILED(hRes)) {
            printCon(std::string("CreateTexture2D FAILED:" + format_error(hRes)).c_str());
            if (hRes == DXGI_ERROR_DEVICE_REMOVED)
                printCon(std::string("DXGI_ERROR_DEVICE_REMOVED -- " + format_error(D3D11Device->GetDeviceRemovedReason())).c_str());
        }
        else {
            if (pNewTexture) {
                D3D11DeviceContext->CopyResource(pNewTexture, d3dtex);

                // Wokring with texture

                pNewTexture->Release();
            }
        }
    }
    return;
}


D3D11SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast< void** >(&pBackBuffer));
extractBitmap(pBackBuffer);
pBackBuffer->Release();

撞车日志:

代码语言:javascript
运行
复制
CreateTexture2D FAILED:887a0005
DXGI_ERROR_DEVICE_REMOVED -- 887a0020

一旦我注释掉D3D11DeviceContext->CopyResource(pNewTexture, d3dtex);代码,在所有3台PC上都能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-17 18:27:57

把它唤醒了。我在单独的线程中运行我的代码。当我将它移到钩式Present()之后,应用程序就没有崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46199404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档