osgEarth的Rex引擎原理分析(五十七)osgEarth中多個着色器的源代碼的編譯鏈接過程

目標:(五十四)中的問題129

osgEarth中多個着色器的源代碼的編譯鏈接過程

1、先一個一個編譯

void Shader::PerContextShader::compileShader(osg::State& state)
{
    _extensions->glShaderSource( _glShaderHandle, 1, &sourceText, NULL );
    _extensions->glCompileShader( _glShaderHandle );
}

Shader::PerContextShader::PerContextShader(const Shader* shader, unsigned int contextID) :
        osg::Referenced(),
        _contextID( contextID )
{
    _glShaderHandle = _extensions->glCreateShader( shader->getType() );
}

2、再鏈接

void Program::compileGLObjects( osg::State& state ) const
{
    getPCP( state )->linkProgram(state);
}

void Program::PerContextProgram::linkProgram(osg::State& state)
{
    _extensions->glAttachShader( _glProgramHandle, itr->first );
}

3、再使用

void
VirtualProgram::apply( osg::State& state ) const
{
    pcp->useProgram();
}

void Program::PerContextProgram::useProgram() const
{
    _extensions->glUseProgram( _glProgramHandle  );
}


Program::PerContextProgram::PerContextProgram(const Program* program, unsigned int contextID, GLuint programHandle ) :
        osg::Referenced(),
        _glProgramHandle(programHandle),
        _loadedBinary(false),
        _contextID( contextID ),
        _ownsProgramHandle(false)
{
    _glProgramHandle = _extensions->glCreateProgram();
}

待繼續分析列表:

9、earth文件中都有哪些options((九)中問題)

10、如何根據earth文件options創建不同的地理信息引擎節點((九)中問題)

11、rex地理信息引擎的四樑八柱((九)中問題)

12、osgEarth::TerrainEngineNode中setMap方法作用((十二)中問題)

13、RexTerrainEngineNode中_mapFrame的作用((十二)中問題)

14、地形變形(Terrain morphing)((十二)中問題)

15、地球瓦片過期門限的含義((十二)中問題)

16、高分辨率優先的含義((十二)中問題)

17、OSGEARTH_DEBUG_NORMALS環境變量的作用((十二)中問題)

18、活躍瓦片寄存器的作用((十二)中問題)

19、資源釋放器子節點的作用((十二)中問題)

20、共享幾何圖形池子節點的作用((十二)中問題)

21、分頁瓦片加載器子節點的作用((十二)中問題)

22、分頁瓦片卸載器子節點的作用((十二)中問題)

23、柵格化器子節點的作用((十二)中問題)

24、地形子節點的作用((十二)中問題)

25、綁定渲染器的作用((十二)中問題)

26、地圖回調函數的作用((十二)中問題)

27、如何將地圖圖層添加到rex引擎中((十二)中問題)

28、選擇信息的作用((十二)中問題)

29、瓦片包圍盒修改回調函數的作用((十二)中問題)

30、刷新rex引擎((十二)中問題)

31、刷新邊界作用((十二)中問題)

32、osgEarth::Metrics類的意義((十四)中問題)

33、請求合併隊列_mergeQueue((十四)中問題)

34、分頁瓦片加載器在更新遍歷時對請求處理過程((十四)中問題)

35、分頁瓦片加載器在更新遍歷時對已處理請求裁剪過程((十四)中問題)

36、已處理的請求隊列_requests((十四)中問題)

37、DatabasePager中的_fileRequestQueue和_httpRequestQueue((十六)中問題)

38、瓦片請求的生成到處理過程詳解((十六)中問題)

39、瓦片節點TileNode的創建過程((十七)中問題)

40、request請求加載瓦片優先級的含義((十七)中問題)

41、request的_internalHandle的作用((十七)中問題)

42、DatabaseRequest中_objectCache含義((十七)中問題)

42、osgEarth的多線程分析((十七)中問題)

43、osgEarth的緩存及其結構((十七)中問題)

44、DatabaseThread從緩存加載數據過程((十七)中問題)

45、DatabaseThread從文件加載數據過程((十七)中問題)

46、決定創建TileNode的時機條件((十七)中問題)

