簡介:
通過源碼穴店,我們來一步步分析Mapbox地圖引擎如何進(jìn)行不同數(shù)據(jù)源的地圖渲染的,這里是基于5.3.0的版本.
首先氮双,我們找到地圖的核心類布隔,MapView,這個(gè)view就是用來顯示地圖的,它是在mapbox.mapboxsdk.maps包下澎迎,看到它的初始化之后庐杨,發(fā)現(xiàn)它有這么一個(gè)方法,叫做initialiseDrawingSurface(),從名字上看可以看出這是一個(gè)初始化畫布的方法夹供,我們看下它的實(shí)現(xiàn).
這里我們可以看出來灵份,它首先根據(jù)選項(xiàng)區(qū)分使用TextureView作為view載體,還是GLSurfaceView作為view載體,然后分別講TextureView和GLSurfaceView通過自定義的兩個(gè)渲染器TextureViewMapRenderer和GLSurfaceViewMapRenderer的構(gòu)造方法傳遞進(jìn)去進(jìn)行綁定.這里我們看GLSurfaceViewMapRenderer這個(gè)類.
從這個(gè)源碼我們可以看出來它并未做什么工作哮洽,只是在構(gòu)造方法里做了一些基礎(chǔ)配置填渠,和綁定了GLSurfaceView.Renderer渲染器.其它都丟到TextureViewMapRenderer和GLSurfaceViewMapRenderer共同的父類MapRenderer里了,這里我們看下MapRenderer又做了什么
我們看到MapRenderer也聲明了onSurfaceCreated(),onSurfaceChanged(),onDrawFrame()方法鸟辅,并加上@CallSuper注解用于子類必須調(diào)用父類這三個(gè)方法氛什,但是我們看到他們也并未做什么,而是分別調(diào)用了native***()將實(shí)現(xiàn)放入底層匪凉,這樣性能會(huì)更好一些枪眉,一般onSurfaceCreated()是進(jìn)行一些初始化配置的工作,onSurfaceChanged()執(zhí)行畫面有改變的時(shí)候再层,onDrawFrame()執(zhí)行繪制的工作.這里我們跟蹤onDrawFrame()內(nèi)調(diào)用的nativeRender()方法
這里我們看到與MapRenderer對(duì)應(yīng)的實(shí)現(xiàn)底層文件map_renderer.cpp,這里我們看到它的registerNative()
這里我們看到它將上層的nativeRender()方法和自己的render()方法進(jìn)行綁定,我們接著看它的render()方法
這里我們看到了這么一行代碼renderer->render(*params);它將有關(guān)更新數(shù)據(jù)傳入底層Renderer類中的render()方法贸铜,繼續(xù)往下看堡纬,這里我們看到它將實(shí)現(xiàn)都放到它的Impl實(shí)現(xiàn)類,即renderer_impl文件里.這里我們看到render()方法中這行代碼
這里通過RenderSource.startRender()方法開始渲染萨脑,其startRender()方法是虛函數(shù)隐轩,其子類RenderAnnotationSource饺饭,RenderGeoJSONSource渤早,RenderRasterSource,RenderVectorSource瘫俊,RenderImageSource分別繼承并實(shí)現(xiàn)了它.