Как запустить раст directx 12

Обновлено: 04.07.2024

Предлагаем в этой статье разобраться, что нужно знать обычному пользователю ПК о приложении DirectX.

Для обычного игрока разработка компьютерных программ может показаться сложным и длительным процессом. И это действительно так. Например, каждая модель консолей (Xbox, PlayStation, Nintendo) содержит в себе один конкретный процессор, видеокарту, встроенную память, слоты ввода и другие аппаратные компоненты. Поэтому для них не требуется дополнительное ПО.

В то же время разработчики компьютерных игр сталкиваются с большим изобилием аппаратных конфигураций. Как следствие, возникает необходимость в приложении, способном заставить весь этот “зоопарк” работать слаженно и без ошибок.

Что такое DirectX в Windows 10

Простыми словами, DirectX это программное обеспечение, взаимодействующее с аппаратными компонентами ПК. Оно участвует в вычислительных процессах, связанных с рендерингом 2D и 3D графики, рендеринге видео и воспроизведении звука на платформе Windows.

Комментарий NVIDIA: Основное внимание DirectX 12 направлено на значительное увеличение качества графики за счет снижения нагрузки на центральный процессор.

Приложение яростно соперничает с OpenGL, другим графически ориентированным софтом, представленным в 1992 году. Он представляется с открытым исходным кодом и находится в непрерывной разработке технологического консорциума Khronos Group. И хотя OpenGL является кросс-платформенным API, он вряд ли когда-либо станет конкурентом для DirectX в Windows.

Преимущества DirectX 12

Вплоть до выхода DirectX 12, недостатком программы было отсутствие низкоуровневого доступа к аппаратным компонентам компьютера. Для решения этой проблемы AMD выпустили свой собственный пакет, под названием Mantle API. Это помогло оптимизировать работу старых версий DirectX с аппаратурой AMD. Тем не менее, данный софт никак не повлиял на владельцев видеокарт NVIDIA.

Исторически сложилось так, что драйверы и программное обеспечение ОС управляли памятью и другими ресурсами ПК отдельно от имени их разработчиков. Однако это было неэффективно. Низкая производительность связана в первую очередь с тем, что данный алгоритм не мог проанализировать потребности активной программы. DirectX 12 в свою очередь помогает приложениям напрямую управлять ресурсами компьютера и выполнять синхронизацией аппаратуры. В результате разработчики игр могут наладить эффективную работу GPU относительно других компонентов.

Дополнительной особенностью DirectX 12 является функция распределения нагрузки между ядрами центрального процессора. Если раньше, в DirectX 11, “отдуваться за всех” могло лишь одно ядро, то теперь задействованы все элементы ЦП.

Частые вопросы о DirectX

Как определить версию DirectX

Часто на DirectX не обращают такого же внимания, как оно уделяется версии драйвера видеокарты или любого другого устройства. Это вполне естественно. И по этой причине многие пользователи не знают какая версия программного обеспечения у них установлена. К счастью, уточнить ее довольно легко.

1. Воспользуйтесь комбинацией клавиш Windows + R и откройте утилиту Выполнить .

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Хостинг игровых серверов

Andrey1234

Новичек

Как запустить Rust с DirectX 9/10/11 у друзей вылетает из-за того что Rust не поддерживает их DirectX

ZiPPY

С 9 никак, уже убрали поддержку, с 10 параметр запуска - "-force-feature-level-10-0" , с 10.1 - "-force-feature-level-10-1"

Andrey1234

Новичек

Как установить параметры запуска на старом devblog?

ZiPPY

Как установить параметры запуска на старом devblog?

если старый девблог, то думаю можно будет подключить и 9 версию. Параметр запуска "-force-d3d9", Как создать - ПКМ по RustClient.exe, создать ярлык - заходи в свойства этого ярлыка, и в поле обьект (там могут быть "" в конце), после ковычек или если их нету, то просто в конце допиши параметр

