gstreamer有一个名为glshader
的元素,其属性类似于fragment
和vertex
。该文档包含一个琐碎的片段着色器示例,但从1.16版本开始,还不包含一个顶点着色器示例。
应该使用哪种骨架来开始编写自己的顶点着色器以与glshader元素一起使用?
答案 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
。