我最近开始学习opengl,但仍然不太了解它。我正在按照教程编写这两个着色器:
顶点着色器:
#version 400
in vec4 s_vPosition;
in vec4 s_vColor;
out vec4 color;
void main() {
color = s_vColor;
gl_Position = s_vPosition;
}
Fragment Shader:
#version 400
in vec4 color;
out vec4 fColor;
void main() {
fColor = color;
}
他们使用OpenGL 3在桌面上编译和工作得很好,但是不能在Android上使用OpenGL ES 2进行编译。我尝试检查着色器输出日志,但它返回一个空字符串。再一次,我对此非常陌生,我的错误可能很简单,但任何帮助都会受到高度赞赏。
答案 0 :(得分:4)
在OpenGLES2中,您不必使用3.0中的in
和out
变量前缀。而是使用以下关键字:
attribute
对应于顶点着色器中的in
。
varying
对应于顶点着色器中的out
和片段着色器中的in
。因此,将顶点着色器更改为:
attribute vec4 s_vPosition;
attribute vec4 s_vColor;
varying vec4 color;
void main() {
color = s_vColor;
gl_Position = s_vPosition;
}
和你的片段着色器:
varying vec4 color;
void main() {
gl_FragColor = color;
}
gl_FragColor
是一个特殊定义的变量,如gl_Position
,用于从片段着色器输出颜色。