Kaidoz

вышел покурить

@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?

Andrey1234

Новичек

@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?

Чтобы друзья могли зайти. У всех разные DirectX на ПК, но это не значит что ПК самый слабый или нет оперативки.

Pclayer

@Andrey1234, какой толк в этом? Чтобы друзья наблюдали на экранах слайд шоу?

Kaidoz

вышел покурить

Чтобы друзья могли зайти. У всех разные DirectX на ПК, но это не значит что ПК самый слабый или нет оперативки.

про оперативку ничего не говорил. Если у людей не поддерживает DirectX 11 , то у людей уже неактуальные видеокарты и соответственно о нормальном фпс идти речи не может.
11 директ вышел еще в далеком 2009 году, в 2010 вышли первые игры с этой технологии и соответственно новые игровые видеокарты должны в обязательном порядке поддерживать эту технологию, в принципе какой толк от игровой видеокарты, которая даже новинки не запустит?
Добавлю, что есть способ запустить игры на видяхе без поддержки DirectX11, но как я выше сказал, что фпс будет крайне мал(5-15 фпс, 6 цива, gtx 250). Может видеокарта слабая для цивы или из-за костыля так, возможно с растом будет лучше(ну и шутканул). Ссылку на способ не кину, дело было в 2016, но думаю не составит труда загуглить.
Может быть частично с фпс'ом решит проблему длл-ка(делает из игры мыло с бегающими игроками), которую делал на зеро и ультра раст, лично у меня прибавила 20-30фпс. С новым с растом тоже работала со слов игроков, но сейчас думаю нет из-за изменений в гуи.

ZiPPY

про оперативку ничего не говорил. Если у людей не поддерживает DirectX 11 , то у людей уже неактуальные видеокарты и соответственно о нормальном фпс идти речи не может.
11 директ вышел еще в далеком 2009 году, в 2010 вышли первые игры с этой технологии и соответственно новые игровые видеокарты должны в обязательном порядке поддерживать эту технологию, в принципе какой толк от игровой видеокарты, которая даже новинки не запустит?
Добавлю, что есть способ запустить игры на видяхе без поддержки DirectX11, но как я выше сказал, что фпс будет крайне мал(5-15 фпс, 6 цива, gtx 250). Может видеокарта слабая для цивы или из-за костыля так, возможно с растом будет лучше(ну и шутканул). Ссылку на способ не кину, дело было в 2016, но думаю не составит труда загуглить.
Может быть частично с фпс'ом решит проблему длл-ка(делает из игры мыло с бегающими игроками), которую делал на зеро и ультра раст, лично у меня прибавила 20-30фпс. С новым с растом тоже работала со слов игроков, но сейчас думаю нет из-за изменений в гуи.

Тут ты не прав. Я играл на старой видеокарте (gt 240 512mb), и она поддерживала максимум директ 10. Я играл на 10, и фпс был нормальный. 35-40 кадров

Kaidoz

вышел покурить

Тут ты не прав. Я играл на старой видеокарте (gt 240 512mb), и она поддерживала максимум директ 10. Я играл на 10, и фпс был нормальный. 35-40 кадров

Не понял при чем тут это)
Моя gtx 250(речь идет про старую версию 2012 года примерно) тоже поддерживала 10 directx, но не поддерживала 11. Поэтому я через костыль запускал Циву, которая поддерживала онли 11 и 12 директ.
Да и по мне фпс 35-40 играбелен только для игры в стратегии, но никак не для шутеров, где важна плавность картинки. Старый дев поддерживает минимум 10, а у некоторых даже он не поддерживается, так что даже сложно предположить какой будет фпс на подобных картах.

Уже 29 числа, с выходом Windows 10, станет доступна новая версия DirectX, которая обещает увеличить производительность в играх и не только. В отличие от DirectX 11, вам не потребуется покупать новую видеокарту, и это не может не радовать. DirectX 12 обещает работу на многих устройствах: на смартфонах, планшетах, ноутбуках, персональных компьютерах и Xbox One. Для последнего сама Microsoft предрекает увеличение производительности, даже по сравнению с PS4.