47、TerrainEngineNode的createTileModel過程詳解((十七)中問題)

48、DatabaseThread中CompileSet的含義((十七)中問題)

48、PagerLoader的traverse過程詳解((十七)中問題)

49、DatabaseThread的run過程詳解((十七)中問題)

50、LoadTileData的invoke過程詳解((十七)中問題)

51、TileNode的cull過程詳解((十七)中問題)

52、遮罩生成器osgEarth::Drivers::RexTerrainEngine::MaskGenerator((十八)中問題)

53、RexTerrainEngineNode::traverse過程詳解((十八)中問題)

54、TileNode節點下的場景樹分析((十八)中問題)

55、地形瓦片大小尺寸和LOD的關係((十八)中問題)

56、TileNode的_tileKeyValue作用((十八)中問題)

57、TileNode的_morphConstants作用((十八)中問題)

58、TileNode的_stitchNormalMap作用((十八)中問題)

59、TileNode的_renderModel作用((十八)中問題)

60、初始化高程柵格過程詳解((十八)中問題)

61、LoadTileData中的CreateTileModelFilter作用((十八)中問題)

62、TileNode節點何時會從場景樹中移除((十八)中問題)

63、osgEarth::Map的Profile創建過程((二十)中問題)

64、osgEarth::TerrainTileModelFactory添加顏色層和影像層的區別((二十一)中問題)

65、osgEarth::PatchLayer修補層的作用((二十一)中問題)

66、osgEarth::TerrainLayer中的_memCache(osgEarth::MemCache)詳解((二十一)中問題)

67、osgEarth::Layer::RenderType圖層渲染類型的作用((二十一)中問題)

68、osgEarth::TerrainLayer中TileSource的作用((二十一)中問題)

69、earth文件沒有設置高程圖層會不會有默認高程層(高程均爲0)((二十一)中問題)

70、TerrainTileModelFactory::addColorLayers過程詳解((二十一)中問題)

71、TerrainTileModelFactory::addElevation過程詳解((二十一)中問題)

72、osgearth中可能用到的幾個全局實例對象(osgDB::Registry osgEarth::Registry osg::Timer osg::DisplaySetting)((二十三)中問題)

73、osgEarth::Map::addLayer過程詳解((二十三)中問題)

74、TileNode::setDirty過程詳解((二十三)中問題)

75、請求四個狀態的含義(IDLE RUNNING MERGING FINISHED)((二十三)中問題)

76、什麼時候刪除TileNode節點,不會一直增加吧((二十三)中問題)

77、寄存器中請求狀態活動記錄的含義Registry::instance()->endActivity( req->getName() )((二十三)中問題)

78、瓦片TileNode的生命週期流程詳解((二十三)中問題)

79、rex引擎如何將瓦片構造成地球形狀((二十五)中問題)

80、高程、影像文件格式詳解((二十五)中問題)

81、TileNode的merge過程詳解((二十六)中問題)

82、osgEarth支持的空間參考座標系詳解(osgEarth::SpatialReference、osgEarth::CubeSpatialReference、osgEarth::TangentPlaneSpatialReference)((二十九)中問題)

83、osgEarth地球橢球體ellipsoid 大地基準面datum 地圖投影Projection詳解((二十九)中問題)

84、空間參考座標系和座標系統類型的關係(geocentric projected)((二十九)中問題)

85、proj4是什麼((二十九)中問題)

86、爲什麼要刪除設置過的垂直水準面((二十九)中問題)

87、osgEarth如何對投影座標系和大地座標系進行顯示處理的((二十九)中問題)

88、TileNode的節點構成,一個surface、tilenode((三十)中問題)

89、MapFram和MapInfo的關係((三十)中問題)

90、ModifyBoundingBoxCallback的使用時機和場合((三十)中問題)

91、MapFrame爲什麼要單獨存放高程層_elevationLayers,而不是放在圖層_layers中((三十)中問題)

92、MapFrame和Map中高程池的作用osg::ref_ptr<ElevationPool> _elevationPool((三十)中問題)

93、osgEarth::Drivers::RexTerrainEngine::TileDrawable分析((三十)中問題)

