如何将texelFetch与GL_TEXTURE_2D一起使用
How to use texelFetch with GL_TEXTURE_2D?
我尝试过:
#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)"。
我没有把这些参数从我的头脑中放在这里几个来源:
http://www.opengl.org/wiki/Sampler_(GLSL)#Direct_txel_fetches
http://www.opengl.org/sdk/docs/manglsl/xhtml/texelFetch.xml
问题:有没有一种方法可以将GL_TEXTURE_2D
与texelFetch
一起使用,或者在执行着色器时直接从纹理读取像素?
查看1.30规范,第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
"设置"了一个值,但你并没有真正设置一个值。无法构造sampler1D
。这是GLSL:中使用采样器类型可以执行的所有的列表
- 将其声明为全局范围内的统一变量
- 将其声明为输入函数参数
- 将采样器类型的变量传递给将该采样器类型作为参数的函数
请注意,"调用构造函数"不在该列表中。sampler1D(0)
不是正确的语法。如果要使用采样器,则需要将其声明为统一的,并从OpenGL源代码中设置纹理图像单元。如果您有GL 4.2或ARB_shading_language_420pack,也可以使用layout(binding=#)
语法。
事实是,我想要它的性能。
那么你想要它的原因是错误的。当texelFetch
最准确地描述你想要做的事情时,你会使用texelFetch
。它不仅仅是"未经过滤的";您可以通过正确设置纹理/采样器参数来获得它。当您想要访问特定的纹素时,应该使用它,而不需要纹理坐标归一化等。
- 2D数组来自文本输入,中间有空格
- 将值指定给向量(2D)的向量中的某个位置
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 在 2D 向量中使用第三个 [ ] 有什么意义?
- 四边形的 2D 旋转
- 打印第二列时的2d字符矢量打印空间
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- opengl glBegin(GL_LINES) 和 glBegin(GL_POINT) 在 2D 中不可视化点矢量
- 在C++中迭代 2D 容器的最干净方法
- 如何引用 2D 指针?
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- C++动态安全 2D 交错阵列
- 如何在C++或OpenCV子矩阵中的2D子向量上使用OpenACC?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 将 2D 推力::d evice_vector 复矩阵传递给 CUDA 内核函数