Что такое DirectX?

«DirectX (от англ. direct — прямой, непосредственный) — это набор API, разработанных для решения задач, связанных с программированием под Windows. Наиболее широко используется при написании компьютерных игр. Пакет средств разработки DirectX под Windows бесплатно доступен на сайте Microsoft. Зачастую обновленные версии DirectX поставляются вместе с игровыми приложениями.» (с) Wikipedia

Нововведения в DirectX 12

Низкоуровневый доступ
Поскольку ранее DirectX завоевывал рынок, Microsoft была нацелена на универсальность программного обеспечения и не давала разработчикам прямого доступа к низкоуровневым функциям видеокарты. Но теперь, благодаря новым процедурам вызова, доступ к ним открыт. Но если разработчики не используют новшества, то драйверы смогут автоматически оптимизировать их использование для решения стандартных задач.

Многопоточная оптимизация и разгрузка CPU
В марте 2014 года свет увидела большая (на то время) порция информации о новой версии API. Главной темой была оптимизация использования CPU, и в качестве примера были показаны результаты теста скорости вывода кадра в бенчмарке 3DMark. На скриншоте ниже можно увидеть сокращение скорости отображеня кадра в два (!) раза из-за оптимизации использования лишь CPU и более «умного» распределения ресурсов по ядрам.

DirectX 12: Чего ждать?

Также оптимизирована работа процессоров, имеющих более четырех ядер. Если раньше не имело смысла переплачивать за лишние ядра, если процессор покупался для игр, то теперь все поменялось.

DirectX 12: Чего ждать?

DirectX 12: Чего ждать?

Использование нескольких GPU
Настал праздник для геймеров, имеющих встроенное видео ядро в своих процессорах, но не слишком мощную дискретную видеокарту. DirectX 12 позволит работать одновременно не только видеокартам с технологиями SLI или CrossFire, но и связкам «дискретная + интегрированная».

DirectX 12: Чего ждать?

Ходят слухи об объединении дискретных видеокарт разных производителей в связки, но подтверждений этому нет, да и мы знаем, как Nvidia не любит подобные решения.

Но и для владельцев известных связок есть приятная новость. Видеокарты работают одновременно, а не поочередности, а видеопамять ваших видеокарт суммируется. Теперь multi GPU системы имеют раздельный буфер, где доступна вся память видеоадаптера, а не общий, как раньше.

DirectX 12: Чего ждать?

DirectX 12: Чего ждать?

DirectX 12 и встраиваемые low-end GPU
Улучшение производительности, как и сам DirectX 12, будет доступно не только на суперсовременных игровых станциях, но и для относительно слабых встраиваемых решений. По тестам, проведенным на Surface Pro 3 с процессором Core i5, имеющим встроенное видео ядро Intel HD Graphics 4400, производительность увеличилась на 50%. Все благодаря более рациональному использованию GPU.

DirectX 12: Чего ждать?

Использование всего потенциала eSRAM (только Xbox One)
eSRAM – особая высокоскоростная память, используемая в GPU Xbox One. Ранее использовалось специальное API для управления, но сейчас, с выходом DirectX 12, всем управляет одно API – DirectX. Данное улучшение обещает увеличение быстродействия памяти и более рациональное ее использование. Вероятно это поможет сократить, а может и вовсе избавиться, от отставания от PS4.

DirectX 12: Чего ждать?

Обратная совместимость с DirectX 11 видеокартами
Большинство современных видеокарт, которые поддерживают DirectX 11, полностью совместимы с DirectX 12. Но, к сожалению, далеко не все смогут использовать все нововведения в новом API.

DirectX 12: Чего ждать?

  • Windows 10;
  • Видеокарта, совместимая с DirectX 12 API;
  • Видео драйвер, поддерживающий DirectX 12 API;