94、請求讀取地理信息失敗會如何處理((三十二)中問題)

95、RexTerrainEngineNode的遍歷過程詳解((三十三)中問題)

96、osgEarth::Drivers::RexTerrainEngine::TerrainCuller的apply過程詳解((三十三)中問題)

97、RexTerrainEngineNode的updateState過程詳解 設置了很多着色器變量((三十三)中問題)

98、什麼時候分配opengl資源((三十三)中問題)

99、TileNode釋放opengl資源過程releaseGLObjects詳解((三十三)中問題)

100、最近一次遍歷的幀號和時間是怎麼設置呢(在渲染遍歷裏),怎麼就不會再渲染遍歷該瓦片節點了((三十三)中問題)

101、osg::State和osg::StateSet的關係((三十四)中問題)

102、osgEarth::SpatialReference和osgEarth::Profile的關係((三十六)中問題)

103、osgEarth的Geographic、Geodetic、Geocentric和Project的關係((三十六)中問題)

104、TileNode繪製過程詳解((三十七)中問題)

105、如何控制父子TileNode節點的顯隱((三十七)中問題)

106、GeometryPool的createGeometry過程詳解((三十七)中問題)

107、TileNode如何從地圖中提取與其分辨率相適應的圖像數據((三十七)中問題)

108、如何定製橢球體並進行橢球體間座標轉換((四十五)中問題)

109、Horizon Cull是什麼意思((四十五)中問題)

110、osgEarth::Drivers::RexTerrainEngine::DrawState的作用((四十五)中問題)

111、osgEarth的線程分析((四十五)中問題)

112、從osgEarth到osg到Opengl((四十五)中問題)

113、osg::Program與osgEarth::VirtualProgram的關係((四十五)中問題)

114、rex引擎shader文件中的#pragma vp_entryPoint vp_location等含義((四十五)中問題)

115、rex引擎的着色器如何區分頂點和片段((四十五)中問題)

116、osg::Program是如何對着色器及其變量進行管理的((四十五)中問題)

117、osg的窗口是如何與opengl集成的((四十五)中問題)

118、osg是如何實現opengl的初始化的((四十五)中問題)

119、CGCS2000餘WGS84座標系的比較((四十六)中問題)

120、着色器代碼文件到着色器程序的過程((五十一)中問題)

121、osgEarth::VirtualProgram默認出現在哪些位置((五十一)中問題)

122、rex引擎默認的幾個着色器功能分析((五十一)中問題)

123、osgEarth::TileRasterizer功能詳解((五十二)中問題)

124、osgEarth::ImageLayer如何使用VirtualProgram((五十二)中問題)

125、osgEarth::ShaderFactory osgEarth::ShaderLoader關係((五十四)中問題)

126、osgEarth::URI和osgEarth::URIContext的作用((五十四)中問題)

127、RexTerrainEngineNode中_renderBindings的作用((五十四)中問題)

128、Rex引擎如何給shader文件中的uniform變量賦值((五十四)中問題)

129、osgEarth中多個着色器的源代碼的編譯鏈接過程((五十四)中問題)

130、osgEarth::ShaderFactory osgEarth::ShaderLoader關係((五十四)中問題)

131、TileNode與DrawTileCommand的關係((五十五)中問題)

132、如何提取出指定範圍的高程網格((五十五)中問題)

133、從earth文件加載高層圖層的過程((五十五)中問題)

134、TerrainTileModel與TileRenderModel的關係((五十五)中問題)

135、EngineContext的作用((五十五)中問題)

136、幾個uniformmap的關係((五十五)中問題)

137、DrawTileCommand中的採樣器((五十五)中問題)

138、TileNode中的_surface(SurfaceNode)作用是什麼((五十五)中問題)

139、stateset中的adduniform、setTextureAttribute等最後是如何反應到opengl上的((五十五)中問題)

140、狀態樹和渲染樹的關係((五十五)中問題)

141、TileRenderModel中的RenderingPass和RenderBindings((五十五)中問題)

142、高程瓦片的繪製過程((五十五)中問題)

 

 

 

 

 

 

發佈了379 篇原創文章 · 獲贊 35 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章