如何在gstreamer的glshader元素上使用vertex属性?

时间:2019-08-26 21:58:28

标签: glsl shader gstreamer

gstreamer有一个名为glshader的元素,其属性类似于fragmentvertex。该文档包含一个琐碎的片段着色器示例,但从1.16版本开始,还不包含一个顶点着色器示例。

应该使用哪种骨架来开始编写自己的顶点着色器以与glshader元素一起使用?

1 个答案:

答案 0 :(得分:1)

虽然当前文档稀疏,但您可以在gst-plugins-base package in gst-libs/gst/gl/gstglshaderstrings.c中找到示例。

看起来像

attribute vec4 a_position;
attribute vec2 a_texcoord;
varying vec2 v_texcoord;
void main()
{
   gl_Position = a_position;
   v_texcoord = a_texcoord;
}

测试着色器的一个很好的起点是

gst-launch-1.0 gltestsrc ! glshader fragment="\"`frag_shader`\"" vertex="\"`vert_shader`\"" ! glimagesink

如果添加类似v_texcoord.y*=0.8;的内容,则可以证明几何着色器正在向着色器馈入的是一个顶部为v=0的矩形,这与Unity解释纹理坐标的方式相反(Unity使用v = 0表示底部,除非您接近使用不同约定的系统上的金属)。像v_texcoord.y *= 2.0;这样的实验证明默认的环绕模式似乎是CLAMP_TO_EDGE