2012-03-19 154 views
1

是否可以混合使用OpenGL ES 1和OpenGL ES 2調用?假設你正在使用在OpenGL ES 1中實現了一些例程的庫,並且你現有的代碼庫是OpenGL ES 2.那麼假設它們在不同渲染過程中渲染,那麼這樣做會是一個好方法嗎?混合OpenGL ES 1和OpenGL ES 2

回答

4

OpenGL ES 2.0不向後兼容OpenGL ES 1.x.根據定義,非常多,這意味着2.0不是兼容與1.x.大部分。

根據語言和GL ES(您沒有聲明)的綁定,您可能會重新編譯爲ES 2.0編寫的代碼。或者初始化ES 2.0會導致所有GL功能在那裏被路由。這意味着如果ES 1.x和2.0共享某個函數,那麼調用該函數的代碼將調用任何GL ES版本初始化的代碼。再一次,你沒有說什麼語言,以及你如何初始化它。

ES中有一些功能與ES 1.1和ES 2.0的功能差不多。我會說紋理的初始化和設置沒有太大的改變(你應該閱讀規格,看看有多少改變)。而實際的數組繪圖調用(glDrawArrays,glDrawElements)或多或少是相同的。而像glViewportglDepthRangef等一些核心組件是相同的。

但其他任何東西(如何使用頂點數組,立即模式等)是不同的和不兼容的。

4

您可以在同一個應用程序中混用OpenGL ES 2.0和OpenGL ES 1.1,但不能將來自兩種不同API的命令與單個上下文綁定混合使用。只要您在ES 2.0上下文綁定中發出僅ES 1.1的GL命令,反之亦然,您的應用程序就會崩潰,並且它不會很明顯,除非您意識到這一點,否則它會崩潰。

當創建上下文時,您必須選擇您正在使用的API,並在綁定該上下文時發出的每個GL命令都使用它。

因此,就在一個應用程序中混合使用這兩個API而言,沒有什麼能夠阻止您在一個線程上綁定ES 1.1上下文,並且在您擁有的同一個應用程序的該線程上只發出ES 1.1調用在另一個線程上的ES 2.0上下文,只有在該線程上發出的ES 2.0命令。

但是正如捉鬼者們說的那樣:「不要過河!」。