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 为什么imageStore为整数采样器写入的数据解释为浮点?_Opengl_Glsl_Compute Shader - Fatal编程技术网

Opengl 为什么imageStore为整数采样器写入的数据解释为浮点?

Opengl 为什么imageStore为整数采样器写入的数据解释为浮点?,opengl,glsl,compute-shader,Opengl,Glsl,Compute Shader,我让下面的计算着色器从iimage2D读取数据,并根据其颜色值替换数据。这里我面临的问题是,尽管我以整数格式读取数据并以整数格式写回,但写入的数据被解释为0到1之间的浮点值。因此获得了意外的输出 以下是计算着色器: layout(rgba32i) coherent uniform iimage2D i_image2D; layout (local_size_x = 1, local_size_y = 1) in; void main() { ivec2 idx = ivec2(gl_Glob

我让下面的计算着色器从iimage2D读取数据,并根据其颜色值替换数据。这里我面临的问题是,尽管我以整数格式读取数据并以整数格式写回,但写入的数据被解释为0到1之间的浮点值。因此获得了意外的输出

以下是计算着色器:

layout(rgba32i) coherent uniform iimage2D i_image2D;

layout (local_size_x = 1, local_size_y = 1) in;
void main() 
{
ivec2 idx = ivec2(gl_GlobalInvocationID.xy);
ivec4 readTexel = imageLoad(i_image2D, idx);
if(readTexel[0] == 0 && readTexel[1] == 2147483647 && readTexel[2] == 0 &&       readTexel[3] == 2147483647)
{ 
    readTexel = ivec4(2147483647,0,0,2147483647);
}
else
{
    readTexel = ivec4(0,2147483647,0,2147483647); 
}

imageStore(i_image2D, idx, readTexel);

}

您在哪里确定数据的解释方式?是否有其他未显示的着色器?我认为可能发生的情况是您没有设置内存屏障,而您实际经历的是数据危害的结果。相干限定符不能保证调用顺序的任何东西,而且这个着色器看起来非常依赖于顺序。我没有使用任何其他着色器来访问它,我通过它的输出来确定结果。几何体必须具有红色或绿色的浅色,但它会绘制完整的alpha颜色。我们是否需要像在片段着色器中那样对颜色进行规格化。将整数规格化为浮点值?此着色器不输出任何颜色。这就是为什么我问你,你有一个着色器,在那里你可以根据你加载/存储的图像使用整数纹理来绘制吗?