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