目标:(九十一)中的问题173
答案:会的,这是rex引擎启动后cpu、gpu占用率高的一个原因。
1、每一个图层(影像层、高层)在绘制时会往显存上传数据
osgEarthDrivers/engine_rex/LayerDrawable.cpp
void
LayerDrawable::drawImplementation(osg::RenderInfo& ri) const
{
if (_layer)
{
if (ds._layerUidUL >= 0)
ds._ext->glUniform1i(ds._layerUidUL, (GLint)_layer->getUID());
if (ds._layerOpacityUL >= 0 && _visibleLayer)
ds._ext->glUniform1f(ds._layerOpacityUL, (GLfloat)_visibleLayer->getOpacity());
if (ds._layerMinRangeUL >= 0 && _imageLayer)
ds._ext->glUniform1f(ds._layerMinRangeUL, (GLfloat)_imageLayer->getMinVisibleRange());
if (ds._layerMaxRangeUL >= 0 && _imageLayer)
ds._ext->glUniform1f(ds._layerMaxRangeUL, (GLfloat)_imageLayer->getMaxVisibleRange());
}
}
2、每一个瓦片在绘制时,会往显存上传数据,包括往纹理单元上传纹理数据,如果瓦片很多,这种上传是很频繁的。
osgEarthDrivers/engine_rex/DrawTileCommand.cpp
void
DrawTileCommand::draw(osg::RenderInfo& ri, DrawState& dsMaster, osg::Referenced* layerData) const
{
ds._ext->glUniform4fv(ds._tileKeyUL, 1, _keyValue.ptr());
ds._ext->glUniform1i(ds._layerOrderUL, (GLint)_order);
ds._ext->glUniform2fv(ds._elevTexelCoeffUL, 1, _elevTexelCoeff.ptr());
ds._ext->glUniform2fv(ds._morphConstantsUL, 1, _morphConstants.ptr());
state.setActiveTextureUnit((*dsMaster._bindings)[s].unit());
sampler._texture->apply(state);
ds._ext->glUniformMatrix4fv(samplerState._matrixUL, 1, GL_FALSE, sampler._matrix.ptr());
ds._ext->glUniform1f(ds._parentTextureExistsUL, sampler._texture.valid() ? 1.0f : 0.0f);
state.setActiveTextureUnit((*dsMaster._bindings)[s].unit());
sampler._texture->apply(state);
}
待继续分析列表:
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、地形子节点的作用((十二