是否有人在使用ESSL 3.1的Android上尝试了分离的着色器对象?我想创建一个没有输出变量的着色器,但是想要使用一个忽略它们的着色器。
顶点着色器
#version 310 es
#extension GL_EXT_shader_io_blocks: enable
precision highp float;
out gl_PerVertex { vec4 gl_Position; float gl_PointSize; };
out vec2 texCoord0;
in vec4 attr_Vertex;
in vec2 attr_TexCoord;
void main()
{
gl_Position = attr_Vertex;
texCoord0 = attr_TexCoord;
}
片段着色器
代码:
#version 310 es
#extension GL_EXT_shader_io_blocks: enable
precision highp float;
void main() {} // Do nothing, (ie, for a depth only shader)
在管道验证期间发生此错误
glValidateProgramPipeline(ppo);
glGetProgramPipelineiv(ppo, GL_VALIDATE_STATUS, &status);
glGetProgramPipelineInfoLog的输出:
Error: output texCoord0 not declared in input from next stage.
在使用ES 3.2的Android上,消息为
error: The fragment stage's input interface doesn't match preceding stage's output
然而,这适用于使用GL_EXT_shader_separated_objects的桌面OpenGL和iOS
我有很多顶点着色器,只想使用不需要输入的特殊片段着色器执行深度传递或其他操作,或者忽略它们
为什么输出未在下一阶段的输入中声明是错误的?它应该是最坏的警告,但不是错误,为什么它发生在ESSL 3.1而不是桌面上(桌面上也有相同的着色器 - 即没有错误 - )
根据文件
对于可分离的程序对象,着色器阶段之间的接口可能 涉及一个程序对象的输出和来自a的输入 第二个程序对象
显然布局(位置= xx)不需要验证失败吗?