Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一应用程序中同时管理OpenGL和Direct3D渲染_Opengl_Direct3d - Fatal编程技术网

如何在同一应用程序中同时管理OpenGL和Direct3D渲染

如何在同一应用程序中同时管理OpenGL和Direct3D渲染,opengl,direct3d,Opengl,Direct3d,我们的目标是制作一个渲染引擎,如何能够同时拥有OpenGL和Direct3D,并能够从一个渲染器切换到另一个渲染器。这主要是一个设计问题。我最好的猜测是某种多态行为 如何同时拥有OpenGL和Direct3D 将每个渲染器放入动态库中,并让它们导出一组通用函数 并且能够从一个渲染器切换到另一个渲染器 通过加载正确的库文件。如果在任意时间尝试这样做,请准备好主要PITA。这是最容易在程序启动时完成的。这是一个相当广泛的问题。一个“简单”的方法是创建自己的抽象呈现器,然后它有两个实际的后端实现。一个

我们的目标是制作一个渲染引擎,如何能够同时拥有OpenGL和Direct3D,并能够从一个渲染器切换到另一个渲染器。这主要是一个设计问题。我最好的猜测是某种多态行为

如何同时拥有OpenGL和Direct3D

将每个渲染器放入动态库中,并让它们导出一组通用函数

并且能够从一个渲染器切换到另一个渲染器


通过加载正确的库文件。如果在任意时间尝试这样做,请准备好主要PITA。这是最容易在程序启动时完成的。

这是一个相当广泛的问题。一个“简单”的方法是创建自己的抽象呈现器,然后它有两个实际的后端实现。一个用于OpenGL,一个用于Direct3D。为了获得一些灵感,您可以看看那里提供的代码,以及Eberly的一些书籍可能会提供一些很好的阅读。当然,您知道这两种API(否则您的问题就没有任何意义),因此您知道它们都依赖于几乎完全相同的一般概念和对象。因此,巴特和埃伯里的方法是通常的方法。为缓冲区、纹理、着色器等创建抽象渲染器接口和抽象基类。。。以及相应API的实现。除此之外,一般的(非常明显的)建议需要一个更详细的问题。但DatenWalf也是正确的,因为您不应该期望在运行时神奇地在GL和D3D之间切换。当然,在某些特定功能的实现中,您可能会遇到一些小的(但不幸的是重要的)差异。但这些都是更具体的问题。如果这真的是你所追求的两个平台之间的动态切换(虽然我想不是),那么你也可以看看nVidia的GL扩展,尽管我没有任何使用经验,也听说它离实际可用还很远。