1. 程式人生 > >OpenGL ES SL 3.0規範中以前的attribute改成了in varying改成了out

OpenGL ES SL 3.0規範中以前的attribute改成了in varying改成了out

        

       

OpenGL ES和OpenGL的圖示

關於“OpenGL ES SL 3.0規範中以前的attribute改成了in varying改成了out”這個問題,做一闡述

1.關鍵字的小修改大概由如下兩點決定

     第一,先考慮一個成本原則

一個關鍵字的定義是否修改,是由熟練程式設計師在使用該關鍵字時的思維成本來決定的。

當然,還有一個原則,是由初學者的學習成本來決定的,這時一條市場原則(微軟喜歡這個原則)。

attribute改成in,varying 改成out,恰巧符合上面兩條原則。

初學shading language的同學,意識不到uniform和attribute的卻別,不能第一時間知道uniform是全體頂點都使用的同一個變數,而attribute是每一頂點各自的變數。需要經過長期的應用感受才知道其差別;

而且,每次使用的時候,都要在思維上承受這個比較繞的思維過程,一定程度上使得程式設計師不能很好地專注於應用問題的解決。當然了,經過長期的使用肯定會克服,但是成本太高。故,改成in和out在學習時和使用時,在思維上就自然了。

 

     第二,這種改變是因為桌面OGL GLSL的改變引起的

OpenGL ES的Spec的形成原則:

很繞,總體原則如下三點:

1.   嵌入式版本的  OGL ES由OGL ES API  和 OGL ES SL構成,二者有自己獨立的版本號,經常是不一樣的。

如,ES2.0中的版本號2.0是強調API的版本號為2.0,而這一版的SL版本是ES SL1.10.  

2.   桌面版本的  OpenGL 由OpenGL API和 GLSL構成,二者有自己獨立的版本號,經常是不一樣的。

如,OGL2.0中的2.0是強調API的版本號為2.0,而這一版的GLSL是第一次出現在OGL中,版本號為GLSL1.10. 

3.   嵌入式OGL ES來源於某個版本的桌面OGL。

4.   OGL ES1.0來源於桌面OGL1.3和OGL ES 1.1來源於桌面OGL1.5,它們都是固定管線,我們略過。ES 2.0開始,是可程式設計的管線。

 

 

2.OGL ES的版本來源


下面這兩段彩色文字,可以只看粗體部分,簡單說:

ES2.0 API來源於 桌面OGL2.0 ;  ES2.0  SL1.10.17  來源於  GLSL1.20      .

由:https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf    的

The OpenGL ES Shading Language (also known as GLSL ES or ESSL) is based on theOpenGL Shading Language (GLSL) version 1.20.

 

ES3.0 API來源於 桌面OGL3.3 ;   ES2.0  SL3.00.6  來源於  GLSL3.30.7    .   但是,OGL3.3的GLSL版本號是GLSL 3.30.6  ,修正號不同。

由:https://www.khronos.org/registry/gles/specs/3.0/GLSL_ES_Specification_3.00.pdf  的

1.1 Changes 

This specification is derived fromOpenGL GLSL 3.3 revision 7. 

 

GLSL1.20中,頂點屬性,輸入時使用的是attribute,輸出時使用的是varying;

GLSL3.30中,頂點屬性對應使用的是in和out

 

總之:OGL ES API都會自於某個版本的OGL API spec,並且ES SL會來源於與OGL API版本較近的GLSL spec,

 

3.OGL、OGL ES、DirectX的版本釋出時間


另外一個很重要的事情:OGL比DX出現的早,而且通用。可參考OGL各個版本的spec的釋出日期。

1992.1月     OpenGL 1.0  釋出;

1995年   DirectX 1.0  釋出,並且不太成功;

1997.1月OGL1.1釋出,

1997年  DirectX 3.0 釋出;

1998.3.16   OGL1.2釋出;

1998.10      OGL1.2.1釋出;

2001.8.14  OGL1.3釋出;

2002年  Direct9.0釋出,並不斷修改,現在依然主流,後面幾年有   DX9.0b  和   DX9.0c  釋出;

2002年   OpenGL ES 1.0 公佈,固定管線。

2002.7.24  OGL1.4 釋出;

2003.7.29  OGL1.5釋出;

2004.9.7  OGL 2.0   和  GLSL1.0   釋出;  OGL中開始出現shader語言,並在後面幾年不斷提高,出現了GLSL1.1  和GLSL1.2( glsl1.2是  ES2.0 SL的母版本 )

2005年   OpenGL ES 1.10 公佈,固定管線。

2006.7.2   OGL2.1  釋出 ,伴隨GLSL1.20.8

2008.8.11  OGL3.0釋出,伴隨GLSL1.30.10,  其中的attribute   varying等就已經改成了  in和out;

這段時間前後有DX10  和DX10.1釋出,但不太流行;

2009年   OpenGL ES 2.0 公佈,在OpenGL 2.0 和GLSL1.20基礎上提煉而來。

2009.1  DX11 釋出,加入了細分著色器;

2009.3.24  OGL3.1  釋出,  伴隨GLSL1.40.08  ;

2009.8.3  OGL3.2 釋出,    伴隨GLSL1.50.11  ,並且加入了幾何著色器,出現三種shader;

2010.3.11  OGL3.3釋出;同時  OGL4.0釋出,伴隨GLSL4.00.9   並且加入了細分著色器(ATI在2001年就首先設計出來了),出現四種shader(此後將OGLAPI版本號與GLSL版本號統一起來了);

2010.7.26  OGL4.1 釋出,伴隨GLSL4.10.6;

2011.8.8 OGL4.2釋出,伴隨GLSL4.20.11;

2011.10  DX11.1  釋出;

2012   OpenGL ES 3.0 公佈,在OpenGL 3.x 和 4.x的基礎上增加了許多新的功能。

2012.8.6  OGL4.3釋出,伴隨GLSL4.30.8;

2013.6    DX11.2  釋出;

2013.7.23  OGL4.4釋出,伴隨GLSL4.40.9 ;

2014.3   DX12釋出;  這個把本增加了平行計算功能,應該會比較流行。

2016  OGL4.5  ,伴隨GLSL4.50  ;

2016   OpenGL ES 3.1和3.2 公佈,並且加入了細分著色器和幾何著色器。 不要有僥倖心理了,未來的Andorid和iOS都會有這樣的著色器程式設計,哈哈,學起來吧。知識量越多的一個圖形庫,掌握難度越大,功能也越強,開發的產品也就越人性化。


原文:OpenGL ES SL 3.0規範中以前的attribute改成了in varying改成了out

連結:OpenGL 與 GLSL 版本