我目前正在使用运行时生成的几何图形进行一些绘图例程,并且仅使用纯色。在搜索最小的 GL 设置来进行绘图时(我正在匹配屏幕分辨率并且我是 iOS,但问题也适用于其他 ES 2 平台),我看到大多数示例都使用顶点和片段着色器,但不是全部。
如果我不打算使用任何纹理或照明(只是直接颜色复制/混合)并且我不打算进行任何无法通过操作视图矩阵来完成的转换,那么我真的需要设置顶点吗和/或片段着色器?如果没有,使用着色器比无着色器方法有什么优势吗?
我目前正在使用运行时生成的几何图形进行一些绘图例程,并且仅使用纯色。在搜索最小的 GL 设置来进行绘图时(我正在匹配屏幕分辨率并且我是 iOS,但问题也适用于其他 ES 2 平台),我看到大多数示例都使用顶点和片段着色器,但不是全部。
如果我不打算使用任何纹理或照明(只是直接颜色复制/混合)并且我不打算进行任何无法通过操作视图矩阵来完成的转换,那么我真的需要设置顶点吗和/或片段着色器?如果没有,使用着色器比无着色器方法有什么优势吗?
据我所知,是的,它们是必要的。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);
}
和:
// Fragment Shader
uniform lowp vec3 color;
void main(void)
{
gl_FragColor = vec4(color, 1.0);
}
资料来源:Khronos 网站和文档
“OpenGL ES 2.0 规范的重大变化是不支持 OpenGL 固定函数转换和片段管道。”