| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Не удается создать 3D устройство. |
| Автор: Vermaxt 24.4.2010, 11:55 | ||
Доброе.
Приложение запускается и сразу закрывается. Подскажите почему? Думаю здесь какая-нибудь очевидная ошибка просто мой недельный опыт не позволяет ее обнаружить) |
| Автор: Alexeis 24.4.2010, 17:16 |
И что отладчика совсем нет? Видно что код от какого-то хеловорда. Нужно проверять какая из функций завершается с ошибкой. После чего открываем MSDN секция ремарки и возвращаемые значения. Там описываются возможные причины. Если после прочтения этого раздела суть ошибки не ясна. Возвращайтесь и описывайте проблему с подробностями. |
| Автор: Vermaxt 24.4.2010, 17:51 | ||
Alexeis,
Возвращает E_FAIL. Только не могу в дебаге увидеть код ошибки. Почему то не пишет. Подскажите как посмотреть код ошибки? |
| Автор: Vermaxt 24.4.2010, 18:20 |
| Вроде как выяснил код ошибки 0x8876086c поискал ничего не нашел. Может кто знает? |
| Автор: Alexeis 24.4.2010, 18:36 | ||
Vermaxt, на самом деле E_FAIL возвращает строчка
Сама же функция CreateDevice возвращает одно из значений D3DERR_DEVICELOST, D3DERR_INVALIDCALL, D3DERR_NOTAVAILABLE, D3DERR_OUTOFVIDEOMEMORY. Чтобы об этом узнать сохраните значение, которое возвращает функция вместо простой передачи в макрос FAILED() Добавлено через 2 минуты и 26 секунд Можно попробовать заменить флаг на D3DCREATE_SOFTWARE_VERTEXPROCESSING для отключения аппаратного ускорения (может дело в драйверах). |
| Автор: Vermaxt 24.4.2010, 19:37 |
| Alexeis, Нет, я это понимаю. Я имел ввиду что возвращаемое значение функции CreateDevice являлось причиной возврата в WinMain значения E_FAIL и как следствие возврата в операционную систему. Нет с драйверами все впорядке. 0x8876086c код который возвращает CreateDevice. Гуглил, ничего не нагуглил. Для полноты изложения: ![]() |
| Автор: Alexeis 25.4.2010, 00:20 | ||||
| В технологии COM результат возвращается следующим образом. старший бит - код серьезности ошибки. Именно он определяет состояние ошибки E_FAIL это или нет. биты 16-26 означают код устройства. И только 2 младших байта это настоящий код ошибки. Смотрим константы Полный код ошибки 0x8876086c D3DERR_DEVICELOST - 0x0868 не подходит D3DERR_INVALIDCALL - 0x086C о! оно подошло На самом деле чтобы такой фигней не заниматься (не вытаскивать код из результата), просто применяем специально созданный для таких случаев макрос HRESULT_CODE(hr). Например
Похоже что D3DPRESENT_PARAMETERS настроена неверно
Можно посмотреть пример инициализации здесь http://www.codesampler.com/d3dbook/chapter_04/chapter_04.htm |
| Автор: Vermaxt 25.4.2010, 08:26 |
| Alexeis, Спасибо разобрался. Все работает! |