任何方式可以找到有关警告的更多细节:ID3D10Buffer :: SetPrivateData:找到具有不同大小的同名的现有私有数据!

时间:2011-04-01 03:00:42

标签: directx directx-10

我在调试模式下运行DirectX10程序时遇到此错误:

D3D10:警告:ID3D10Buffer :: SetPrivateData:找到不同大小的同名私有数据! [STATE_SETTING WARNING#55:SETPRIVATEDATA_CHANGINGPARAMS]

我正在尝试将项目高度OOP作为学习练习,因此可能会出现这种情况,但有没有办法获得更多细节?

3 个答案:

答案 0 :(得分:2)

看来这个警告是由D3DX10CreateSprite引发的,它由font-> DrawText在内部调用 您可以忽略此警告,似乎是Ms代码中的错误:))

Direct3D11不再具有内置文本渲染功能,因此您将来不会遇到它。

答案 1 :(得分:0)

您还在寻找或感兴趣的其他数据?

警告对于发生的事情非常清楚,但如果你想要追捕更多的数据,可能需要尝试一些事情。

尝试使用相同名称调用ID3D10Buffer::GetPrivateData或进行其他检查以查看是否已存在具有该名称的数据,如果有,则内容是什么。将结果打印到文件,输出窗口或控制台。这可以与断点组合以查看重复发生的位置(当已有数据时中断)。

可能(不是肯定的)能够将D3D运行时设置为调试模式并打破警告(不确定它是否可以发出警告或只是错误)。在VS或首选调试器中调试您的应用程序,当显示警告时,它将中断,您可以查看参数。

浏览您的代码并跟踪对ID3D10Buffer::SetPrivateData的所有来电,并查看是否有任何明显的重复项。如果有,请编写程序流程并查看为什么以及您可以对它们做些什么(在使用以前的方法之一知道从哪里开始之后,这可能效果最好。)

您的数据名称是如何设置的,缓冲区用于什么?检查一个或两个可能会导致你在某个地方发生冲突。

你也可以尝试独角兽,他们已经知道可以帮助解决这类问题。

答案 2 :(得分:0)

由于这是D3D11警告,您可以使用ID3D11InfoQueue

将其关闭
D3D11_MESSAGE_ID hide [] = {
    D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS,
    // Add more message IDs here as needed
};

D3D11_INFO_QUEUE_FILTER filter;
memset(&filter, 0, sizeof(filter));
filter.DenyList.NumIDs  = _countof(hide);
filter.DenyList.pIDList = hide;
d3dInfoQueue->AddStorageFilterEntries(&filter);

有关详情,请参阅this page。我在谷歌上搜索答案时发现了你的问题,不得不再搜索一下以找到上面的代码片段,希望这会对某人有所帮助:)