Добро пожаловать в шерстяной мир DirectX!
Первые два шага в отладке любой программы DirectX:
(1) Включите устройство отладки.См. этот блог .Это создаст дополнительные выходные данные отладки во время выполнения, которые дают подсказки о проблемах, подобных той, что у вас есть выше.
(2) Если функция возвращает HRESULT
, вы должны проверить это на предмет успеха или сбоя во время выполнения.Если было бы безопасно игнорировать возвращаемое значение, оно вернуло бы void
.См. эту страницу .
Если бы вы выполнили одно или оба из вышеперечисленных действий, вы бы поймали ошибку, возвращенную из CreateBuffer
выше, что привело к тому, что ConstantBuffer
по-прежнему был нулевым, когдаВы позвонили UpdateSubresource
.
. Причина, по которой это не удалось, заключается в том, что вы в общем случае не можете создать постоянный буфер, равный D3D11_USAGE_DEFAULT
и D3D11_CPU_ACCESS_WRITE
.Память использования ПО УМОЛЧАНИЮ часто находится в видеопамяти, которая недоступна для процессора.Поскольку вы используете UpdateSubresource
, а не Map
, вы должны просто использовать:
Buffer.CPUAccessFlags = 0;
Вы должны взглянуть на DirectX Tool Kit и связанные с ним учебные пособия.