Проблема в том, что вы предоставили слишком большое число для NumEntries
, поэтому он читает кучу ненужных записей после 3, которые вы определили для pSODeclaration
.Вот почему выходные данные отладки ошибки проверки сообщают о бессмысленных значениях, таких как «Поток (= 3435973836)».
result = renderer->CreateGeometryShaderWithStreamOutput(
geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(),
SODeclarationEntry, sizeof(SODeclarationEntry),
nullptr, 0, 0, nullptr, &streamOutputGeometryShader);
должно быть:
result = renderer->CreateGeometryShaderWithStreamOutput(
geometryShaderBuffer->GetBufferPointer(), geometryShaderBuffer->GetBufferSize(),
SODeclarationEntry, _countof(SODeclarationEntry),
nullptr, 0, 0, nullptr, &streamOutputGeometryShader);
Обратите внимание, что если вы работаете с другимКомпилятор, чем Microsoft Visual C ++, _countof
это:
#define _countof(array) (sizeof(array) / sizeof(array[0]))
Кстати, это та ошибка, которую статический анализ кода (/analyze
) и аннотации SAL, которые используются для системных заголовков Windows, могутнайти для вас:
warning C6385: Reading invalid data from 'SODeclarationEntry': the readable
size is '48' bytes, but '768' bytes may be read.
См. Документы Microsoft для получения дополнительной информации.