是否可以像在GLSL中使用纹理一样通过坐标访问矢量?

时间:2019-04-01 10:42:48

标签: opengl-es glsl textures gpgpu

我正在用OpenGL ES 3.0实现特征提取算法(给定具有1且大部分为0的输入纹理,生成带有标记特征区域的输出纹理)。我在片段着色器中遇到的问题是如何在中间vec或float而不是采样器上执行“查找”。

从概念上讲,每个vec或float都是一个texel值的函数,因此应该有一种方法可以在给定texel坐标的情况下获取其值,例如textureLikeLookup(texel_valued,v_color)-但我还没有找到与纹理*功能。

我看到的选项是:

  1. 将我的矢量渲染到帧缓冲区,然后将其作为纹理传递到另一个着色器/渲染过程中-这是不可取的,因为我在循环中有很多这样的过程,并且我想避免交错CPU调用;
  2. 切换到ES 3.1并利用imageStore(https://www.khronos.org/registry/OpenGL-Refpages/es3.1/html/imageStore.xhtml)-显然,如果可以在着色器中更新中间图像,则可以在片段着色器中实现(参见{{3} }),但如果可能的话,我宁愿坚持使用3.0。

是否有更好/自然的方法来解决此问题?换句话说,做这样的事情

// works, because tex_sampler is a sampler2D
vec4 texel_valued = texture(tex_sampler, v_color); 

当数据不是sampler2D而是vec时:

// doesn't work, because texel_valued is not a sampler but a vec4
vec4 oops = texture(texel_valued, v_color);

0 个答案:

没有答案