Итак, я пытаюсь выяснить свою проблему в течение нескольких часов, но я понятия не имею, что я делаю неправильно. Я новичок, когда дело доходит до программирования DirectX, поэтому я следовал некоторым учебникам, и сейчас я пытаюсь создать загрузчик obj.
http://www.braynzarsoft.net/index.php?p=D3D11OBJMODEL
Тем не менее, я не могу заставить мою текстуру работать.
Вот как я пытаюсь загрузить DDS-текстуру:
ID3D11ShaderResourceView* tempMeshSRV = nullptr;
hr = CreateDDSTextureFromFile(gDevice, L"boxTexture.dds", NULL, &tempMeshSRV);
if (SUCCEEDED(hr))
{
textureNameArray.push_back(L"boxTexture.dds");
material[matCount - 1].texArrayIndex = meshSRV.size();
meshSRV.push_back(tempMeshSRV);
material[matCount - 1].hasTexture = true;
}
Тем не менее, мой HRESULT никогда не будет успешным, но он также не падает. Если я нахожу пылесос над часом, он просто говорит: «HRESULT_FROM_WIN32 (ERROR_NOT_SUPPORTED) Я также попытался удалить оператор if, но это просто сделает мой ящик черным.
Есть идеи, что я делаю не так? знак равно
Заранее спасибо!
Наиболее вероятная проблема заключается в том, что ваш «boxTexture.dds» представляет собой файл формата 24 бита на пиксель. В Direct3D 9 это было D3DFMT_R8G8B8
и был достаточно распространен. Тем не менее, есть нет эквивалентного формата DXGI для 24 бит на пиксель, и поэтому для работы требуется преобразование формата.
Модуль DDSTextureLoader в Набор инструментов DirectX разработан, чтобы быть функцией минимальных издержек, и поэтому делает нет конвертации во время выполнения вообще. Если данные напрямую отображаются в формат DXGI, они загружаются. Если это не так, это не с HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)
,
Есть два разных решения в зависимости от вашего сценария использования.
LoadFromDDSFile
функция, которая имеет обширный код преобразования для обработки устаревших форматов файлов DDS.Обратите внимание, что такая ситуация может возникнуть для ряда устаревших файлов формата DDS, перечисленных в списке Вики-документация CodePlex
Смотрите также Direct3D 11 текстуры и сжатие блоков
Если вы посмотрите на исходный код CreateTextureFromDDS (который вызывается CreateDDSTextureFromFile для выполнения основной обработки данных) — http://directxtk.codeplex.com/SourceControl/latest#Src/DDSTextureLoader.cpp — вы увидите, что существует множество причин, по которым вы можете получить «HRESULT_FROM_WIN32 (ERROR_NOT_SUPPORTED)».
Скорее всего, это проблема с открытием или чтением файла, так как это приведет к другому коду ошибки. Так что, скорее всего, это неподдерживаемый DXGI_FORMAT, неверно сформированная кубическая карта, недопустимое количество mipmap или неверные размеры изображения (то есть больше, чем указанные здесь ограничения: http://msdn.microsoft.com/en-us/library/ff819065(v=vs.85).aspx ).