Есть ли преимущество использования C ++ вместо C # при использовании Direct3D? - PullRequest
4 голосов
/ 29 апреля 2011

Есть ли преимущество использования C ++ вместо C # при использовании Direct3D? Все учебники, которые я нашел для C ++ и DirectX, используют Direct3D (который, насколько мне известно, управляется). Точно так же все учебники по C #, которые я нашел, предназначены для Direct3D.

Управляется ли Direct3D? Есть ли разница между использованием D3D на любом из двух языков?

Ответы [ 3 ]

10 голосов
/ 29 апреля 2011

DirectX полностью родной. Любое впечатление, которое у вас может сложиться, совершенно неверно. Существуют управляемые оболочки , которые позволят вам использовать DirectX из управляемого кода. Кроме того, DirectX запрограммирован для доступа из C ++ или C или аналогичных языков. Если вы посмотрите на проект SlimDX, они столкнулись с многочисленными проблемами, особенно из-за сбора ресурсов, потому что C # действительно не поддерживает автоматический сбор ресурсов, не связанных с памятью, и using не сокращает горчицу. Кроме того, игровое программирование может быть очень ресурсоемким, и часто дополнительная производительность, теряемая при использовании управляемого языка, является несостоятельной, и практически все существующие вспомогательные библиотеки предназначены для C или C ++.

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

2 голосов
/ 29 апреля 2011

Смысл Direct3D - перенести рендеринг с процессора на графический процессор. Если бы существовала значительная разница в производительности, это было бы для того кода, который работает на ЦП. Поэтому я не вижу существенной разницы в производительности между собственным и управляемым кодом для той части кода, которая взаимодействует с Direct3D.

Direct3D сам по себе не является управляемым кодом.

0 голосов
/ 29 апреля 2011

Это зависит от того, что вы делаете точно.Как отметил Дэвид Хеффернан, одна из целей Direct3D - перенести как можно больше обработки на графический процессор.С появлением вершинных шейдеров, пиксельных шейдеров и многого другого мы стали ближе к этой реальности, чем когда-либо.

Конечно, учитывая бесконечное время и ресурсы, вы обычно можете создавать более эффективные алгоритмы на C ++, чем на C #.Это повлияет на производительность на уровне процессора.Сегодня обработка, не связанная с графикой, по-прежнему в основном выполняется на процессоре.Существуют такие вещи, как CUDA, OpenCL и даже будущие версии DirectX, которые откроют возможности для переноса любого параллельного алгоритма на GPU.Но уровень внедрения этих технологий (и видеокарт, которые его поддерживают) пока еще не совсем мейнстрим.

Итак, для каких типов ресурсоемких алгоритмов стоит рассмотреть C ++?

  • Искусственный интеллект
  • Двигатели частиц / симуляции n-тела
  • Быстрое преобразование Фурье

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

...