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 GPU并行性困境_Opengl_Rendering_Gpu - Fatal编程技术网

Opengl GPU并行性困境

Opengl GPU并行性困境,opengl,rendering,gpu,Opengl,Rendering,Gpu,我的问题是OpenGL是并行绘制原语,还是只有光栅化是这样做的?简单地说,如果我想两次绘制同一个基本体,那么如果我将顶点复制到缓冲区两次,然后只调用DrawArray一次,渲染速度会更快吗?或者,如果我只复制顶点一次,然后调用DrawArray两次,渲染速度会相同吗(不计算CPU调用GPU所需的时间)取决于GPU和驱动程序;典型的图形卡具有多个内核,这些内核可以在多个数据集上运行相同的代码路径。这是经典的并行性,也是openGL并行性的核心 两次调用DrawArray没有帮助,因为整个管道将执行

我的问题是OpenGL是并行绘制原语,还是只有光栅化是这样做的?简单地说,如果我想两次绘制同一个基本体,那么如果我将顶点复制到缓冲区两次,然后只调用DrawArray一次,渲染速度会更快吗?或者,如果我只复制顶点一次,然后调用DrawArray两次,渲染速度会相同吗(不计算CPU调用GPU所需的时间)取决于GPU和驱动程序;典型的图形卡具有多个内核,这些内核可以在多个数据集上运行相同的代码路径。这是经典的并行性,也是openGL并行性的核心

两次调用DrawArray没有帮助,因为整个管道将执行两次


如果要在不同的位置绘制同一网格的多个副本,通常需要在实例之间更改一致性。

我尝试的是基于相同的控制点绘制贝塞尔曲线和b样条曲线。我想在几何体着色器中进行大部分计算,并以均匀的方式传递点。这意味着bezier需要一个geom.shader调用,b样条曲线需要一个geom.shader调用。所以我试图两次调用geom.shader,并修改它们之间的bool一致性,将geom.shader从bezier切换到b样条曲线,或者一次调用,将bool放置在VAO中,切换geom.shader。如果geom.shader的两个实例并行运行,那么第二个实例会更快。执行管道两次并不重要,因为顶点着色器是通过的,片段只是显示白色。但是geom.shader很重(计算bezier或b样条曲线需要大量计算),因此,如果我能告诉GPU在为b样条曲线运行geom.shader的同时为bezier运行geom.shader,那会有很大帮助。@CivDav几何体着色器实际上很难并行化,因为输出的数量(发射的顶点/基本体)太多了可以根据运行时执行情况而变化。在其他阶段,在开始执行之前更好地定义工作流。假设几何体着色器中存在静态控制流,您可以假设当GS调用合理时,实现将尝试并行化GS调用。但是,这一切都超出了任何桌面渲染API的范围。