Android ESSL分离着色器对象:顶点的输出需要片段的输入

Android ESSL分离着色器对象:顶点的输出需要片段的输入,android,android-fragments,opengl-es,Android,Android Fragments,Opengl Es,有人用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_Ver

有人用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
不过,这是在桌面OpenGL和iOS上使用GL_EXT_shader_separated_对象实现的

我有很多顶点着色器,只想使用不需要输入的特殊片段着色器执行深度传递或其他操作,或者忽略它们

为什么下一阶段输入中未声明的输出是错误的?最坏情况下,它应该是一个警告,但不是一个错误,以及为什么它发生在ESSL 3.1而不是桌面上(桌面上的相同着色器也可以工作-即无错误-)

根据文件

对于可分离的程序对象,着色器阶段之间的接口可能 涉及一个程序对象的输出和一个程序对象的输入 第二程序对象


显然,布局(location=xx)要求验证不失败?

“这在桌面OpenGL和iOS上使用GL\u EXT\u shader\u separated\u objects”到底是什么“这”起作用?显示产生此错误的代码。而不是GLSL代码;OpenGL代码。该代码在具有GL_ARB_ES3_1_兼容性的OpenGL“桌面”上工作。它使用glGetProgramPipelineiv进行编译和管道验证,在上没有错误(不处理从片段中的顶点变化的输出是合法的)。