java OpenGL着色器可在桌面上编译,但不能在Android上编译
我最近开始学习opengl,但对它知之甚少。我遵循教程编写了以下两个着色器:
顶点着色器:
#version 400
in vec4 s_vPosition;
in vec4 s_vColor;
out vec4 color;
void main() {
color = s_vColor;
gl_Position = s_vPosition;
}
片段着色器:
#version 400
in vec4 color;
out vec4 fColor;
void main() {
fColor = color;
}
它们在桌面上用OpenGL 3编译并工作得很好,但在Android上用OpenGL ES 2编译则不行。我试图检查着色器输出日志,但它返回了一个空白字符串。再说一次,我对这一点很陌生,我的错误可能很简单,但任何帮助都将不胜感激
# 1 楼答案
在OpenGLES2中,您不会像在3.0中那样使用
in
和out
变量前缀。而是使用以下关键字:attribute
对应于顶点着色器中的in
。varying
对应于顶点着色器中的out
和片段着色器中的in
。因此,将顶点着色器更改为:你的片段着色器是这样的:
gl_FragColor
是一个特殊定义的变量,如gl_Position
,用于从片段着色器输出颜色