C+中的DirectX后台缓冲区代码+; void D3DApp::OnResize() { 断言(md3dImmediateContext); 断言(md3dDevice); 断言(mSwapChain); //释放旧视图,因为它们包含对我们使用的缓冲区的引用 //将被销毁。同时释放旧的深度/模具缓冲区。 ReleaseCOM(mRenderTargetView); ReleaseCOM(mDepthStencilView); ReleaseCOM(mDepthStencilBuffer); //调整交换链的大小并重新创建渲染目标视图。 HR(mSwapChain->ResizeBuffers(1,mClientWidth,mClientHeight,DXGI_格式,0)); ID3D11Texture2D*backBuffer; HR(mSwapChain->GetBuffer(0,u-uuidof(ID3D11Texture2D),重新解释强制转换(&backBuffer)); HR(md3dDevice->CreateRenderTargetView(backBuffer、0和mRenderTargetView)); ReleaseCOM(backBuffer);

C+中的DirectX后台缓冲区代码+; void D3DApp::OnResize() { 断言(md3dImmediateContext); 断言(md3dDevice); 断言(mSwapChain); //释放旧视图,因为它们包含对我们使用的缓冲区的引用 //将被销毁。同时释放旧的深度/模具缓冲区。 ReleaseCOM(mRenderTargetView); ReleaseCOM(mDepthStencilView); ReleaseCOM(mDepthStencilBuffer); //调整交换链的大小并重新创建渲染目标视图。 HR(mSwapChain->ResizeBuffers(1,mClientWidth,mClientHeight,DXGI_格式,0)); ID3D11Texture2D*backBuffer; HR(mSwapChain->GetBuffer(0,u-uuidof(ID3D11Texture2D),重新解释强制转换(&backBuffer)); HR(md3dDevice->CreateRenderTargetView(backBuffer、0和mRenderTargetView)); ReleaseCOM(backBuffer);,buffer,directx-11,Buffer,Directx 11,我很难准确理解这段代码的实际用途。我想它是获取当前的反向缓冲区,将缓冲区存储在内存中,然后再次渲染到屏幕上?获取的缓冲区内容中可能包含什么?我非常困惑。我的程序使用的是800 x 600像素的窗口。作为乐趣Action name指出,它只是重置backbuffer和rendertarget,并且在调整渲染窗口大小时应调用此函数 void D3DApp::OnResize() { assert(md3dImmediat

我很难准确理解这段代码的实际用途。我想它是获取当前的反向缓冲区,将缓冲区存储在内存中,然后再次渲染到屏幕上?获取的缓冲区内容中可能包含什么?我非常困惑。我的程序使用的是800 x 600像素的窗口。

作为乐趣Action name指出,它只是重置backbuffer和rendertarget,并且在调整渲染窗口大小时应调用此函数

            void D3DApp::OnResize()
            {
                assert(md3dImmediateContext);
                assert(md3dDevice);
                assert(mSwapChain);

                // Release the old views, as they hold references to the buffers we
                // will be destroying.  Also release the old depth/stencil buffer.

                ReleaseCOM(mRenderTargetView);
                ReleaseCOM(mDepthStencilView);
                ReleaseCOM(mDepthStencilBuffer);


                // Resize the swap chain and recreate the render target view.

                HR(mSwapChain->ResizeBuffers(1, mClientWidth, mClientHeight, DXGI_FORMAT_R8G8B8A8_UNORM, 0));
                ID3D11Texture2D* backBuffer;
                HR(mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer)));
                HR(md3dDevice->CreateRenderTargetView(backBuffer, 0, &mRenderTargetView));
                ReleaseCOM(backBuffer);
在DirectX应用程序中,我们总是将backbuffer大小设置为与窗口大小相同的大小,因此当窗口大小更改时,我们应该相应地更新backbuffer大小,否则您的场景将被拉伸

HR(mSwapChain->ResizeBuffers(1, mClientWidth, mClientHeight, DXGI_FORMAT_R8G8B8A8_UNORM, 0));
ID3D11Texture2D*backBuffer;
HR(mSwapChain->GetBuffer(0,u-uuidof(ID3D11Texture2D),重新解释强制转换(&backBuffer));
HR(md3dDevice->CreateRenderTargetView(backBuffer、0和mRenderTargetView));
ReleaseCOM(backBuffer);
渲染目标基于backbuffer,而backbuffer应该更新

ID3D11Texture2D* backBuffer;
HR(mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer)));
HR(md3dDevice->CreateRenderTargetView(backBuffer, 0, &mRenderTargetView));
ReleaseCOM(backBuffer);