Приложение, использующее 3D и сторонние плагины — совместимость с OpenGL или Direct3D?

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

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

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

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

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

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

Я правильно понимаю?

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


person Pygmy    schedule 11.01.2011    source источник


Ответы (1)


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

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

person timday    schedule 12.01.2011