Android中的openglshadar语言

Android中的openglshadar语言,android,opengl-es,Android,Opengl Es,我正在通过一本在Premake 4平台中使用OpenGL 3.3版的好书学习OpenGL,但实际上我想学习支持OpenGL 2.0版的Android版OpenGL。这几乎是一样的,因为概念是一样的,但是我在着色器语言代码方面遇到了一些问题 例如,在本书中,autor使用以下代码实现顶点着色器: #version 330 layout(location = 0) in vec4 position; void main(){ gl_Position = position; } String

我正在通过一本在Premake 4平台中使用OpenGL 3.3版的好书学习OpenGL,但实际上我想学习支持OpenGL 2.0版的Android版OpenGL。这几乎是一样的,因为概念是一样的,但是我在着色器语言代码方面遇到了一些问题

例如,在本书中,autor使用以下代码实现顶点着色器:

#version 330

layout(location = 0) in vec4 position;

void main(){
  gl_Position = position;
}
String vertexShaderCode =
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position = vPosition;" +
        "}";
经过大量研究,我能够在Android中使用以下代码实现这个顶点着色器代码:

#version 330

layout(location = 0) in vec4 position;

void main(){
  gl_Position = position;
}
String vertexShaderCode =
        "attribute vec4 vPosition;" +
        "void main() {" +
        "  gl_Position = vPosition;" +
        "}";
但我不知道如何实现下面的顶点着色器:

#version 330

layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;

smooth out vec4 theColor;

void main() {
  gl_Position = position;
  theColor = color;
}

这本书是

您无法实现着色器,因为它是在OpenGL ES 2.0中编写的。该着色器是根据OpenGL 3.3 GLSL规范编写的,OpenGL ES 2.0使用的语法大致相当于GLSL 120 OpenGL 2.1

平滑限定符用于控制着色器阶段之间的插值,GLSL ES不支持此操作,所有顶点着色器输出都在GLSL ES中平滑插值

布局。。。GLSL ES不支持,您必须使用GLBindAttriblLocation。。。设置位置

GLSL ES不支持“输入”和“输出”,必须对顶点着色器输入使用“属性”,对顶点着色器输出和片段着色器输入使用“变化”

最后,330版是无效的。在OpenGL ES 2.0中,只有一个GLSL ES规范版本1.0,因此兼容的OpenGL ES 2.0着色器应该从版本100开始

要回答有关实现特定顶点着色器的问题,请执行以下操作: 当然,这只是等式的一半,您需要将其与同样使用OpenGL ES 2.0兼容语法的片段着色器配对

使用此顶点着色器的最小片段着色器:
如果您想使用OpenGL功能制作应用程序,您应该了解OpenGL ES。OpenGL和OpenGL ES并不是完全相同的东西,尽管大多数函数都是相同的,并且命名相同。