目标:(五十四)中的问题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、共享几何图形池子