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 如何从计算着色器获取输出_Opengl_Glsl_Shader_Compute Shader - Fatal编程技术网

Opengl 如何从计算着色器获取输出

Opengl 如何从计算着色器获取输出,opengl,glsl,shader,compute-shader,Opengl,Glsl,Shader,Compute Shader,我正在使用marching cubes算法和simplex noise开发一个程序生成的地形模拟器。我当前程序的问题是,它为每个顶点指定一个值,并一次生成一个三角形。在做了一些研究之后,我决定使用计算着色器(一个用于使用单纯形噪波为每个顶点指定值,另一个用于创建三角形网格)将显著提高性能。我有一个非常基本的想法,我希望着色器如何与我的程序交互,但我不知道如何制作它 UseNoiseComputerShader()//获取ComputeShader的输出。 输出=噪声输出; UseMeshComp

我正在使用marching cubes算法和simplex noise开发一个程序生成的地形模拟器。我当前程序的问题是,它为每个顶点指定一个值,并一次生成一个三角形。在做了一些研究之后,我决定使用计算着色器(一个用于使用单纯形噪波为每个顶点指定值,另一个用于创建三角形网格)将显著提高性能。我有一个非常基本的想法,我希望着色器如何与我的程序交互,但我不知道如何制作它

UseNoiseComputerShader()//获取ComputeShader的输出。
输出=噪声输出;
UseMeshComputeShader(输出)//获取ComputeShader的输出。
float[]顶点=outputMesh;
//将顶点输出到VAO并绘制

我曾在网上看到一些人在类似的项目中使用计算着色器,但他们使用的是Unity和HLSL,所以我想知道是否可以使用OpenGL和GLSL。

通常,计算着色器会写入or

图像可以通过图像读取和写入,并且:

layout(rgba32f,binding=1)只读统一图像2D img_输入;
布局(rgba32f,绑定=2)可写统一的图像2D img_输出;
void main()
{
ivec2坐标=ivec2(gl_globalinOccationId.xy);
vec4颜色=图像加载(img_输入,坐标);
图像存储(img_输出、坐标、颜色);
}

可以通过赋值或

@Ethama将存储缓冲区对象写入着色器,在我的情况下,使用cs写入图像或SSBO会更好吗?@Ethama这取决于您的使用情况。但是我没有一个经验法则来决定何时使用其中一个。是否有某种方法可以将我的SSBO读入浮点数组?(编辑:我在LWJGL论坛上发现的这个问题与我的问题类似)作为一个非常通用的经验法则,如果您的数据是以规则的2D或3D网格组织的,并且可以用图像提供的数据格式表示(没有奇怪且昂贵的转换或编码技巧),并且您的访问模式也可以从二维或三维位置中获益(这在很大程度上取决于您如何将工作组织到工作组和调用中),您可以尝试使用图像。请注意,作为一个游戏引擎,OpenGL是由图形驱动程序提供的OpenGL API。在某些平台上,Unity可能会在后台使用OpenGL(ES)。