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
在OpenCL中使用OpenGL draw__Opengl_Opencl_Shader_Gpu_Opengl 4 - Fatal编程技术网

在OpenCL中使用OpenGL draw_

在OpenCL中使用OpenGL draw_,opengl,opencl,shader,gpu,opengl-4,Opengl,Opencl,Shader,Gpu,Opengl 4,我没有100%清楚地了解Draw Instance/Draw Indirect函数族一直到GLDrawerElementsInstancedBaseVertexBaseInstance是如何协同工作的 使用支持OpenGL 4.0+和OpenCL互操作的硬件和驱动程序,我们如何(如果可能)利用draw indirect(现在也是multi-draw indirect)等工具在GPU上更改几何图形时跨多个帧绘制实例化几何图形 例如,是否可以细化一个形状,然后通过opencl对该形状应用一些过滤器,

我没有100%清楚地了解Draw Instance/Draw Indirect函数族一直到GLDrawerElementsInstancedBaseVertexBaseInstance是如何协同工作的

使用支持OpenGL 4.0+和OpenCL互操作的硬件和驱动程序,我们如何(如果可能)利用draw indirect(现在也是multi-draw indirect)等工具在GPU上更改几何图形时跨多个帧绘制实例化几何图形

例如,是否可以细化一个形状,然后通过opencl对该形状应用一些过滤器,同时引用CPU只需要在需要时剔除的几何图形


*原始帖子已被大量编辑

不清楚你在问什么。到目前为止,Khronos定义的CL/GL互操作仅限于共享缓冲区/纹理和一些事件处理内容,这些似乎都与细分无关。由于细分是一项特定于基于多边形的模型光栅化的任务,因此它不太可能与CL规范中提及的内容相关。如果您想知道细分硬件是否将由CL实现使用,那么这完全取决于特定的硬件功能和CL实现

更新:

有两种细分着色器。细分控制着色器接受面片(三角形或四边形的集合)并计算一些逐顶点属性,最重要的是,一个控制应执行的细分量的数字

运行细分控制着色器后,生成的面片将传递给固定功能硬件单元,该硬件单元执行实际细分以生成包含更多多边形的新面片

细分后,细分计算着色器可以计算细分过程生成的面片中每个顶点的属性。这是该过程中的一个步骤,例如,可以在存储为纹理的置换贴图中查找信息


由于CL/GL互操作仅允许基于缓冲区的数据交换,为了使用CL进行细分,您必须将整个细分过程实质上作为顶点数据的预处理器来实现,并且您将无法从CL访问细分步骤的任何专用硬件。由于目前的硬件(据我所知)包含一个固定的函数细分器,而不是使用通用的计算单元,因此在CL中实现的细分器几乎肯定会对性能造成不利影响。

参考OpenGL 4规范,我了解到与OpenCL的互操作性得到了改进。通常我能找到的唯一解释是,除了draw_间接外,还有其他可编程着色器。我做过一些OpenCL的工作,但我对互操作的概念充其量是模糊的。draw_间接扩展(从GL 4.0开始是强制性的)与CL互操作配合使用非常有用,因为它允许
DrawArraysInstanced
DrawermentsinstancedBaseVertex
的参数来自GPU上的缓冲区,而不是来自CPU,CL互操作允许GL缓冲区与CL内核共享(从而由CL内核填充)。基本上,这意味着在GPU上运行的代码可以使用/到顶点数组做更多的事情,而CPU上执行的决策更少。总体目标似乎是将除同步和内存分配外的所有内容卸载到GPU。因此,我可以使用OpenCL在给定缓冲区内对几何体数据进行细分(大小足以扩展数据…),即使这不是“细分着色器”阶段的一部分?您可以使用OpenCL中的缓冲区执行任何操作。如果与GL共享,则可以渲染它(VBO、纹理等)。所以,如果你真的愿意,你可以使用CL进行细分。正如@mbien所说,你可以使用OpenCL创建你想要的任何数据,并将其放入VBO中。我用这种方法镶嵌几何体。它起作用了。很快。严格来说,它不是一个“着色器”。但它做同样的工作。