【问题标题】:what is the difference between getBuffer() and CreateRenderTargetView in directx 11?directx 11 中的 getBuffer() 和 CreateRenderTargetView 有什么区别?
【发布时间】:2012-10-04 09:18:14
【问题描述】:

我是 DirectX11 的新手并且正在学习它。 (我来自openGL背景)。

我很困惑,并试图了解以下 API 调用的确切作用以及它们之间的区别:

ID3D11Texture2D* pBackBuffer = NULL;
hr = g_pSwapChain->GetBuffer( 0, __uuidof( ID3D11Texture2D ), ( LPVOID* )&pBackBuffer );

hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer, NULL, &g_pRenderTargetView );
pBackBuffer->Release();

GetBuffer 到底是做什么的?那么我们如何在 CreateRenderTargetView 中使用 pBackBuffer 呢?另外,有人可以解释一下或指向一个链接来解释什么是渲染目标视图msdn doc 对我来说没有多大意义。

【问题讨论】:

    标签: graphics directx directx-11 rendertarget


    【解决方案1】:

    我记得,GetBuffer() 返回指向设备使用的内部后备缓冲区的指针。 然后从那里创建一个RenderTarget,您可以将其绑定为"Real backbuffer" 目标。

    把它想象成: pBackbuffer = glBindFramebuffer(GL_FRAMEBUFFER, 0);

    这就是我记得的方式。 (前段时间我用 dx11 做了这个)

    编辑* rendertargetviewframebuffer。它是一种可以绑定以进行读写的纹理。

    【讨论】:

    • 所以,如果我理解正确的话,getBuffer 会返回指向实际缓冲区的指针。 CreateRenderTargetView 使这个缓冲区成为渲染目标(又名帧缓冲区),然后绑定到渲染管道中。 PS:RenderTargetView 不会创建另一个缓冲区。
    • 是的,您必须从它创建一个接口,而不是返回一个 int(如 opengl 剂量)。他们只是喜欢用花哨的名字来称呼它!
    • 哈哈,是的,我完全同意!
    • 请注意,您不能从 RenderTargetView 中读取,因为您需要创建一个 ShaderResourceView。 @Tordin 我们都喜欢花哨的名字))
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2012-05-31
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多