【发布时间】:2011-09-26 01:15:47
【问题描述】:
我正在尝试使用顶点着色器来实现投影。
有没有办法让一个单独的顶点着色器来处理设置 gl_Position,并让另一个顶点着色器来设置片段着色器所需的值?
我的问题是只调用了第一个顶点着色器的 main() 函数。
编辑: 我找到了一种让它工作的方法,通过组合着色器源而不是使用多个独立的着色器。我不确定这是否是最好的方法,但它似乎工作得很好。
main_shader.vsh
attribute vec4 src_color;
varying vec4 dst_color; // forward declaration
void transform(void);
void main(void)
{
dst_color = src_color;
transform();
}
transform_2d.vsh
attribute vec4 position;
void transform(void)
{
gl_Position = position;
}
然后这样使用它:
char merged[2048];
strcat(merged, main_shader_src);
strcat(merged, transform_shader_src);
// create and compile shader with merged as source
【问题讨论】:
-
我认为根据上下文使用不同着色器的唯一方法是切换您经常使用的着色器程序(通过
glUseProgram)。 -
您不需要手动连接着色器,
glShaderSource为您完成,您只需将 2 作为count参数传递,字符串数组 (char **) 作为 @987654329 @ 参数,长度数组 (int *) 作为length参数。 -
您可以自己跳过合并字符串,只需将多个字符串提供给 [glShaderSource](
http://docs.gl/es2/glShaderSource)。
标签: opengl-es-2.0 vertex-shader