多个渲染目标视图 [英] Multiple Render Target View

查看:112
本文介绍了多个渲染目标视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建三重缓冲应用,所以我将DXGI_SWAP_CHAIN_DESC :: BufferCount设置为3,当我尝试为第二个交换链缓冲区创建渲染目标视图时(ID3D11Texture *缓冲区,来自IDXGISwapChain :: GetBuffer(1,__ uuidof(ID3D11Texture2D),
& buffer)),它返回E_INVALIDARG。


我做错了什么?还是我误解了什么?可能只有1个RenderTargetView只需要前面或所有的缓冲区吗?

解决方案

您是否启用了调试层?启用调试层后,如果有一个调试器附加到应用程序,如果出现这样的错误,调试层将向调试器输出一个更具描述性的字符串,告诉你出了什么问题。


但我的赌注是你只需要将渲染目标视图设置为后缓冲区(缓冲区0)。 IDXGISwapChain :: GetBuffer文档说明:


"如果交换链的交换效果是
DXGI_SWAP_EFFECT_DISCARD
,这个方法只能访问第一个缓冲区;对于这种情况,将索引设置为零。


如果交换链的交换效果是
DXGI_SWAP_EFFECT_SEQUENTIAL


DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
,只能读取和写入交换链的零索引缓冲区。索引大于零的交换链缓冲区只能读取;所以如果你打电话给

这些缓冲区的 IDXGIResource :: GetUsage
方法,它们有

DXGI_USAGE_READ_ONLY
标志设置。"


由于渲染目标视图是写入操作,因此无法对缓冲区1执行此操作。


I'm trying to create triple buffered app, so I set DXGI_SWAP_CHAIN_DESC::BufferCount to 3 and when i trying to create render target view for second swap chain buffer (ID3D11Texture* buffer, got from IDXGISwapChain::GetBuffer(1, __uuidof(ID3D11Texture2D), &buffer)), it returns E_INVALIDARG.

Am I doing something wrong? Or did I misunderstand something? Maybe 1 RenderTargetView is needed for only front or all buffers?

解决方案

Do you have the debug layer enabled? With the debug layer enabled, when there is a debugger attached to the application, if there is an error like this then the debug layer will output a more descriptive string to the debugger telling you what is wrong.

But my bet would be that you only need to set the render target view to just the back buffer (buffer 0). The IDXGISwapChain::GetBuffer documentation states:

"If the swap chain's swap effect is DXGI_SWAP_EFFECT_DISCARD, this method can only access the first buffer; for this situation, set the index to zero.

If the swap chain's swap effect is either DXGI_SWAP_EFFECT_SEQUENTIAL or DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL, only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the IDXGIResource::GetUsage method for such buffers, they have the DXGI_USAGE_READ_ONLY flag set."

Since the render target view is a write operation then it cant be done to buffer 1.


这篇关于多个渲染目标视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