遊戲開發客戶端圖形核心技術就是openGL,在手機上的版本叫openGLES,這是一個它的輕量級版本。目前主流的遊戲引擎cocos,unity都是在它的基礎上進行了封裝,并為開發者提供使用更簡單的API或者可視化編輯器,因此,大多數情況下,我們并不需要透徹的去了解OpenGL是如何工作的。但了解是必要的,比如筆者就遇到了一個這樣的問題。
問題描述:在維護一個 基于 cocos 2.1.3 (一個比較古老的版本)的舊項目的時候,運行這個項目的mac版本會出現如下的錯誤:
cocos2d: cocos2d: ERROR: Failed to compile vertex shader
問題的大概意思是:無法編譯頂點着色器,而且通過openGL自帶的日志函數也無法獲得任何錯誤信息。從而導緻程序無法運行。找了數天,都沒有找到原因。這時候内心是
于是問題被擱置,直到過完春節,再來研究這個問題的時候,有了新的發現。編譯shader之前需要調用
glCreateProgram();然而它的返回值始終為0。百度,google各種搜索,依然沒有找到現成的解決方案,不過也得到了一些有用的信息,那就是 openGL的context沒有初始化好。朝着這個方向,繼續上前查詢代碼,終于在 EALView.mm文件中,發現了一個 prepareOpenGL 的函數,是用來初始化openGL的。然而在調試的時候,并沒有發現這個函數被調用過。于是嘗試修改 initWithFrame 如下:
if( context ){
[selfsetOpenGLContext:context];
}
else{
[self prepareOpenGL];
}
else是 新增的代碼,重新編譯運行程序。終于成功!
結論:
選擇一個好引擎。
也要适當了解OpenGL。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!