OpenGL ES 2:顶点和片段着色器是否需要简单绘制?

Sli*_*son 4 shader opengl-es opengl-es-2.0

我目前正在使用一些在运行时生成的几何图形并且仅使用纯色的绘图例程。在搜寻用于我的绘图的最小GL设置时(我与屏幕分辨率匹配并且在iOS上,但该问题也适用于其他ES 2平台),我看到大多数示例都使用顶点和片段着色器,但不是全部。

如果我不打算使用任何纹理或照明(只是直接进行颜色复制/混合),并且我不打算进行任何无法通过操纵视图矩阵进行的变换,那么我真的需要设置顶点吗?和/或片段着色器?如果没有,使用着色器比无着色器方法有什么优势吗?

Ric*_*eda 6

据我所知,是的,它们是必要的。OpenGL ES 2.0与OpenGL ES 1.x向后不兼容,两者之间的主要区别是自定义着色器。

是否使用着色器(2.0)(1.x)的优点取决于应用程序的当前和长期功能,但是1.x的固定功能管道已迅速成为过去。最近发布的OpenGL ES 3.0规范向后兼容2.0,但不兼容1.x。

OpenGL ES 2.0使用可编程管线,因此您必须始终声明一个顶点和一个片段着色器。您可以为几何+颜色声明的最简单的是:

// Vertex Shader

attribute vec3 position;

void main(void)
{
     gl_Position = vec4(position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

和:

// Fragment Shader

uniform lowp vec3 color;

void main(void)
{
     gl_FragColor = vec4(color, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

资料来源:Khronos网站和文档

“在OpenGL ES 2.0规范中的重大变化是不支持OpenGL固定功能转换和片段管道。”

  • 唯一值得一提的是GLKit可以为您提供与ES 1.x等效的着色器。参见例如“ GLKBaseEffect”。因此ES 2要求提供它们,但在iOS下不需要自己编写它们。 (2认同)