摘要: 最近在Android平臺上寫NDK程序,使用OpenGL ES(注意:這里是OpenGL ES 1.0和1.1版本),發現程序在運行過程中出現如下錯誤:
通過log,在android的源碼中的\frameworks\base\opengl\libs\EGL\目錄下有Loader.cpp文件,通過這 個文件我們可以發現,我們的OpenGL的調用都是通過加載實現了OpenGL ES的dll,然后在該dll中查找我們調用的接口,如果接口沒有找到,EGL就會打印出log,如上所示。
閱讀全文
摘要: OpenGL中的Frame Buffer Object(FBO)擴展,被推薦用于把數據渲染到紋理對像。相對于其它同類技術,如數據拷貝或交換緩沖區等,使用FBO技術會更高效并且更容易實現。
FBO一個最常見的應用就是:渲染到紋理(render to texture),通過這項技術可以實現發光效果,環境映射,陰影映射等很炫的效果。
在OpenGL渲染管線中,幾何數據和紋理最終都是以2d像素繪制到屏幕上。最后一步的渲染目標在OpenGL渲染管線中被稱為幀緩存(frame buffer)。幀緩存是顏色緩存、深度緩存、模板緩存、累積緩存的集合。默認情況下, OpenGL使用的幀緩存是由窗體系統創建和管理的。
在OpenGL擴展中,GL_EXT_framebuffer_object擴展提供了一個創建額外幀緩存對象(FBO)的接口。這個幀緩存的創建和控制完全是由OpenGL完成的,有別于窗體系統創建的默認的幀緩存。與系統默認的幀緩存類似,一個FBO也是顏色緩存、深度緩存、模板緩存的集合(FBO不包括累積緩存),然后OpenGL程序就可以把渲染重定向到FBO
閱讀全文
摘要: 如果對象需要進行有意義的(non-trival)初始化,考慮使用明確的init()的方法來進行初始化操作。因為如果在構造函數中進行有意義的初始化操作,一旦這些操作失敗,對象將進入不確定的狀態。symbian編程中廣泛使用一種稱為“兩階段構造法”的方法來解決這個問題,值得借鑒。
閱讀全文