2013-03-20 48 views
3

我目前正在使用在运行时生成的几何图形绘制例程,并且只有平面着色。当搜索一个最小GL设置来完成我的绘图时(我与屏幕分辨率相匹配,而我是iOS,但这个问题也适用于其他ES 2平台),我看到大多数示例都使用顶点和片段着色器,但不是全部。OpenGL ES 2:简单绘图是否需要顶点和片段着色器?

如果我不打算使用任何纹理或照明(只是直接彩色复制/混合),我不打算做任何不能通过操作视图矩阵做的转换,我真的需要设置顶点和/或片段着色器?如果没有,使用着色器和无着色器方法有什么优势?

回答

4

据我所知,是的,他们是必要的。 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 Website & Docs

“的OpenGL ES 2.0的SPECI网络阳离子上的显着变化是, OpenGL固定功能转换和片段流水线不支持 。“

+0

非常有用。谢谢。 – 2013-03-20 02:57:25

+2

唯一值得添加的注释是GLKit可以为您提供ES 1.x等效着色器;见例如'GLKBaseEffect'。所以ES 2要求提供它们,但是在iOS下不需要自己编写它们。 – Tommy 2013-03-20 03:07:14

+0

真的,很好的@Tommy加法。不过,我真的建议不要使用GLKBaseEffect,因为你没有与OpenGL ES统一进化(如3.0所示),并且可能会被无关的编码实践所困住。 GLKit非常适合在设置视图时避免繁琐的样板代码。 – 2013-03-20 05:51:59

相关问题