2013-03-20 47 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

相關問題