Имея этот набор, вам останется лишь дождаться выхода игр с поддержкой DirectX 12, чтобы проверить все самому.

Моя видеокарта поддерживает DirectX 12?

Список видеокарт с поддержкой DirectX 12 API:
*В этом списке предоставлены видеокарты, поддерживающие DirectX 12 API, но далеко не все из них поддерживают DirectX 12_0 и DirectX 12_1.

  • AMD Radeon™ R9 285, 290/290X, 295X2, M295X
  • AMD Radeon™ R7 260/260X
  • AMD Radeon™ HD 8770
  • AMD Radeon™ HD 7790
  • GeForce, GTX Titan X
  • GTX 980, GTX 980Ti
  • GTX 970
  • GTX 960
  • GeForce, GTX Titan X
  • GTX 980, GTX 980Ti
  • GTX 970
  • GTX 960

DirectX 12_0
Только GPU или архитектуры, специально разработанные для поддержки DirectX 12, будут поддерживать уровень функций DirectX 12_0, который содержит ряд новых технологий. Среди них – тайловые ресурсы Tiled Resources. В принципе, тайловые ресурсы известны ещё по DirectX 11, они отличаются высокой эффективностью по используемой памяти, а также могут значительно улучшить уровень детализации. С помощью мелких текстур в многократных ориентациях можно симулировать крупные текстуры. Кроме того, существенно экономится память. А качество картинки приносить в жертву не придётся.

В примере приводится классическая текстура Texture 3D под DirectX 11 с разрешением 1.200 x 600 x 600 пикселей с 32-битным цветом – она занимает 1,6 Гбайт. С тем же качеством можно использовать тайловую текстуру Tiled Texture 3D через многократные повторения – она будет иметь разрешение 32 x 32 x 16 пикселей с 32-битным цветом. Размер при этом будет составлять 156 Мбайт. В одном из примеров приведена сцена рендеринга, в которой тайловая 3D-текстура используется 2.500 раз. Для создания и симуляции некоторых материалов в 3D добавляется ещё одно информационное поле. Им может быть, например, значение прозрачности или вязкости. Такой подход позволяет лучше симулировать жидкости и газы.

Ещё один тип тайловых ресрусов – объёмные тайловые ресурсы (Volume Tiles Resources), однако они относятся к уровню функций уже не DirectX 12_0, а 12_1.

К уровню DirectX 12_0 относится Typed UAV и новая модель Bind, которые ориентируют API на большее число ядер CPU, что обеспечивает более широкую параллелизацию и производительность.

DirectX 12_1
Ещё на шаг дальше Microsoft и разработчики GPU пошли с DirectX 12_1. Но данный урвоень функций поддерживают только самые новейшие GPU. К ним относятся все GPU на основе 2-го поколения "Mawell". Одна из новых технологий – консервативная растеризация (Conservative Rasterization). Она используется для фильтра динамического суперразрешения (Dynamic Super Resolution) и сглаживания Multiframe Sampled Anti-Aliasing.

При растеризации небольшого объекта/пикселя в некоторых случаях лучше учитывать все покрытые точки семплирования, пусть даже частично. Также консервативная растеризация важна при вокселизации VXGI. Улучшенная методика наиболее заметна и при расчете теней.

Видео демонстрации DirectX 12:

Заключение
Все выглядит очень многообещающе. Для AMD в частности. AMD славится своими шести и восьми-ядерными процессорами – улучшена поддержка многоядерных процессоров. AMD имеет процессоры с хорошими графическими ядрами (APU) – мощности встроенной и дискеретной графики суммируются. Улучшена поддержка высоких разрешений, в которых даже не самые новые видеокарты от AMD и так хорошо себя чувствуют. Графика от Nvidia или Intel тоже не останется в дураках, все получат прирост производительности. Но на самом деле, больше от этого выиграем мы – игроки.

