Приложение с использованием 3D и сторонних плагинов - совместим с OpenGL или Direct3D? - PullRequest
2 голосов
/ 11 января 2011

Я пишу приложение, которое будет использовать сторонние созданные плагины для рендеринга всевозможных хитростей в 3D.

Мое главное приложение - создать объект context / render и объект rendertarget / framebufferobject. Сторонние плагины будут рендерить свои причудливые вещи, поэтому им необходим доступ к этому контексту / renderobject для выполнения вызовов, связанных с 3d-рендерингом.

Я могу решить реализовать это с помощью OpenGL или Direct3D. Мое решение, скорее всего, будет основано на моем понимании следующей проблемы:

Очевидно, что будут выходить новые версии OpenGL / Direct3D, и было бы неплохо, если бы вновь созданные плагины могли получить выгоду от более новых версий DX / OGL, чем скомпилированная основная программа. (, если компьютер, на котором запущено приложение, поддерживает эту более новую версию )

Используя OpenGL (используя OpenTK), я понял, что можно создать совместимый с прямым переходом контекст, как в «Дайте мне самую последнюю версию, обратно совместимую с версией X» . Поэтому при запросе контекста 3.2, если доступен 4.0, он вернет контекст 4.0.

Для DirectX я не вижу ничего подобного, что означало бы, что если я создам свою основную программу, например, с DirectX 11, сторонние плагины никогда не смогут использовать более новые версии, если они доступны?

Я правильно понял?

Позволит ли OpenGL сторонним разработчикам плагинов создавать плагины для более новых версий OpenGL, в то время как DirectX не позволит мне сделать что-то подобное?

1 Ответ

1 голос
/ 12 января 2011

Я был бы удивлен, если бы DirectX когда-либо поддерживал такую ​​совместимость, о которой вы говорите в приложении. Каждая версия API Direct3D в основном представляла собой независимую (COM) иерархию объектов, в которой не было абсолютно никаких подтверждений того, что другие поколения системы могут существовать в прошлом или в будущем. (Обратная совместимость на уровне платформы, конечно, в целом была превосходной, но вы стремитесь к чему-то совершенно другому).

Так что либо используйте OpenGL (упомянутая вами поддержка, по крайней мере, звучит так, как будто она дает некоторую надежду), либо, возможно, даже рассмотрите API более высокого уровня для плагинов, которые каким-то образом «компилируются» / «адаптируются» к реальной целевой платформе во время выполнения. Это позволило бы вам поддерживать OpenGL и Direct3D (хотя очевидно, что шейдеры, в частности, будут представлять серьезные трудности; следовательно, такие проекты, как AnySL ).

...