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

时间:2017-07-15 18:28:18

标签: 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_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)不需要验证失败吗?

0 个答案:

没有答案
相关问题