[osg-users] Pragmatic shader - a new #pragma directive proposition

Robert Milharcic robert.milharcic at ib-caddy.si
Fri Jan 15 04:20:51 PST 2016

Hi Robert Osfield et. al.,

On 14.1.2016 16:34, Robert Osfield wrote:
> I'm still open to making the shader parsing extensible, it seems like
> an interesting experimental tool.

As Sebastian already pointed out, the actual parsing can be done outside osg, perhaps before Shader::setShaderSource() call or at some already provided callback. In my opinion, it is more interesting to have a spot where all the necessary information for the preprocessing step converge, so that at this point user can regain some useful control over the shader composition.

I was going through a Shader.cpp to find a spot/function where all the information needed for the shader composition is at hand. Unsurprisingly, that function turned out to be void PerContextShader::compileShader(osg::State& state);. The PerContextShader::compileShader() does all the preprocessing on a shader source, like state.convertVertexShaderSourceToOsgBuiltIns(), insertion of the #version, inserting line numbers for debug purposes and generates the define string based on current define set found in osg::State.

The PerContextShader::compileShader() is a function of an internal class but the osg::Shader::compileShader(osg::State& state) (which calls PerContextShader::compileShader()) isn't. That being said, minimum work required to provide some degree of extensibility is to simply make osg::Shader::compileShader(osg::State& state) virtual.


Robert Milharcic

More information about the osg-users mailing list