Любой способ найти более подробную информацию о ПРЕДУПРЕЖДЕНИИ: ID3D10Buffer::SetPrivateData: Найдены существующие личные данные с тем же именем с другим размером!

Я сталкиваюсь с этой ошибкой, когда запускаю программу DirectX10 в режиме отладки:

D3D10: ПРЕДУПРЕЖДЕНИЕ: ID3D10Buffer::SetPrivateData: Найдены существующие личные данные с одинаковым именем с другим размером! [ STATE_SETTING WARNING #55: SETPRIVATEDATA_CHANGINGPARAMS ]

Я пытаюсь сделать проект высоко ООП в качестве учебного упражнения, так что есть шанс, что это может произойти, но есть ли способ получить более подробную информацию?

3 ответа

Решение

Какие еще данные вы ищете или заинтересованы?

Предупреждение довольно ясно о том, что происходит, но если вы хотите выследить немного больше данных, может быть несколько вещей, которые нужно попробовать.

Попробуйте позвонить ID3D10Buffer::GetPrivateData с тем же именем или выполните другую проверку, чтобы увидеть, есть ли данные с таким именем, и если да, каково их содержимое. Распечатайте результаты в файл, окно вывода или консоль. Это может быть объединено с точками останова, чтобы увидеть, где происходит дублирование (прерывание, когда уже есть данные).

Вы можете (не уверен) иметь возможность установить время выполнения D3D в режим отладки и отключить предупреждения (не уверен, что он может делать предупреждения или просто ошибки). Отладьте ваше приложение в VS или предпочитаемом отладчике, и когда появится предупреждение, оно сломается, и вы сможете посмотреть параметры.

Просмотрите ваш код и отследите все звонки на ID3D10Buffer::SetPrivateData и посмотрите, есть ли очевидные дубликаты. Если есть, проработайте поток программы и посмотрите, почему и что вы можете с ними сделать (это может сработать лучше всего после того, как вы воспользуетесь одним из первых методов, чтобы узнать, с чего начать).

Как настраиваются ваши имена данных и для чего используется буфер? Изучение одного или обоих может привести вас к конфликту где-то.

Вы также можете попробовать единорогов, они, как известно, помогли с такой проблемой.

Похоже, это предупреждение вызывается D3DX10CreateSprite, который внутренне вызывается с помощью font->DrawText. Вы можете игнорировать это предупреждение, похоже, это ошибка в коде Ms:)

Direct3D11 больше не имеет встроенного рендеринга текста, поэтому вы не столкнетесь с этим в будущем.

Так как это предупреждение 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);

Смотрите эту страницу для более. Я нашел ваш вопрос во время поиска ответа, и мне пришлось поискать немного больше, чтобы найти приведенный выше фрагмент, надеюсь, это кому-нибудь поможет:)

Другие вопросы по тегам