C++ 如何将texelFetch与GL_纹理_2D一起使用?
我试过:C++ 如何将texelFetch与GL_纹理_2D一起使用?,c++,opengl,glsl,C++,Opengl,Glsl,我试过: #version 130 uniform sampler2D texID; in vec2 texcoord; out vec4 outcolor; void main(void) { vec2 tcoord=texcoord.xy*768.0; ivec2 tst=ivec2(tcoord.x,tcoord.y); outcolor=texelFetch(texID,tcoord); } 并在带有texelFetch的行中出错: 找不到兼容的重载函数“t
#version 130
uniform sampler2D texID;
in vec2 texcoord;
out vec4 outcolor;
void main(void) {
vec2 tcoord=texcoord.xy*768.0;
ivec2 tst=ivec2(tcoord.x,tcoord.y);
outcolor=texelFetch(texID,tcoord);
}
并在带有texelFetch
的行中出错:
找不到兼容的重载函数“texelFetch(sampler2D,vec2)”
我没有把这些参数从我的头脑中放在这里,有几个来源:
问题:有没有办法将GL\u TEXTURE\u 2D
与texelFetch
一起使用,或者在执行着色器时直接从纹理读取像素?检查第89页
无五个texelFetch()
重载中有两个参数:
gvec4 texelFetch (gsampler1D sampler, int P, int lod)
gvec4 texelFetch (gsampler2D sampler, ivec2 P, int lod)
gvec4 texelFetch (gsampler3D sampler, ivec3 P, int lod)
gvec4 texelFetch (gsampler1DArray sampler, ivec2 P, int lod)
gvec4 texelFetch (gsampler2DArray sampler, ivec3 P, int lod)
您需要第三个参数
texelFetch(sampler1D(0),0,0);
这不是合法的GLSL
sampler1D
是不透明类型。它没有任何价值。是的,我知道你用glUniform1i
来“设置”一个值,但你并没有真正设置一个值<无法构造代码>采样器1d。这是一个列表,列出了在GLSL中使用采样器类型可以执行的所有操作:
布局(binding=#)
语法,如果您有GL 4.2或
事实是,我想要它的性能
那么你想要它的理由是错误的。当
texelFetch
最准确地描述您要做的事情时,您可以使用texelFetch
。它不仅仅是“未经过滤的”;您只需设置。当您想要访问特定的texel时,应该使用它,而不需要纹理坐标标准化等等。刚刚测试的texelFetch(sampler1D(0),0,0)
和get无法再次找到兼容的重载函数
。我的GPU太旧了?(Opengl 2.0\DirectX 9)取决于。通过Cg编译器检查glGetString(GL\u SHADING\u LANGUAGE\u版本)
1.20 NVIDIA的值。没关系啊哈?你会注意到1.20
小于1.30
。如果没有带过滤器的功能,难道没有读取纹理像素的功能吗?