Остается надеяться, что игры с ужасной оптимизацией будут выходить реже, чем сейчас, а железо не придется апгрейдить так часто. Мечты-мечты :)

//Статья не является копипастой. Вся собранная тут информация была получена из общедоступных источников, обработана и описана в этой статье. Весь заимствованный контент имеет под собой ссылку на первоисточник.

а есть что-то более симпатичное на вид?
сейчас оно выглядит чуть ли не хуже плюсов.

Начал потихоньку комментировать исходники тестовой программки.

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

Может быть кому-то будет интересно посмотреть что представляет из себя DX12 и Rust.

Здравствуйте, neFormal, Вы писали:

F>а есть что-то более симпатичное на вид?
F>сейчас оно выглядит чуть ли не хуже плюсов.

Гм. Наверно на чей-то вкус очень симпатичная.

F>а есть что-то более симпатичное на вид?
F>сейчас оно выглядит чуть ли не хуже плюсов.
Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.

Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
Удобства раста (если они имеются) с таким подходом почувствовать не получается.

Некоторые места вообще вызываю отторжение. Вот например:

Второй swap_chain может из-за криво названных переменных получился, но почему нельзя как-то сделать hresult из одного слова?
Явный this (self?) — это шаг обратно в С.
И еше непонятно, как толком реализовывать обработку ошибок с подходом раста "исключения не нужны"?
Проверки результатов с unwrap (?) чуть ли не на каждой строчке — это ужасно, еще одна деградация в С.

Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.

Здравствуйте, VTT, Вы писали:

VTT>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.

и это будет примерно на таком же уровне, как приведённый код.
поэтому хочется более выразительных примеров.

Здравствуйте, VTT, Вы писали:

VTT>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.

Строчка из Microsoft'овского хелло-ворлда. Можно, конечно, привести к более приличному виду чем-то вроде макроса, который я привел ниже.

VTT>Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
VTT>Удобства раста (если они имеются) с таким подходом почувствовать не получается.

Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.

Или попробуйте переписать
submit_in_parallel() на С++, так, чтобы заработало с первого раза.

ДОБАВЛЕНО НЕМНОГО ПОЗЖЕ:
Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.

VTT>Некоторые места вообще вызываю отторжение. Вот например:
VTT>

А как вам это чудо из глубин заголовочных файлов?

Я set_fullscreen тоже написал, чтобы меньше лазить во внутренности DXSwapchain.

VTT>Второй swap_chain может из-за криво названных переменных получился, но почему нельзя как-то сделать hresult из одного слова?


Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.

Обычно я пишу HResult<()>.

VTT>Явный this (self?) — это шаг обратно в С.

Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.
Есть в аргументах функции self? Есть. Значит должен быть и в вызове.

Может и уберут когда-нибудь. Но особо не напрягает.

А шаг к С — это не всегда плохо. И не всегда обратно. Hint: composition over inheritance.

VTT>И еше непонятно, как толком реализовывать обработку ошибок с подходом раста "исключения не нужны"?
VTT>Проверки результатов с unwrap (?) чуть ли не на каждой строчке — это ужасно, еще одна деградация в С.

Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.

А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.

Здравствуйте, red75, Вы писали:

R>Здравствуйте, VTT, Вы писали:

VTT>>Нечего тут катить бочку на С++. Задействовать DirectX в С++ можно вполне лаконично и читабельно.

R>

R>Строчка из Microsoft'овского хелло-ворлда. Можно, конечно, привести к более приличному виду чем-то вроде макроса, который я привел ниже.

VTT>>Тут скорее проблема в том, что это вроде как почти прямой проброс заголовков из SDK в раст.
VTT>>Удобства раста (если они имеются) с таким подходом почувствовать не получается.

R>Или попробуйте переписать
R>submit_in_parallel() на С++, так, чтобы заработало с первого раза.

Под "лаконично и читабельно" я обычно подразумеваю что-то похожее на Simple English;
существительные-переменные, глагол-метод, с минимумом скобочек, палочек и прочих крякозябр, например:


