android graphics related modules

 

frameworks/base/opengl/libs/        ==>

                                                              libEGL.SO

                                                              libGLESv1_CM.so

frameworks/base/opengl/libagl      ==>

                                                              libagl.so

 

 

frameworks/base/libs/ui                ==>

                                                              libui.so

 

external/skia/                                ==>

                                                              libsgl.so

                                                              libskiagl.so

                                                              libcorecg.so

system/core/libpixelflinger             ==> 

                                                              libpixelflinger.so

 

 


Canvas.java中,所有的諸如drawPath之類的調用都是pass到底層的mNativeCanvas中去實現的, 而這個mNativeCanvas有兩種類型: SkCanvas* 和 SkGLCanvas*。 mNativeCanvas被initRaster賦值時,得到SkCanvas*的指針; 被initGL賦值時,得到SkGLCanvas*的指針。

 

 

frameworks/base/graphics/java/android/Canvas.java

 

SkCanvas實現了Canvas.java中給出的所有接口,如drawPaint, drawRect, drawText,clipRegion, translate, scale。。。

android大部分的控件中,使用的canvas的底層都是用的SkCanvas, 它包含在skia庫的libsgl.so, 依賴libcorecg.so(也是skia編出來的)。 而SkGLCanvas繼承了SkCanvas, SkGLCanvas的constructor中會調用GLES/gl.h中定義的opengl函數。 (GLES/gl.h的路徑是:frameworks/base/opengl/include/GLES/gl.h) SkGLCanvas中的其他函數則主要是對Texture的一些處理。

 

SkGLCanvas自己提供了setViewport, 和freeGlCaches。也就是說, SkCanvas中不具體實現setViewport, getViewport,直接返回false; 而SkGLCanvas中是實現這兩個函數的,但貌似好像也是Skia自己實現的,沒有direct到opengl裏面去。而像drawPaint, drawRect, drawText,clipRegion, translate, scale之類的函數接口, SkGLCanvas就是直接繼承了SkCanvas裏面的實現,沒看出哪裏會提供它自己的實現。

 

比較蹊蹺的是,在skia中看到了SkGLDevice,繼承於SkDevice, 實現了drawPaint等函數接口(通過SkGL pass到opengl中,或者假如opengl不支持的feature, 它自己實現),不過不知道哪裏會被調用到。

 

從以下這個鏈接:

 

http://www.mail-archive.com/[email protected]/msg02554.html

寫到The OpenGL backend for Skia is not supported and not enabled。 那麼這,是不是也解釋了爲什麼GLSurfaceView裏面,其實那些繪製都是通過handle傳給Canvas的GL類型的指針來pass call to opengl的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章