我正在编写一个应用程序,它将使用第三方创建的插件来渲染各种3D技巧。
我的主要应用是创建context / render-object和rendertarget / framebufferobject。第三方插件将要渲染它们的花哨东西,所以他们需要访问该上下文/渲染项来执行与3d渲染相关的调用。
我可以选择使用OpenGL或Direct3D来实现它。 我的决定很可能是基于我对下一个问题的理解:
显然,OpenGL / Direct3D的新版本将会问世,如果新版本的DX / OGL比主程序编译好,那么新版本的插件可能会受益匪浅。 (如果运行应用程序的计算机支持更新版本)
使用OpenGL(使用OpenTK)我理解可以创建向前兼容的上下文,如“给我最新版本,向后兼容版本X” 。 所以当被问到3.2上下文时,如果4.0可用,它将返回4.0上下文。
对于DirectX,我没有看到类似的东西,这意味着如果我用DirectX 11创建我的主程序,第三方插件将无法在可用时使用更新的版本?
我说得对吗?
OpenGL是否允许第三方插件编写者为较新版本的OpenGL创建插件,而DirectX不允许我做类似的事情?
答案 0 :(得分:1)
如果DirectX曾经支持你在应用程序中讨论的那种兼容性,我会感到惊讶。每个版本的Direct3D API基本上都是一个独立的(COM)对象层次结构,绝对不能确认系统的其他几代可能存在,过去或将来。 (当然,平台级别的向后兼容性一般都非常棒,但是你会追求完全不同的东西。)
所以要么使用OpenGL(你提到的支持至少听起来像它提供了一些希望),或者甚至可能考虑更高级别的插件API,它们在运行时以某种方式“编译”/“适应”实际的目标平台。这可以让你支持OpenGL 和 Direct3D(虽然显然特别是着色器会带来严重的困难;因此像AnySL这样的项目。)