Откровенно говоря, моих познаний в расте явно недостаточно, чтобы осилить этот фрагмент.
Многие места с ходу вообще нереально переварить, например:

первый scope похож на метод, второй на какое-то особое ключевое слово или директиву, а третий — на переменную, хз что это все значит.


цикл (?) наводит ужас.


многие методы выглядят так, как будто вызывают сами себя рекурсивно

R>Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.

R>Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
R>В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
R>инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.

Ну размер массива никто и в С++ передавать не мешает.
Лично для меня такие проблемы остро не стоят.

R>А как вам это чудо из глубин заголовочных файлов?

R>

хорошо, что я давно отказался от использования этого макроса.

R>Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.
R>Обычно я пишу HResult<()>.

А нет ли какого-то способа эмулировать исключения чтобы не пробрасывать везде эти HRESULT?

R>Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.

Желание похвальное. Но реализовано как-то странно. Как я понял, проблемы с заслонением переменных из внешних областей видимости такой подход не решает никак.

R>Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.

Вот кстати наличие в языке таких макросов (вообще наличие макросов) вызывает очень нехорошее ощущения.

R>А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.

Ну примеры MS явно не стоит рассматривать в качестве эталона качества. А в каких это примерах они так лихо кидаются исключениями?

Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.

Здравствуйте, VTT, Вы писали:

R>>Или попробуйте переписать
R>>submit_in_parallel() на С++, так, чтобы заработало с первого раза.

VTT>Под "лаконично и читабельно" я обычно подразумеваю что-то похожее на Simple English;
VTT>существительные-переменные, глагол-метод, с минимумом скобочек, палочек и прочих крякозябр, например:
VTT>

VTT>Многие места с ходу вообще нереально переварить, например:
VTT>
VTT>первый scope похож на метод, второй на какое-то особое ключевое слово или директиву, а третий — на переменную, хз что это все значит.

crossbeam::scope это вызов функции scope из модуля crossbeam. В принципе, тоже что и в С++ с неймспейсами (а году к 2017-му вроде и модули добавят).


это лямбда. Аналог в С++:

правда не помню, позволяет С++ auto в лямбдах или нет.

crossbeam::scope передаёт в лямбду RAII-guard (scope).
Гарантируется, что RAII-guard выйдет из области видимости только тогда когда все потоки,
созданные с его помощью (scope.spawn() это как-раз создание потока, имеющего доступ к локальным переменным),
будут завершены.

означает, что лямбда получает не ссылки на локальные переменные, а становится их владельцем.
Тут это не особенно важно, да и долго объяснять.

VTT>
VTT>цикл (?) наводит ужас.

Цикл. В С++ было бы что-то вроде. Хм. Ну, наверно.

VTT>
VTT>многие методы выглядят так, как будто вызывают сами себя рекурсивно

Предпочитаю использовать функции. Если перед идентификатором нет точки, это всегда функция.

R>>Одна только передача размера массива вместе с самим массивом устраняет множество точек в которых можно сделать ошибку.

R>>Чем хорош Rust, это тем что можно построить гарантированно стабильную платформу для написания кода.
R>>В отличии от С++, в котором, сколько темплейтов и макросов не накручивай, всегда можно словить
R>>инвалидированный итератор, или ссылку, которая указывает на деаллоцированную память.

VTT>Ну размер массива никто и в С++ передавать не мешает.
VTT>Лично для меня такие проблемы остро не стоят.

Ни одного core-dump'a, buffer overrun'a, abstract method call'a, use of uninitialized variable,
overlapping memory region copy? Честно? Проверьте статическим анализатором свой код.

R>>Но это не очень частый случай, когда функция может вернуть не ошибку, а, например, DXGI_STATUS_MODE_CHANGE_IN_PROGRESS.
R>>Обычно я пишу HResult<()>.

