Android中的openglshadar语言
我正在通过一本在Premake 4平台中使用OpenGL 3.3版的好书学习OpenGL,但实际上我想学习支持OpenGL 2.0版的Android版OpenGL。这几乎是一样的,因为概念是一样的,但是我在着色器语言代码方面遇到了一些问题 例如,在本书中,autor使用以下代码实现顶点着色器: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
#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并不是完全相同的东西,尽管大多数函数都是相同的,并且命名相同。