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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 glsl中纹理2D的成本_Opengl_Glsl - Fatal编程技术网

Opengl glsl中纹理2D的成本

Opengl glsl中纹理2D的成本,opengl,glsl,Opengl,Glsl,这个函数相当混乱 在glsl的代码中,我总是看到这样的东西 uniform sampler2D source; varying vec2 textureCordi; void main() { vec2 uv = textureCordi.xy; vec3 t1 = texture2D(source, vec2(uv.x - step_w, uv.y - step_h)).rgb; //2 float average = (t1.r + t1.b + t1.g) / 3

这个函数相当混乱 在glsl的代码中,我总是看到这样的东西

uniform sampler2D source;
varying vec2 textureCordi;

void main()
{
    vec2 uv = textureCordi.xy;
    vec3 t1 = texture2D(source, vec2(uv.x - step_w, uv.y - step_h)).rgb; //2
    float average = (t1.r + t1.b + t1.g) / 3.0;
    //.....
}
在//2中,t1保存源的数据(我认为是数据),但它复制了多少数据? 纹理的坐标在0~1之间,假设纹理是图像 图像的大小是1024*768 t1可以节省1024*768个像素? gpu在这个命令下会做什么

如果t1做繁重的复制工作,我可以要求纹理2D返回吗
源对t1的引用(如c++?

该操作只查找一个texel,该texel对应于传递到的纹理坐标(考虑过滤、mipmap等)。纹理坐标是要获取的纹理的规格化坐标


编辑:t1保存操作请求的一个texel的rgb值(作为包含3个分量的向量)。归一化纹理坐标是
texture2D
的输入。下一行计算该纹理的三个通道的平均强度,而不是整个纹理的平均强度。

该操作只查找一个纹理,该纹理对应于传递到的纹理坐标(考虑过滤、mipmap等)。纹理坐标是要获取的纹理的规格化坐标


编辑:t1保存操作请求的一个texel的rgb值(作为包含3个分量的向量)。归一化纹理坐标是
texture2D
的输入。下一行计算一个纹理的三个通道的平均强度,而不是整个纹理的平均强度。

这是每个片段的操作,对于每个片段,使用
texture2D
采样单个纹理。在gpu上对整个原语执行许多并行操作,并且在某种程度上,是的,所有数据最终都“存储”在某个输出缓冲区中,但每个
main()
函数仅针对当前片段运行。它不知道其他片段发生了什么,所以每个操作都是针对每个片段的

为了进一步澄清这一点,这应该会有所帮助,但可能有些过分: GPGPU- 片段着色器管道-


希望这有帮助。

这是每个片段的操作,对于每个片段,使用
texture2D
可以对单个texel进行采样。在gpu上对整个原语执行许多并行操作,并且在某种程度上,是的,所有数据最终都“存储”在某个输出缓冲区中,但每个
main()
函数仅针对当前片段运行。它不知道其他片段发生了什么,所以每个操作都是针对每个片段的

为了进一步澄清这一点,这应该会有所帮助,但可能有些过分: GPGPU- 片段着色器管道-


希望这有帮助。

你的意思是t1不保存像素数据,而是纹理的规格化坐标吗?如果t1不保存纹理的数据,浮动平均值怎么可能=(t1.r+t1.b+t1.g)/3.0;获取rgb通道的平均值?@StereoMatching当然会保存数据,但只保存给定纹理坐标所请求的单个纹理的数据。@StereoMatching Christian Rau是正确的,编辑我的回答以澄清这一点。你的意思是t1不保存像素数据,而是纹理的规格化坐标吗?如果t1不保存纹理的数据,如何可以浮动平均=(t1.r+t1.b+t1.g)/3.0;获取rgb通道的平均值?@StereoMatching当然会保存数据,但只保存给定纹理坐标要求的单个纹理的数据。@StereoMatching Christian Rau是正确的,编辑我的答案以澄清此问题。GLSL 1.2规范:GLSL 1.2规范:根据您的答案,t1只存储一个texel而不是一个texel数组。gpu将执行每个片段的计算,这是gpu管理数据的方式?它计算每个片段,texture2D使用当前数据而不是平均数据运行,一旦计算结束,gl_FragColor会将该颜色存储在该片段特定位置的输出缓冲区中。textuer2D将根据采样纹理的插值方法查看一个或几个texel。根据您的回答,t1只存储一个texel而不是一个texel数组。gpu将按片段执行计算,这是gpu管理数据的方式?它按片段计算,texture2D使用当前数据而不是平均数据运行,一旦计算结束,gl_FragColor会将该颜色存储在该片段特定位置的输出缓冲区中。textuer2D将根据采样纹理的插值方法查看一个或几个texel。