VTT>А нет ли какого-то способа эмулировать исключения чтобы не пробрасывать везде эти HRESULT?

unwrap() убивает поток в котором выполняется, с вызовом всех деструкторов.
Из другого потока можно обработать эту ситуацию. Но такое не рекомендуется.

R>>Это не очень приятное следствие стремления разработчиков Rust'а избегать неявных вещей.

VTT>Желание похвальное. Но реализовано как-то странно. Как я понял, проблемы с заслонением переменных из внешних областей видимости такой подход не решает никак.

На этот случай есть предупреждеие.

R>>Вы мой код смотрели? Кое-где там try! есть. Как соберусь реализовывать error recovery, добавлю везде.

VTT>Вот кстати наличие в языке таких макросов (вообще наличие макросов) вызывает очень нехорошее ощущения.

Ну, у меня std::cout<<std::hex<<std::width(8)<<static_cast<intptr_t>(ptr)<<std::endl; вызывает смех.
Таки, println!("",ptr) получше будет.

R>>А пока ничем не хуже примера Microsoft'а. Исключения они там кидают, но заботы о сохранении консистентного состояния после вызова исключения там нет, да что там, там даже поимки исключений нет.

VTT>Ну примеры MS явно не стоит рассматривать в качестве эталона качества. А в каких это примерах они так лихо кидаются исключениями?

А exception-safe программу нужно ооочень долго искать.

Здравствуйте, red75, Вы писали:

R>Ни одного core-dump'a, buffer overrun'a, abstract method call'a, use of uninitialized variable,
R>overlapping memory region copy? Честно? Проверьте статическим анализатором свой код.

Такие вещи если и случаются, то обычно из-за внешних причин: баги в сторонних библиотеках, бинарные несовместимости, проблемы с конфигурацией, аппаратные проблемы и т.п.
Чтобы словить abstract method call надо очень сильно напортачить, я даже не припомню таких случаев.
И да, я и так стараюсь проверять не только статическим анализатором (тут правда все плохо, ибо доступа к корпоративным коммерческим решениям нет, анализатор в VS слабоват и не доступен под linux, а cppcheck уже все), но и в рантайм.

R>Ну, у меня std::cout<<std::hex<<std::width(8)<<static_cast<intptr_t>(ptr)<<std::endl; вызывает смех.
R>Таки, println!("",ptr) получше будет.

Ну не знаю, эти примеры демонстрируют работу с API DirectX, а не exception-safe программирование.
Мне кажется, что игнорирование hresult было бы более тяжелой ошибкой, нежели выкидывание при этом неловящегося исключения без заботы о дальнейшей жизни программы.

Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.

А какой смысл экономить на длине названий? Почему M4, а не Matrix4?

Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать и показать что
это более примитивный тип. Кроме того M4 используется только в модуле cubes.

А экспорт этих типов из модуля действительно надо убрать, спасибо.

Здравствуйте, red75, Вы писали:

R>Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать
Т.е. из-за проблем редактора (отсутствует автодополнение) нужно превращать код в набор иероглифов понятных только автору?

R>и показать что
R>это более примитивный тип.
По Matrix4 и так понятно.

Здравствуйте, Nikе, Вы писали:

N>Здравствуйте, red75, Вы писали:

R>>Matrix3<T>, Matrix4<T> импортируются из крейта cgmath. М4, чтобы меньше печатать
N>Т.е. из-за проблем редактора (отсутствует автодополнение) нужно превращать код в набор иероглифов понятных только автору?

В VisualRust автодополнение в этом случае как-раз работает. И не иероглифы, а аббревиатуры.

Перенес type M4=.. к единственному месту где он используется (struct Constants).

Здравствуйте, red75, Вы писали:

R>В VisualRust автодополнение в этом случае как-раз работает. И не иероглифы, а аббревиатуры.

Аббревиатуры имеют право на существование только когда они общеприняты или отображают пространство имён (т.е. встречаются очень часто).

Читайте также: